AIController.updateNPC C# (CSharp) Method

updateNPC() protected method

protected updateNPC ( ) : bool
return bool
	protected bool updateNPC ()
	{
		// Play idle sound0
		if (idleCounter > idlePlayTime)
		{
			idlePlayTime = Random.Range (90.0f, 120.0f);
			idleCounter = 0.0f;
			AudioClip idle = null;
			// Get skin type to know which NPC sounds to play
			if (this.SkinType.Equals (NPCSkinType.Bopper))
			{
				idle = (AudioClip)bopperIdleSounds[Random.Range (0, bopperIdleSounds.Length)];
			}
			else if (this.SkinType.Equals (NPCSkinType.Hippie))
			{
				idle = (AudioClip)hippieIdleSounds[Random.Range (0, hippieIdleSounds.Length)];
			}
			else if (this.SkinType.Equals (NPCSkinType.Hottie))
			{
				idle = (AudioClip)hottieIdleSounds[Random.Range (0, hottieIdleSounds.Length)];
			}
			else if (this.SkinType.Equals (NPCSkinType.MowerMan))
			{
				idle = (AudioClip)mowerIdleSounds[Random.Range (0, mowerIdleSounds.Length)];
			}
			else if (this.SkinType.Equals (NPCSkinType.OldMan))
			{
				idle = (AudioClip)oldmanIdleSounds[Random.Range (0, oldmanIdleSounds.Length)];
			}
			
			audio.PlayOneShot (idle, 1.0f);
		}
		idleCounter += Time.deltaTime;

		if (grabbed)
			return true;

		if (playerInRange) 
		{
			if( getPlayer() != null )
			{
				Vector2 playerSpeed = getPlayer ().rigidbody2D.velocity;
				if (playerSpeed == Vector2.zero && alertLevel > 0) 
				{
					decrementAlertLevel ();
				}
			}
		} 
		else if (alertLevel > 0) 
		{
			decrementAlertLevel ();
		}

		if (alerted)
			return true;

		if (panicked) 
		{
			/*
			timePanicked -= Time.deltaTime;
			if (timePanicked <= 0)
			{
				panicked = false;
				panicTexture.renderer.enabled = false;
				speed = 1;
				alertLevel = alertThreshold - 0.1f;
				broadcastAlertLevelChanged(AlertLevelType.Normal);
				return true;
			}
			 */

			if (nearWall) 
			{
				nearWall = false;
				moveDir = Quaternion.AngleAxis (90, transform.forward) * -moveDir;
			}

			Vector3 npcPosition = transform.position;
			float step = speed * Time.deltaTime;
			Vector3 movement = Vector3.MoveTowards (npcPosition, new Vector3 (moveDir.normalized.x * step, moveDir.normalized.y * step) + npcPosition, step);
			//transform.position = new Vector3(moveDir.normalized.x * step, moveDir.normalized.y * step) + npcPosition;
			determineDirectionChange (npcPosition, transform.position);

			Vector3 direction = Vector3.Normalize (movement - transform.position);
			Vector3 changeMovement = avoid (direction);

			if (changeMovement != Vector3.zero) 
			{
				Vector3 newPos = Vector3.MoveTowards (npcPosition, changeMovement, step);
				determineDirectionChange (transform.position, newPos);
				transform.position = newPos;
			} 
			else 
			{
				determineDirectionChange (transform.position, movement);
				transform.position = movement;
			}

			// OLD
			//Vector3 oldVelocity = new Vector3(rigidbody2D.velocity.x, rigidbody2D.velocity.y);
			//rigidbody2D.velocity = moveDir.normalized * speed;
			//determineDirectionChange(oldVelocity, new Vector3(rigidbody2D.velocity.x, rigidbody2D.velocity.y));

			return true;
		}
		if( getPlayer() != null )
		{
			player = getPlayer ();
			if (checkForPlayer () && player.rigidbody2D != null && player.rigidbody2D.velocity != Vector2.zero) 
			{
				if (NPCHandleSeeingPlayer ())
					return true;
			}
		}
		if (scared) 
		{
			scaredTimeLeft -= Time.deltaTime;
			if (scaredTimeLeft <= 0) 
			{
				scared = false;
				scaredTexture.renderer.enabled = false;
			}

			Vector3 npcPosition = transform.position;
			float step = speed * Time.deltaTime;
			transform.position = new Vector3 (moveDir.normalized.x * step, moveDir.normalized.y * step) + npcPosition;
			determineDirectionChange (npcPosition, transform.position);

			return true;
		}

		if (lured) 
		{
			return handleLured ();
		}

		return false;
	}