//* ────________________________________*
        //* methods ───────────────────────────────-*

        //* -----------------------------------------------------------------------*
        /// <summary>ボタン入力を検出します。</summary>
        /// <remarks>
        /// 注意: このメソッドを呼び出すと、自動的に登録されているクラスに対して
        /// <c>update()</c>が実行されます。レガシ ゲームパッドが高位入力管理クラスにて
        /// アクティブの状態でこのメソッドを呼び出すと、高位入力側の判定が
        /// 1フレーム分欠落します。
        /// </remarks>
        ///
        /// <param name="gameTime">前フレームが開始してからの経過時間。</param>
        /// <returns>
        /// 検出されたキー一覧。検出しなかった場合、<c>null</c>。
        /// </returns>
        public IEnumerable <Keys> detectInput(GameTime gameTime)
        {
            input.update(gameTime);
            Keys[] now  = input.nowInputState.GetPressedKeys();
            Keys[] prev = input.prevInputState.GetPressedKeys();
            return(now.Length > prev.Length ? now.Except(prev) : null);
        }
Пример #2
0
        //* -----------------------------------------------------------------------*
        /// <summary>ボタン入力を検出します。</summary>
        /// <remarks>
        /// 注意: このメソッドを呼び出すと、自動的に登録されているクラスに対して
        /// <c>update()</c>が実行されます。レガシ ゲームパッドが高位入力管理クラスにて
        /// アクティブの状態でこのメソッドを呼び出すと、高位入力側の判定が
        /// 1フレーム分欠落します。
        /// </remarks>
        ///
        /// <param name="gameTime">前フレームが開始してからの経過時間。</param>
        /// <returns>
        /// ボタン入力が検出されたデバイスの管理クラス。検出しなかった場合、<c>null</c>。
        /// </returns>
        public CXNAInput <_T> detectInput(GameTime gameTime)
        {
            CXNAInput <_T> result = null;

            for (int i = inputList.Count; --i >= 0 && result == null;)
            {
                CXNAInput <_T> input = inputList[i];
                input.update(gameTime);
                if (isInput(input.nowInputState, input.prevInputState))
                {
                    result = input;
                }
            }
            return(result);
        }
        //* ────________________________________*
        //* methods ───────────────────────────────-*

        //* -----------------------------------------------------------------------*
        /// <summary>ボタン入力を検出します。</summary>
        /// <remarks>
        /// 注意: このメソッドを呼び出すと、自動的に登録されているクラスに対して
        /// <c>update()</c>が実行されます。レガシ ゲームパッドが高位入力管理クラスにて
        /// アクティブの状態でこのメソッドを呼び出すと、高位入力側の判定が
        /// 1フレーム分欠落します。
        /// </remarks>
        ///
        /// <param name="gameTime">前フレームが開始してからの経過時間。</param>
        /// <returns>検出されたボタン。</returns>
        public EMouseButtons detectInput(GameTime gameTime)
        {
            EMouseButtons result = EMouseButtons.None;

            input.update(gameTime);
            MouseState now  = input.nowInputState;
            MouseState prev = input.prevInputState;

            if (now != prev)
            {
                // TODO : 醜い。整理すべし
                if (Math.Abs(now.X - prev.X) > 0 || Math.Abs(now.Y - prev.Y) > 0)
                {
                    result = EMouseButtons.position;
                }
                if (Math.Abs(now.ScrollWheelValue - prev.ScrollWheelValue) > 0)
                {
                    result = EMouseButtons.scrollWheel;
                }
                if (now.LeftButton == ButtonState.Pressed && now.LeftButton != prev.LeftButton)
                {
                    result = EMouseButtons.leftButton;
                }
                if (now.MiddleButton == ButtonState.Pressed && now.MiddleButton != prev.MiddleButton)
                {
                    result = EMouseButtons.middleButton;
                }
                if (now.RightButton == ButtonState.Pressed && now.RightButton != prev.RightButton)
                {
                    result = EMouseButtons.rightButton;
                }
                if (now.XButton1 == ButtonState.Pressed && now.XButton1 != prev.XButton1)
                {
                    result = EMouseButtons.xButton1;
                }
                if (now.XButton2 == ButtonState.Pressed && now.XButton2 != prev.XButton2)
                {
                    result = EMouseButtons.xButton2;
                }
            }
            return(result);
        }