/// <summary> /// Attack the first Enemy in range.</summary> /// <param name="character"></param> public void UpdateState(BaseCharacter character) { if (character.IsMoving) { character.ChangeState(character.MoveState); return; } if (character.Enemies.Count == 0 || character.TargetedEnemy == null) { character.ChangeState(character.AlertState); return; } //// If not in Attack Range any more, chase the enemy //if (!character.EnemiesInAttackRange.Contains(character.TargetedEnemy)) //{ // character.ChangeState(character.ChaseState); // return; //} //// Attack //if (character.CanAttack()) //{ // character.Attack(character.TargetedEnemy); //} }
/// <summary> /// Start chasing the Enemies in range.</summary> /// <param name="character"></param> public void UpdateState(BaseCharacter character) { if (character.Enemies.Count == 0) { character.ChangeState(character.IdleState); return; } if (GameTime.time >= character.AlertnessEndTime) { character.TargetedEnemy = character.Enemies[0]; character.ChangeState(character.ChaseState); } }
/// <summary> /// Start moving to the desired location.</summary> /// <param name="character"></param> public void UpdateState(BaseCharacter character) { if (character.Enemies.Count > 0) { character.ChangeState(character.AlertState); } else { if (!character.IsMoving) { character.ChangeState(character.IdleState); } } }
/// <summary> /// Chase the Enemy until he is in attack range.</summary> /// <param name="character">The Character</param> public void UpdateState(BaseCharacter character) { if (character.TargetedEnemy == null) { character.ChangeState(character.AlertState); return; } if (GameTime.time >= character.ChaseEndTime && !character.Enemies.Contains(character.TargetedEnemy)) { character.ChangeState(character.AlertState); return; } if (character.EnemiesInAttackRange.Contains(character.TargetedEnemy)) { character.ChangeState(character.AttackState); } }