Пример #1
0
        // Start is called before the first frame update
        void Start()
        {
            // neutral state, triggering no callbacks
            currentState    = State.INIT;
            onDoneCallbacks = new Callbacks <State>();

            StateManager.Instance.onStateChangeTo[StateManager.States.HUD].Add((s) => StopTraining(), once: true);

            stateMachine.onEnter[State.START] = (state) =>
            {
                TutorialSteps.Instance.audioManager.ScheduleAudioClip(pauseMenuAudio.start, queue: true,
                                                                      onEnd: () => TutorialSteps.PublishNotification("Lift one foot off the pedals")
                                                                      );


                RudderPedals.PresenceDetector.Instance.canPause   = true;
                RudderPedals.PresenceDetector.Instance.pauseAudio = false;
                RudderPedals.PresenceDetector.Instance.OnPause((s) => Next(), once: true);
                PauseMenu.PauseMenu.Instance.switchScene.enabled = false;
            };

            stateMachine.onEnter[State.PAUSE] = (state) =>
            {
                TutorialSteps.Instance.audioManager.ScheduleAudioClip(pauseMenuAudio.paused);

                Next();
            };

            stateMachine.onEnter[State.UNPAUSE] = (state) =>
            {
                TutorialSteps.Instance.audioManager.ScheduleAudioClip(pauseMenuAudio.unpause, queue: true,
                                                                      onEnd: () => TutorialSteps.PublishNotification("Put both feet back on the pedals")
                                                                      );

                RudderPedals.PresenceDetector.Instance.OnUnpause((s) => Next(), once: true);
            };

            stateMachine.onEnter[State.TELEPORT] = (state) =>
            {
                TutorialSteps.Instance.audioManager.ScheduleAudioClip(pauseMenuAudio.teleport,
                                                                      onEnd: () => TutorialSteps.PublishNotification("Go to the menu and touch the Control button")
                                                                      );

                RudderPedals.PresenceDetector.Instance.OnPause((s) => Next(), once: true);
            };

            stateMachine.onEnter[State.DONE] = (state) =>
            {
                RudderPedals.PresenceDetector.Instance.canPause   = true;
                RudderPedals.PresenceDetector.Instance.pauseAudio = true;
                PauseMenu.PauseMenu.Instance.switchScene.enabled  = true;
                onDoneCallbacks.Call(State.DONE);
            };
        }
Пример #2
0
        // Start is called before the first frame update
        void Start()
        {
            initialAriaTarget = ariaNavigation.target;
            currentState      = State.START;
            ariaTrigger.TriggerEnterCallback((pos) =>
            {
                var diff = (pos - ariaNavigation.target).magnitude;
                Debug.Log($"Aria Trigger, posDiff: {diff}, waiting: {waitingForTrigger}");
                if (diff < 1f && waitingForTrigger)
                {
                    Next();
                }
            });

            StateManager.Instance.onStateChangeTo[StateManager.States.HUD].Add((s) => StopTraining(), once: true);

            // states independent of input device
            stateMachine.onExit[State.FORWARD]    = (state) => waitingForTrigger = false;
            stateMachine.onExit[State.BACKWARD]   = (state) => waitingForTrigger = false;
            stateMachine.onExit[State.TURN_RIGHT] = (state) => waitingForTrigger = false;
            stateMachine.onExit[State.TURN_LEFT]  = (state) => waitingForTrigger = false;
            stateMachine.onEnter[State.DONE]      = (state) =>
            {
                onDoneCallbacks.Call(State.DONE);
            };

#if RUDDER
            stateMachine.onEnter[State.BACKWARD] = (state) =>
            {
                audioManager.ScheduleAudioClip(rudderWheelchairAudio.start_intro, queue: false);
                audioManager.ScheduleAudioClip(rudderWheelchairAudio.start, queue: true,
                                               onStart: () =>
                {
                    ariaNavigation.target = backwardGoal.position;
                    TutorialSteps.PublishNotification("Press the left pedal to go backward");
                    waitingForTrigger = true;
                },
                                               onEnd: () =>
                {
                }
                                               );
            };

            stateMachine.onEnter[State.FORWARD] = (state) =>
            {
                audioManager.ScheduleAudioClip(rudderWheelchairAudio.forward,
                                               onStart: () =>
                {
                    ariaNavigation.target = forwardGoal.position;
                    waitingForTrigger     = true;
                    TutorialSteps.PublishNotification("Press the right pedal to go forward", rudderWheelchairAudio.backwards.length);
                },
                                               onEnd: () =>
                {
                }
                                               );
            };

            stateMachine.onEnter[State.TURN_LEFT] = (state) =>
            {
                audioManager.ScheduleAudioClip(rudderWheelchairAudio.turn_left,
                                               onStart: () =>
                {
                    ariaNavigation.target = turnLeftGoal.position;
                    TutorialSteps.PublishNotification("Turn left and follow me", rudderWheelchairAudio.turn_left.length);
                    waitingForTrigger = true;
                },
                                               onEnd: () =>
                {
                }
                                               );
            };

            stateMachine.onEnter[State.TURN_RIGHT] = (state) =>
            {
                audioManager.ScheduleAudioClip(rudderWheelchairAudio.turn_right_intro);
                audioManager.ScheduleAudioClip(rudderWheelchairAudio.turn_right, queue: true,
                                               onStart: () =>
                {
                    ariaNavigation.target = turnRightGoal.position;
                    TutorialSteps.PublishNotification("Turn right and follow me", rudderWheelchairAudio.turn_right_intro.length + 2);
                    waitingForTrigger = true;
                }
                                               );
            };
#else
            stateMachine.onEnter[State.BACKWARD] = (state) =>
            {
                audioManager.ScheduleAudioClip(rudderWheelchairAudio.start_intro, queue: false);
                audioManager.ScheduleAudioClip(joystickWheelchairAudio.howto, queue: true);
                audioManager.ScheduleAudioClip(joystickWheelchairAudio.back, queue: true,
                                               onStart: () =>
                {
                    ariaNavigation.target = backwardGoal.position;
                    TutorialSteps.PublishNotification("Use the left joystick to drive back");
                    waitingForTrigger = true;
                },
                                               onEnd: () =>
                {
                }
                                               );
            };

            stateMachine.onEnter[State.FORWARD] = (state) =>
            {
                audioManager.ScheduleAudioClip(joystickWheelchairAudio.front, queue: false,
                                               onStart: () =>
                {
                    ariaNavigation.target = forwardGoal.position;
                    TutorialSteps.PublishNotification("Drive forwards");
                    waitingForTrigger = true;
                },
                                               onEnd: () =>
                {
                }
                                               );
            };

            stateMachine.onEnter[State.TURN_RIGHT] = (state) =>
            {
                audioManager.ScheduleAudioClip(joystickWheelchairAudio.right, queue: false,
                                               onStart: () =>
                {
                    ariaNavigation.target = turnRightGoal.position;
                    TutorialSteps.PublishNotification("Turn right", joystickWheelchairAudio.right.length + 2);
                    waitingForTrigger = true;
                },
                                               onEnd: () =>
                {
                }
                                               );
            };

            stateMachine.onEnter[State.TURN_LEFT] = (state) =>
            {
                audioManager.ScheduleAudioClip(joystickWheelchairAudio.left,
                                               onStart: () =>
                {
                    ariaNavigation.target = turnLeftGoal.position;
                    TutorialSteps.PublishNotification("Turn left", joystickWheelchairAudio.left.length + 2);
                    waitingForTrigger = true;
                },
                                               onEnd: () =>
                {
                }
                                               );
            };
#endif
        }