public override void Invoke() { switch (curr) { case Behavior.Idle: _behave.Idle(); break; case Behavior.MoveTo: _behave.MoveTo(targetPos, speed, threshold); break; case Behavior.MoveAwayFrom: _behave.MoveFrom(targetPos, speed, threshold + 1); break; case Behavior.Feed: _behave.Feed(target); break; case Behavior.Attack: _behave.MeleeAttack(targetPos); break; case Behavior.Ranged: _behave.RangedAttack(targetPos, speed); break; case Behavior.Socialize: _behave.Socialize(); break; case Behavior.Custom: custom.InvokeBehavior(); break; } }
// Ranged() // move from a target and launch a projectile /// <summary> /// If the target is outside of our range, move to it and attack. Else, attack. /// </summary> public void Ranged() { #region Get Nearest + Null Check var nearestEnemy = AiData.Checks.WeakestCreature(); Vector2 pos; if (nearestEnemy != null) { pos = nearestEnemy.gameObject.transform.position; //Debug.Log(this.gameObject + " found nearest enemy at " + pos); //Debug.Log("My position: " + transform.position); } else { pos = transform.position; return; } #endregion var rat = AiData.RangeAttackThreshold; var eht = AiData.EngageHostileThreshold; var engage = CheckRangedThreshold(pos, rat, eht); if (engage < 0) { if (Behaviour.MoveFrom(pos, AiData.Speed, rat - eht)) { Behaviour.RangedAttack(pos, AiData.Speed); } } else if (engage > 0) { if (Behaviour.MoveTo(pos, AiData.Speed, rat + eht)) { Behaviour.RangedAttack(pos, AiData.Speed); } } else { Behaviour.RangedAttack(pos, AiData.Speed); } }