// 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);
     }
 }
Exemplo n.º 2
0
    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;
        }
    }