Exemple #1
0
    ///<summary>
    /// Changing enemyacter state by detecting what kind of layer it touches
    ///</summary>
    protected virtual void ChangeState(EnemyState state)
    {
        if (enemyState == state || IsDead())
        {
            return;
        }

        if (IsAttacking())
        {
            OnAttackEnd.Invoke();
        }

        if (IsPatrolling())
        {
            OnPatrolEnd.Invoke();
        }

        if (IsChasing())
        {
            OnChaseEnd.Invoke();
        }

        if (IsIdling())
        {
            OnIdleEnd.Invoke();
        }
        // set new state
        var prevState = enemyState;

        enemyState = state;

        if (!IsAttacking())
        {
            m_General.canFlip = true;
        }

        if (IsAttacking())
        {
            OnAttack.Invoke();
        }

        if (IsPatrolling())
        {
            OnPatrol.Invoke();
        }

        if (IsChasing())
        {
            OnChase.Invoke();
        }

        if (IsIdling())
        {
            OnIdle.Invoke();
        }

        OnMotorStateChanged.Invoke(prevState, enemyState);
    }
    public void StopPatrol()
    {
        if (!isEnabled)
        {
            Debug.LogWarning(name + "'s patrol behaviour is not setupped!");
            return;
        }

        StopAllCoroutines();
        data.enemyMovementBehaviour.StopAllCoroutines();
        data.enemyMovementBehaviour.SetMoveDirection(Vector2.zero);
        wasInterrupted = true;
        OnPatrolEnd.Invoke();
    }