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;
}