Пример #1
0
        //* ────________________________________*
        //* methods ───────────────────────────────-*

        //* -----------------------------------------------------------------------*
        /// <summary>1フレーム分の更新処理を実行します。</summary>
        ///
        /// <param name="entity">この状態を適用されているオブジェクト。</param>
        /// <param name="privateMembers">
        /// オブジェクトと状態クラスのみがアクセス可能なフィールド。
        /// </param>
        /// <param name="gameTime">前フレームが開始してからの経過時間。</param>
        public override void update(
            CInputXBOX360 entity, CInputXBOX360.CPrivateMembers privateMembers, GameTime gameTime)
        {
            GamePadState state = GamePad.GetState(entity.playerIndex);

            if (state.IsConnected)
            {
                for (int i = entity.assignList.Count; --i >= 0;)
                {
                    Buttons     button     = entity.assignList[i];
                    SInputState inputState = privateMembers.buttonStateList[i];
                    if (button.isAvailableAnalogInput())
                    {
                        inputState.refresh(state.getInputState(button));
                    }
                    else
                    {
                        inputState.refresh(state.IsButtonDown(button));
                    }
                    privateMembers.buttonStateList[i] = inputState;
                }
                refleshAxis(state, entity, privateMembers, gameTime);
            }
            else
            {
                entity.Dispose();
            }
            base.update(entity, privateMembers, gameTime);
        }
Пример #2
0
        //* -----------------------------------------------------------------------*
        /// <summary>1フレーム分の更新処理を実行します。</summary>
        ///
        /// <param name="entity">この状態を適用されているオブジェクト。</param>
        /// <param name="privateMembers">
        /// オブジェクトと状態クラスのみがアクセス可能なフィールド。
        /// </param>
        /// <param name="gameTime">前フレームが開始してからの経過時間。</param>
        public override void update(
            CInputLegacy entity, CInputLegacy.CPrivateMembers privateMembers, GameTime gameTime)
        {
            JoystickState state = privateMembers.poll();

            byte[] buttons      = state.GetButtons();
            int    totalButtons = buttons.Length;

            for (int i = entity.assignList.Count; --i >= 0;)
            {
                short       sButtonID  = entity.assignList[i];
                SInputState inputState = privateMembers.buttonStateList[i];
                if (sButtonID < 0)
                {
                    inputState.refresh(state.getInputState(sButtonID, INPUTRANGE));
                }
                else if (sButtonID < totalButtons)
                {
                    inputState.refresh(buttons[sButtonID] != 0);
                }
                privateMembers.buttonStateList[i] = inputState;
            }
            refleshAxis(state, entity, privateMembers, gameTime);
            base.update(entity, privateMembers, gameTime);
        }
Пример #3
0
        //* ────________________________________*
        //* methods ───────────────────────────────-*

        //* -----------------------------------------------------------------------*
        /// <summary>1フレーム分の更新処理を実行します。</summary>
        ///
        /// <param name="entity">この状態を適用されているオブジェクト。</param>
        /// <param name="privateMembers">
        /// オブジェクトと状態クラスのみがアクセス可能なフィールド。
        /// </param>
        /// <param name="gameTime">前フレームが開始してからの経過時間。</param>
        public override void update(
            CInputKeyboard entity, CInputKeyboard.CPrivateMembers privateMembers,
            GameTime gameTime
            )
        {
            KeyboardState state      = Keyboard.GetState();
            IList <Keys>  assignList = entity.assignList;

            for (int i = assignList.Count; --i >= 0;)
            {
                SInputState inputState = privateMembers.buttonStateList[i];
                inputState.refresh(state.IsKeyDown(assignList[i]));
                privateMembers.buttonStateList[i] = inputState;
            }
            for (int i = entity.dirInputState.Length; --i >= 0;)
            {
                entity.dirInputState[i].refresh(state.IsKeyDown(entity.directionAssignList[i]));
            }
            EDirectionFlags axisFlags;
            Vector2         axisVector;

            CHelper.createVector(entity.dirInputState, out axisVector, out axisFlags);
            privateMembers.axisVector = axisVector;
            privateMembers.axisFlag   = axisFlags;
            base.update(entity, privateMembers, gameTime);
        }
Пример #4
0
        //* -----------------------------------------------------------------------*
        /// <summary>1フレーム分の更新処理を実行します。</summary>
        ///
        /// <param name="entity">この状態を適用されているオブジェクト。</param>
        /// <param name="privateMembers">
        /// オブジェクトと状態クラスのみがアクセス可能なフィールド。
        /// </param>
        /// <param name="gameTime">前フレームが開始してからの経過時間。</param>
        public override void update(CInputCollection entity,
                                    CInputCollection.CPrivateMembers privateMembers, GameTime gameTime)
        {
            int nLength = privateMembers.buttonStateList.Count;

            // HACK : GC対策をする
            bool[]    buttonFlagBuffer = new bool[nLength];
            SDirArray dirFlagBuffer    = new SDirArray();

            privateMembers.axisFlag   = EDirectionFlags.None;
            privateMembers.axisVector = Vector2.Zero;
            foreach (CInput input in privateMembers.childs)
            {
                // 毎回isConnectするのは大変な気がするが……。
                if (!entity.releaseAwayController || input.connect)
                {
                    input.update(gameTime);
                    for (int i = nLength; --i >= 0;)
                    {
                        buttonFlagBuffer[i] =
                            buttonFlagBuffer[i] || input.buttonStateList[i].press;
                    }
                    for (int i = 4; --i >= 0;)
                    {
                        dirFlagBuffer[i] =
                            MathHelper.Max(dirFlagBuffer[i], input.dirInputState[i].analogValue);
                    }
                    Vector2 axis       = entity.axisVector;
                    float   axisLength = axis.Length();
                    axis += input.axisVector;
                    if (axis != Vector2.Zero)
                    {
                        axis.Normalize();
                    }
                    axis *= MathHelper.Max(axisLength, input.axisVector.Length());
                    privateMembers.axisVector = axis;
                    privateMembers.axisFlag  |= input.axisFlag;
                }
                else
                {
                    input.Dispose();
                }
            }
            for (int i = nLength; --i >= 0;)
            {
                SInputState inputState = privateMembers.buttonStateList[i];
                inputState.refresh(buttonFlagBuffer[i]);
                privateMembers.buttonStateList[i] = inputState;
            }
            for (int i = 4; --i >= 0;)
            {
                entity.dirInputState[i].refresh(dirFlagBuffer[i]);
            }
            base.update(entity, privateMembers, gameTime);
        }