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); }