예제 #1
0
    public bool Condition(IAIAction.IConditional.Token token)
    {
        switch (currentState)
        {
        case State.Hover:
            return(!token.Source.Character.GroundCheck.Evaluate());

        default:
            if (AttackGetColliders.Get(out Collider2D col))
            {
                FollowData.SetPosition(col.transform.position);
                currentState = State.Attack;
                return(true);
            }
            else if (FollowGetColliders.Get(out col))
            {
                FollowData.SetPosition(col.transform.position);
                currentState = State.Follow;
                return(true);
            }
            else if (currentState != State.None)
            {
                currentState = State.Hover;
                return(true);
            }
            return(false);
        }
    }
 public bool Execute(AIActionList.Token token)
 {
     if (GetColliders.Get(out Collider2D col))
     {
         FollowData.SetPosition(col.transform.position);
         if (Mathf.Abs(token.Source.Rigidbody.position.x - FollowData.Position.x) > FollowOffset)
         {
             return(Follow(token));
         }
     }
     else if (FollowData.IsOn() && Mathf.Abs(token.Source.Rigidbody.position.x - FollowData.Position.x) > FollowOffset)
     {
         return(Follow(token));
     }
     return(false);
 }
 public bool Condition(IAIAction.IConditional.Token token)
 {
     if (token.Source.Character.GroundCheck.Evaluate())
     {
         if (FollowGetColliders.Get(out Collider2D col))
         {
             FollowData.SetPosition(col.transform.position);
         }
         else if (!FollowData.IsOn() || Vector2.Distance(FollowData.Position, token.Source.Rigidbody.position) < FollowOffset.x)
         {
             return(false);
         }
         Vector2 dir = FollowData.Position - token.Source.Rigidbody.position;
         if (Mathf.Abs(dir.y) < FollowOffset.y)
         {
             return(false);
         }
         bool belowY = dir.y < 0f;
         speed = belowY ? -token.Source.Speed.GetAscendingValue() : token.Source.Speed.GetAscendingValue();
         if (dir.x > 0f)
         {
             // RIGHT
             token.Source.SpriteRenderer.flipX = false;
             if (SetRightSide(token, belowY))
             {
                 return(true);
             }
         }
         else
         {
             // LEFT
             token.Source.SpriteRenderer.flipX = true;
             if (SetLeftSide(token, belowY))
             {
                 return(true);
             }
         }
         if (currentDir != Direction.DOWN)
         {
             return(true);
         }
     }
     return(false);
 }