コード例 #1
0
        public static void UpdateInputs()
        {
            lastState = state;
            UpdatePlayerInfo();
            Hotkeys.instance?.Update();
            Savestates.HandleSaveStates();
            Savestates.routine?.Update();
            HandleFrameRates();
            CheckToEnable();
            FrameStepping();

            if (HasFlag(state, State.Enable))
            {
                Running = true;

                if (HasFlag(state, State.FrameStep))
                {
                    StudioCommunicationClient.instance?.SendStateAndPlayerData(CurrentStatus, PlayerStatus, !ShouldForceState);
                    return;
                }

                /*
                 * if (HasFlag(state, State.Record)) {
                 *      controller.RecordPlayer();
                 * }
                 */
                else
                {
                    bool fastForward = controller.HasFastForward;
                    controller.AdvanceFrame(false);
                    if (fastForward &&
                        (!controller.HasFastForward ||
                         controller.Current.ForceBreak &&
                         controller.CurrentInputFrame == controller.Current.Frames))
                    {
                        nextState |= State.FrameStep;
                        FrameLoops = 1;
                    }
                    if (!controller.CanPlayback || (!allowUnsafeInput && !(Engine.Scene is Level || Engine.Scene is LevelLoader || Engine.Scene is LevelExit || controller.CurrentFrame <= 1)))
                    {
                        DisableRun();
                    }
                }
                string status = controller.Current.Line + "[" + controller.ToString() + "]";
                CurrentStatus = status;
            }            /*
                          * else if (HasFlag(state, State.Delay)) {
                          *     Level level = Engine.Scene as Level;
                          *     if (level.CanPause && Engine.FreezeTimer == 0f)
                          *             EnableRun();
                          *
                          * }*/
            else
            {
                Running       = false;
                CurrentStatus = null;
                if (!Engine.Instance.IsActive)
                {
                    UpdateVirtualInputs();
                    for (int i = 0; i < 4; i++)
                    {
                        if (MInput.GamePads[i].Attached)
                        {
                            MInput.GamePads[i].CurrentState = GamePad.GetState((PlayerIndex)i);
                        }
                    }
                }
            }
            StudioCommunicationClient.instance?.SendStateAndPlayerData(CurrentStatus, PlayerStatus, !ShouldForceState);
        }
コード例 #2
0
        public static void Update()
        {
            LastState = State;
            Hotkeys.Update();
            Savestates.HandleSaveStates();
            Savestates.Routine?.Update();
            HandleFrameRates();
            CheckToEnable();
            FrameStepping();

            if (HasFlag(State, State.Enable))
            {
                bool canPlayback = Controller.CanPlayback;
                Running = true;

                if (HasFlag(State, State.FrameStep))
                {
                    StudioCommunicationClient.Instance?.SendStateAndPlayerData(CurrentStatus, PlayerStatus, !ShouldForceState);
                    return;
                }

                /*
                 * if (HasFlag(state, State.Record)) {
                 *  controller.RecordPlayer();
                 * }
                 */
                else
                {
                    Controller.AdvanceFrame();
                    if (Controller.Break && Controller.CurrentFrame < Controller.Inputs.Count)
                    {
                        NextState |= State.FrameStep;
                        FrameLoops = 1;
                    }

                    if (!canPlayback || (!AllowUnsafeInput &&
                                         !(Engine.Scene is Level || Engine.Scene is LevelLoader || Engine.Scene is LevelExit ||
                                           Controller.CurrentFrame <= 1)))
                    {
                        DisableRun();
                    }
                }

                if (canPlayback && Controller.CurrentFrame > 0)
                {
                    UpdateManagerStatus();
                }
            }
            else
            {
                Running       = false;
                CurrentStatus = null;
                if (!Engine.Instance.IsActive)
                {
                    UpdateVirtualInputs();
                    for (int i = 0; i < 4; i++)
                    {
                        if (MInput.GamePads[i].Attached)
                        {
                            MInput.GamePads[i].CurrentState = GamePad.GetState((PlayerIndex)i);
                        }
                    }
                }
            }

            StudioCommunicationClient.Instance?.SendStateAndPlayerData(CurrentStatus, PlayerStatus, !ShouldForceState);
        }