예제 #1
0
    public override bool TickAction()
    {
        if (fgoRequest == null)
        {
            if (Time.time > attackFinishTimestamp)
            {
                return(false);
            }

            return(true);
        }
        else
        {
            LineOfSight sight = attackAI.gameObject.GetComponentInChildren <LineOfSight> ();
            if (fgoRequest.DistanceToObject() > sight.radius)
            {
                return(false);                // abort since the object is too far away
            }
            if (fgoRequest.TickAction())
            {
                return(true);
            }
            else
            {
                fgoRequest = null;
                StartAttack();
                return(true);
            }
        }
    }
예제 #2
0
    public AttackRequest(float priority, AttackAI ai, GameObject targetObject) : base(priority)
    {
        attackAI       = ai;
        objectToAttack = targetObject;

        // check if we are in range
        float  attackRange = MovingObjectStats.GetAttackRangeForObject(ai.gameObject);
        MoveAI moveAI      = ai.GetComponent <MoveAI> ();

        fgoRequest = new FollowGameObjectRequest(0.5f, moveAI, attackRange);
        fgoRequest.targetObject = objectToAttack;
    }
예제 #3
0
 public override void StartAction()
 {
     if (fgoRequest != null && fgoRequest.IsInRange())
     {
         fgoRequest = null;
         StartAttack();
     }
     else
     {
         fgoRequest.StartAction();
     }
 }
 public override MoveRequest GetRequest()
 {
     if (gameObjectToFollow == null)
     {
         return(null);
     }
     else
     {
         float attackRange = MovingObjectStats.GetAttackRangeForObject(gameObject);
         FollowGameObjectRequest request = new FollowGameObjectRequest(0.5f, this, attackRange);
         request.targetObject = gameObjectToFollow;
         if (request.IsInRange())
         {
             return(null);
         }
         return(request);
     }
 }
    public override MoveRequest GetRequest()
    {
        if (path == null || pathIndex >= path.Length)
        {
            return(null);
        }

        FollowGameObjectRequest request = new FollowGameObjectRequest(0.5f, this, minDistanceToEachObject);

        request.targetObject = path [pathIndex];
        if (request.IsInRange())
        {
            if (++pathIndex < path.Length)
            {
                request.targetObject = path [pathIndex];
            }
            else
            {
                return(null);
            }
        }

        return(request);
    }