コード例 #1
0
ファイル: InputManager.cs プロジェクト: Gitspathe/SE.Input
        private static void UpdateInputs(float deltaTime)
        {
            // Set old states.
            oldScrollValue   = scrollValue;
            oldMouseState    = MouseState;
            oldKeyboardState = KeyboardState;

            // Get current keyboard and mouse states.
            KeyboardState = Keyboard.GetState();
            MouseState    = Mouse.GetState();
            PressedChars.AddRange(oldPressedChars);

            // Check key state capacities and move the key states into arrays.
            OldKeys = oldKeyboardState.GetPressedKeys();
            NewKeys = KeyboardState.GetPressedKeys();
            for (int i = 0; i < NewKeys.Length; i++)
            {
                if (!OldKeys.Contains(NewKeys[i]))
                {
                    PressedKeys.Add(NewKeys[i]);
                }
            }

            // Set mouse properties.
            LeftMouseDown  = MouseState.LeftButton == ButtonState.Pressed;
            RightMouseDown = MouseState.RightButton == ButtonState.Pressed;
            MouseDown      = LeftMouseDown || RightMouseDown;

            LeftMouseClicked  = oldMouseState.LeftButton == ButtonState.Released && LeftMouseDown;
            RightMouseClicked = oldMouseState.RightButton == ButtonState.Released && RightMouseDown;
            MouseClicked      = LeftMouseClicked || RightMouseClicked;

            LeftMouseReleased  = oldMouseState.LeftButton == ButtonState.Pressed && !LeftMouseDown;
            RightMouseReleased = oldMouseState.RightButton == ButtonState.Pressed && !RightMouseDown;
            MouseReleased      = LeftMouseReleased || RightMouseReleased;

            // Set the scroll wheel state.
            scrollValue = MouseState.ScrollWheelValue;
            if (scrollValue > oldScrollValue)
            {
                MouseScrollValue = 1;
            }
            else if (scrollValue < oldScrollValue)
            {
                MouseScrollValue = -1;
            }
            else
            {
                MouseScrollValue = 0;
            }

            for (int i = 0; i < controllers.Length; i++)
            {
                controllers[i].Update(deltaTime);
            }
        }
コード例 #2
0
ファイル: InputManager.cs プロジェクト: Gitspathe/SE.Input
        /// <summary>
        /// Updates the input system. Should be called once per frame.
        /// </summary>
        /// <param name="deltaTime">Time in seconds which has passed since the last frame.</param>
        public static void Update(float deltaTime)
        {
            // TODO: Multiple gamepad support (local multiplayer).
            // Check for capabilities each second. Reduces GC allocations.
            if (curCapabilityTimer >= _CAPABILITY_CHECK_TIMER)
            {
                for (int i = 0; i < GamePadCapabilities.Length; i++)
                {
                    GamePadCapabilities[i] = GamePad.GetCapabilities(i);
                }
                curCapabilityTimer = 0.0f;
            }
            else
            {
                curCapabilityTimer += deltaTime;
            }

            for (int i = 0; i < GamePadCapabilities.Length; i++)
            {
                GamePadStates[i] = GamePadCapabilities[i].IsConnected
                    ? GamePad.GetState(i)
                    : default;
            }

            // Clear pressed keys.
            PressedKeys.Clear();
            PressedChars.Clear();

            // Update inputs.
            if (IsActive)
            {
                UpdateInputs(deltaTime);
            }

            // Clean-up for next frame.
            oldScrollValue = scrollValue;
            oldPressedChars.Clear();
        }