internal void AddCopyOfState(InputStateBase inputState, ViewInformation viewInfo) { // Get the state object to where to copy the given InputState InputStateBase targetState = null; for (int loop = 0; loop < m_recoveredStates.Count; loop++) { if (m_recoveredStates[loop].CurrentType == inputState.CurrentType) { targetState = m_recoveredStates[loop]; m_recoveredStates.RemoveAt(loop); break; } } if (targetState == null) { targetState = Activator.CreateInstance(inputState.CurrentType) as InputStateBase; } // Copy all state data inputState.CopyAndResetForUpdatePass(targetState); targetState.RelatedView = viewInfo; this.AddState(targetState); }
private void AddState(InputStateBase inputState) { m_inputStates.Add(inputState); // Register first MouseOrPointer state as default if (this.DefaultMouseOrPointer == MouseOrPointerState.Dummy) { MouseOrPointerState mouseOrPointer = inputState as MouseOrPointerState; if (mouseOrPointer != null) { this.DefaultMouseOrPointer = mouseOrPointer; } } // Register first Gamepad state as default if (this.DefaultGamepad == GamepadState.Dummy) { GamepadState gamepadState = inputState as GamepadState; if (gamepadState != null) { this.DefaultGamepad = gamepadState; } } // Register first keyboard state as default if (this.DefaultKeyboard == KeyboardState.Dummy) { KeyboardState keyboardState = inputState as KeyboardState; if (keyboardState != null) { this.DefaultKeyboard = keyboardState; } } }
/// <summary> /// Copies this object and then resets it /// in preparation of the next update pass. /// Called by update-render loop. /// </summary> protected override void CopyAndResetForUpdatePassInternal(InputStateBase targetState) { GamepadState targetStateCasted = targetState as GamepadState; targetStateCasted.EnsureNotNull(nameof(targetStateCasted)); targetStateCasted.m_controllerIndex = this.m_controllerIndex; targetStateCasted.m_isConnected = this.m_isConnected; targetStateCasted.m_prevState = this.m_prevState; targetStateCasted.m_currentState = this.m_currentState; }
protected override void CopyAndResetForUpdatePassInternal(InputStateBase targetState) { KeyboardState targetStateCasted = targetState as KeyboardState; targetStateCasted.EnsureNotNull(nameof(targetStateCasted)); targetStateCasted.m_keysHit.Clear(); targetStateCasted.m_keysHit.AddRange(this.m_keysHit); targetStateCasted.m_keysDown.Clear(); targetStateCasted.m_keysDown.AddRange(this.m_keysDown); targetStateCasted.m_focused = this.m_focused; // Update local collections (move hit keys to down keys) this.m_keysDown.AddRange(this.m_keysHit); this.m_keysHit.Clear(); }
/// <summary> /// Copies this object and then resets it /// in preparation of the next update pass. /// Called by update-render loop. /// </summary> protected override void CopyAndResetForUpdatePassInternal(InputStateBase targetState) { MouseOrPointerState targetStateCasted = targetState as MouseOrPointerState; targetStateCasted.EnsureNotNull(nameof(targetStateCasted)); targetStateCasted.m_moveDistancePixel = m_moveDistancePixel; targetStateCasted.m_screenSizePixel = m_screenSizePixel; targetStateCasted.m_positionPixel = m_positionPixel; targetStateCasted.m_wheelDelta = m_wheelDelta; targetStateCasted.m_isInside = m_isInside; targetStateCasted.m_mouseOrPointerType = m_mouseOrPointerType; for (int loop = 0; loop < BUTTON_COUNT; loop++) { targetStateCasted.m_buttonsDown[loop] = m_buttonsDown[loop]; targetStateCasted.m_buttonsHit[loop] = m_buttonsHit[loop]; targetStateCasted.m_buttonsUp[loop] = m_buttonsUp[loop]; } // Reset current object m_moveDistancePixel = Vector2.Zero; m_wheelDelta = 0; for (int loop = 0; loop < BUTTON_COUNT; loop++) { m_buttonsUp[loop] = false; if (m_buttonsHit[loop] || m_buttonsDown[loop]) { m_buttonsHit[loop] = false; m_buttonsDown[loop] = true; } else { m_buttonsHit[loop] = false; m_buttonsDown[loop] = false; } } }
/// <summary> /// Copies this object and then resets it /// in preparation of the next update pass. /// Called by update-render loop. /// </summary> protected abstract void CopyAndResetForUpdatePassInternal(InputStateBase targetState);
/// <summary> /// Copies this object and then resets it /// in preparation of the next update pass. /// Called by update-render loop. /// </summary> internal void CopyAndResetForUpdatePass(InputStateBase targetState) { CopyAndResetForUpdatePassInternal(targetState); }