Exemple #1
0
            public void Apply(InputState state, IInputStateChangeHandler handler)
            {
                if (!(state is RulesetInputManagerInputState <T> inputState))
                {
                    throw new InvalidOperationException($"{nameof(ReplayState<T>)} should only be applied to a {nameof(RulesetInputManagerInputState<T>)}");
                }

                T[] released = Array.Empty <T>();
                T[] pressed  = Array.Empty <T>();

                var lastPressed = inputState.LastReplayState?.PressedActions;

                if (lastPressed == null || lastPressed.Count == 0)
                {
                    pressed = PressedActions.ToArray();
                }
                else if (PressedActions.Count == 0)
                {
                    released = lastPressed.ToArray();
                }
                else if (!lastPressed.SequenceEqual(PressedActions))
                {
                    released = lastPressed.Except(PressedActions).ToArray();
                    pressed  = PressedActions.Except(lastPressed).ToArray();
                }

                inputState.LastReplayState = this;

                handler.HandleInputStateChange(new ReplayStateChangeEvent <T>(state, this, released, pressed));
            }
 public void Apply(InputState state, IInputStateChangeHandler handler)
 {
     var mouse = state.Mouse;
     if (Delta != Vector2.Zero)
     {
         var lastScroll = mouse.Scroll;
         mouse.Scroll += Delta;
         handler.HandleInputStateChange(new MouseScrollChangeEvent(state, this, lastScroll, IsPrecise));
     }
 }
Exemple #3
0
        public void Apply(InputState state, IInputStateChangeHandler handler)
        {
            var mouse = state.Mouse;

            if (mouse.IsPositionValid && Delta != Vector2.Zero)
            {
                var lastPosition = mouse.Position;
                mouse.Position += Delta;
                handler.HandleInputStateChange(new MousePositionChangeEvent(state, this, lastPosition));
            }
        }
        public void Apply(InputState state, IInputStateChangeHandler handler)
        {
            var mouse = state.Mouse;

            if (!mouse.IsPositionValid || mouse.Position != Position)
            {
                var lastPosition = mouse.IsPositionValid ? mouse.Position : Position;
                mouse.IsPositionValid = true;
                mouse.Position        = Position;
                handler.HandleInputStateChange(new MousePositionChangeEvent(state, this, lastPosition));
            }
        }
Exemple #5
0
        public void Apply(InputState state, IInputStateChangeHandler handler)
        {
            var buttonStates = GetButtonStates(state);

            foreach (var entry in Entries)
            {
                if (buttonStates.SetPressed(entry.Button, entry.IsPressed))
                {
                    var buttonStateChange = CreateEvent(state, entry.Button, entry.IsPressed ? ButtonStateChangeKind.Pressed : ButtonStateChangeKind.Released);
                    handler.HandleInputStateChange(buttonStateChange);
                }
            }
        }
            public void Apply(InputState state, IInputStateChangeHandler handler)
            {
                if (!(state is RulesetInputManagerInputState <T> inputState))
                {
                    throw new InvalidOperationException($"{nameof(ReplayState<T>)} should only be applied to a {nameof(RulesetInputManagerInputState<T>)}");
                }

                var lastPressed = inputState.LastReplayState?.PressedActions ?? new List <T>();
                var released    = lastPressed.Except(PressedActions).ToArray();
                var pressed     = PressedActions.Except(lastPressed).ToArray();

                inputState.LastReplayState = this;

                handler.HandleInputStateChange(new ReplayStateChangeEvent <T>(state, this, released, pressed));
            }
        public void Apply(InputState state, IInputStateChangeHandler handler)
        {
            foreach (var a in Axes)
            {
                // Not enough movement, don't fire event
                if (Precision.AlmostEquals(state.Joystick.AxesValues[(int)a.Source], a.Value))
                {
                    continue;
                }

                var lastValue = state.Joystick.AxesValues[(int)a.Source];
                state.Joystick.AxesValues[(int)a.Source] = a.Value;
                handler.HandleInputStateChange(new JoystickAxisChangeEvent(state, this, a, lastValue));
            }
        }
Exemple #8
0
        public void Apply(InputState state, IInputStateChangeHandler handler)
        {
            foreach (var a in Axes)
            {
                float oldValue = state.Joystick.AxesValues[(int)a.Source];

                // Not enough movement, don't fire event (unless returning to zero).
                if (oldValue == a.Value || (a.Value != 0 && Precision.AlmostEquals(oldValue, a.Value)))
                {
                    continue;
                }

                state.Joystick.AxesValues[(int)a.Source] = a.Value;
                handler.HandleInputStateChange(new JoystickAxisChangeEvent(state, this, a, oldValue));
            }
        }
Exemple #9
0
        public void Apply(InputState state, IInputStateChangeHandler handler)
        {
            var mouse = state.Mouse;

            if (Delta != Vector2.Zero)
            {
                if (!IsPrecise && Delta.X == 0 && state.Keyboard.ShiftPressed)
                {
                    Delta = new Vector2(Delta.Y, 0);
                }

                var lastScroll = mouse.Scroll;
                mouse.Scroll    += Delta;
                mouse.LastSource = this;
                handler.HandleInputStateChange(new MouseScrollChangeEvent(state, this, lastScroll, IsPrecise));
            }
        }
Exemple #10
0
        public void Apply(InputState state, IInputStateChangeHandler handler)
        {
            var touches = state.Touch;

            var lastPosition = touches.GetTouchPosition(Touch.Source);

            touches.TouchPositions[(int)Touch.Source] = Touch.Position;

            bool activityChanged = touches.ActiveSources.SetPressed(Touch.Source, Activate);
            var  positionChanged = lastPosition != null && Touch.Position != lastPosition;

            if (activityChanged || positionChanged)
            {
                handler.HandleInputStateChange(new TouchStateChangeEvent(state, this, Touch,
                                                                         !activityChanged ? (bool?)null : Activate,
                                                                         !positionChanged ? null : lastPosition
                                                                         ));
            }
        }
Exemple #11
0
        public void Apply(InputState state, IInputStateChangeHandler handler)
        {
            if (!(state is IMicrophoneInputState microphoneInputState))
            {
                throw new NotMicrophoneInputStateException();
            }

            var microphone = microphoneInputState.Microphone;

            if (microphone.Voice == Voice)
            {
                return;
            }

            var lastVoice = microphone.Voice;

            microphone.Voice = Voice;
            handler.HandleInputStateChange(new MicrophoneVoiceChangeEvent(state, this, lastVoice));
        }
Exemple #12
0
 public void Apply(InputState state, IInputStateChangeHandler handler)
 {
     handler.HandleInputStateChange(new ReplayStatisticsFrameEvent(state, this, Frame));
 }