Пример #1
0
    // Attempt to change state
    public void changeState(MinionStateMachine.MinionState new_state)
    {
        if (new_state == currState_)
        {
            return;
        }

        // can we make this state change?
        if (!checkStateChange(currState_, new_state))
        {
            return;
        }

        Debug.Log("MinonStateMachine.changeState: Current State = " + stateToString(currState_) +
                  ", New State = " + stateToString(new_state));

        Debug.Log("MinonStateMachine.changeState: state change OK");

        // set the new state
        currState_ = new_state;

        // send the event
        if (MinionStateChangeEvent != null)
        {
            MinionStateChangeEvent(new_state);
        }
    }
Пример #2
0
    // return a string of the given state
    public string stateToString(MinionStateMachine.MinionState state)
    {
        switch (state)
        {
        case MinionState.idle:
            return("Idle");

        case MinionState.left:
            return("Left");

        case MinionState.right:
            return("Right");

        case MinionState.killed:
            return("Killed");

        case MinionState.resurrect:
            return("Resurrect");

        case MinionState.jump:
            return("Jump");

        case MinionState.falling:
            return("Falling");

        case MinionState.landing:
            return("Landing");
        }

        return("Unknown");
    }
Пример #3
0
    // Use this for initialization
    void Start()
    {
        // current state
        currState_ = MinionStateMachine.MinionState.idle;

        // grab the Minion state engine
        minionStateMachine_ = GetComponent <MinionStateMachine> ();
    }
    // handle the state change
    void MinionStateHandler(MinionStateMachine.MinionState new_state)
    {
        // perform checks on state change, not continuously
        switch (new_state)
        {
        case MinionStateMachine.MinionState.jump:

            // apply jump force
            float fx = 0f;
            float fy = minionJumpVerticalForce_;

            if (currState_ == MinionStateMachine.MinionState.left)
            {
                fx = -minionJumpHorizontalForce_;
            }
            else if (currState_ == MinionStateMachine.MinionState.right)
            {
                fx = minionJumpHorizontalForce_;
            }

            GetComponent <Rigidbody2D> ().AddForce(new Vector2(fx, fy));
            break;

        case MinionStateMachine.MinionState.falling:
            // if switching to falling from left or right state, set the horizontal velocity appropriately
            if (currState_ == MinionStateMachine.MinionState.left)
            {
                GetComponent <Rigidbody2D> ().velocity = new Vector2(-moveSpeed_, GetComponent <Rigidbody2D> ().velocity.y);
            }
            else if (currState_ == MinionStateMachine.MinionState.right)
            {
                GetComponent <Rigidbody2D> ().velocity = new Vector2(moveSpeed_, GetComponent <Rigidbody2D> ().velocity.y);
            }
            break;
        }
        currState_ = new_state;
    }
Пример #5
0
    // check for valid state changes
    public bool checkStateChange(MinionStateMachine.MinionState old_state, MinionStateMachine.MinionState new_state)
    {
        bool flag = false;

        switch (new_state)
        {
        case MinionState.idle:
            if (old_state != MinionState.falling)
            {
                flag = true;
            }
            break;

        case MinionState.left:
            if ((old_state == MinionState.idle) ||
                (old_state == MinionState.right) ||
                (old_state == MinionState.landing))
            {
                flag = true;
            }
            break;

        case MinionState.right:
            if ((old_state == MinionState.idle) ||
                (old_state == MinionState.left) ||
                (old_state == MinionState.landing))
            {
                flag = true;
            }
            break;

        case MinionState.jump:
            if ((old_state == MinionState.idle) ||
                (old_state == MinionState.left) ||
                (old_state == MinionState.right))
            {
                flag = true;
            }

            break;

        case MinionState.falling:
            if ((old_state == MinionState.idle) ||
                (old_state == MinionState.left) ||
                (old_state == MinionState.right) ||
                (old_state == MinionState.jump))
            {
                flag = true;
            }

            break;

        case MinionState.landing:
            if (old_state == MinionState.falling)
            {
                flag = true;
            }

            break;

        case MinionState.killed:
            if ((old_state == MinionState.idle) ||
                (old_state == MinionState.left) ||
                (old_state == MinionState.right) ||
                (old_state == MinionState.jump) ||
                (old_state == MinionState.falling))
            {
                flag = true;
            }

            break;

        case MinionState.resurrect:
            if (old_state == MinionState.killed)
            {
                flag = true;
            }
            break;
        }

        return(flag);
    }
Пример #6
0
 // handle the state change
 void MinionStateHandler(MinionStateMachine.MinionState new_state)
 {
     currState_ = new_state;
 }
Пример #7
0
 // Use this for initialization
 void Start()
 {
     // initial minion state
     currState_ = MinionStateMachine.MinionState.idle;
 }