示例#1
0
文件: Elevator.cs 项目: hww/UnityTFSM
    IEnumerator WaitingState()
    {
        // ----------------------
        // On state event code
        // ----------------------

        onStateEvent = (BaseEvent evt) =>
        {
            ElevatorInputEvent e = evt as ElevatorInputEvent;
            if (e != null)
            {
                switch (e.name)
                {
                case ElevatorInputEvent.EName.OnPushDownButton:
                    Go(ElevatorStates.MovingState, evt);
                    break;

                case ElevatorInputEvent.EName.OnPushUpButton:
                    Go(ElevatorStates.MovingState, evt);
                    break;
                }
            }
        };

        yield break;
    }
示例#2
0
 void SendOnStateEvent(ElevatorInputEvent evt)
 {
     if (elevator == null)
     {
         return;
     }
     elevator.OnStateEvent(evt);
 }
示例#3
0
文件: Elevator.cs 项目: hww/UnityTFSM
    IEnumerator MovingState()
    {
        // ----------------------
        // On state exit code
        // ----------------------

        onStateExit = () =>
        {
            isMoving = false; // Just to demonstrate onExit method
        };

        // ----------------------
        // On state enter code
        // ----------------------

        // Get state argument. Just to demonstrate the feature
        ElevatorInputEvent e = stateValue as ElevatorInputEvent;

        if (e == null)
        {
            Go(ElevatorStates.WaitingState); // No - argument this is wrong
        }
        // Check if elevator can move
        int oldLevel = curentLevel;

        switch (e.name)
        {
        case ElevatorInputEvent.EName.OnPushDownButton:
            curentLevel = GetAvailableLevel(curentLevel - 1);
            break;

        case ElevatorInputEvent.EName.OnPushUpButton:
            curentLevel = GetAvailableLevel(curentLevel + 1);
            break;
        }
        if (oldLevel == curentLevel)
        {
            Go(ElevatorStates.WaitingState); // No - can't move
        }
        // Yes - can move
        isMoving = true;

        float animTime  = 0;
        float animDur   = 1f / template.speed;
        float smothTime = animDur * 0.3f;

        Vector3 curentVelocity = Vector3.zero;
        Vector3 targetPosition = GetLevelPosition(curentLevel);

        substate = "while: animTime < animDur";  //< Just to demonstrate sub-state feature
        while (animTime < animDur)
        {
            // ----------------------
            // The state's arc code
            // ----------------------

            yield return(null);

            animTime          += Time.deltaTime;
            transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref curentVelocity, smothTime);
        }

        Go(ElevatorStates.WaitingState);
    }
示例#4
0
 void SendOnStateEvent(ElevatorInputEvent evt)
 {
     if (elevator == null) return;
     elevator.OnStateEvent(evt);
 }