Пример #1
0
    public void CheckDistance()
    {
        if (!target.GetComponent <Player>().isDead)
        {
            if (Vector3.Distance(target.position, transform.position) <= chaseRadius)
            {
                if (Vector3.Distance(target.position, transform.position) <= attackRadius)
                {
                    //Attack state

                    ChangeAnim(target.position - transform.position);
                    stateMachine.ChangeState(Monk_AttackState.Instance());
                }
                else if (!isCasting)
                {
                    //Chase state
                    stateMachine.ChangeState(Monk_WalkingState.Instance());
                }
            }
            else
            {
                //Idle State
                stateMachine.ChangeState(Monk_IdleState.Instance());
            }
        }
        else
        {
            //If player is dead
            ChangeAnim(Vector2.down);
            StopCoroutine("CastCo");
        }
    }
Пример #2
0
    public static Monk_IdleState Instance()
    {
        if (_instance == null)
        {
            _instance = new Monk_IdleState();
        }

        return(_instance);
    }
Пример #3
0
    public override void ExecuteState(Monk owner)
    {
        if (!owner.isCasting)
        {
            owner.StartCasting();
            alreadyAttacked = true;

            if (alreadyAttacked)
            {
                alreadyAttacked = false;
                owner.GetFSM().ChangeState(Monk_IdleState.Instance());
            }
        }
    }
Пример #4
0
    private void Start()
    {
        myRigidbody = GetComponent <Rigidbody2D>();

        anim = GetComponent <Animator>();
        anim.SetFloat("moveX", 0f);
        anim.SetFloat("moveY", -1f);

        isCasting = false;

        target = GameObject.FindWithTag("Player").transform;

        stateMachine = new StateMachine <Monk>(this);

        stateMachine.currentState = Monk_IdleState.Instance();
    }