private void AddState(InputStateBase inputState) { _inputStates.Add(inputState); // Register first MouseOrPointer state as default if (this.DefaultMouseOrPointer == MouseOrPointerState.Dummy) { if (inputState is MouseOrPointerState mouseOrPointer) { this.DefaultMouseOrPointer = mouseOrPointer; } } // Register first Gamepad state as default if (this.DefaultGamepad == GamepadState.Dummy) { if (inputState is GamepadState gamepadState) { this.DefaultGamepad = gamepadState; } } // Register first keyboard state as default if (this.DefaultKeyboard == KeyboardState.Dummy) { if (inputState is KeyboardState keyboardState) { this.DefaultKeyboard = keyboardState; } } }
internal void AddCopyOfState(InputStateBase inputState, ViewInformation?viewInfo) { // Get the state object to where to copy the given InputState InputStateBase?targetState = null; for (var loop = 0; loop < _recoveredStates.Count; loop++) { if (_recoveredStates[loop].CurrentType == inputState.CurrentType) { targetState = _recoveredStates[loop]; _recoveredStates.RemoveAt(loop); break; } } if (targetState == null) { targetState = (InputStateBase)Activator.CreateInstance(inputState.CurrentType) !; } // Copy all state data inputState.CopyAndResetForUpdatePass(targetState); targetState.RelatedView = viewInfo; this.AddState(targetState); }
protected override void CopyAndResetForUpdatePassInternal(InputStateBase targetState) { var targetStateCasted = (KeyboardState)targetState; targetStateCasted._keysHit.Clear(); targetStateCasted._keysHit.AddRange(_keysHit); targetStateCasted._keysDown.Clear(); targetStateCasted._keysDown.AddRange(_keysDown); targetStateCasted._focused = _focused; // Update local collections (move hit keys to down keys) _keysDown.AddRange(_keysHit); _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) { var targetStateCasted = (MouseOrPointerState)targetState; targetStateCasted._moveDistancePixel = _moveDistancePixel; targetStateCasted._screenSizePixel = _screenSizePixel; targetStateCasted._positionPixel = _positionPixel; targetStateCasted._wheelDelta = _wheelDelta; targetStateCasted._isInside = _isInside; targetStateCasted.Type = this.Type; for (var loop = 0; loop < s_buttonCount; loop++) { targetStateCasted._buttonsDown[loop] = _buttonsDown[loop]; targetStateCasted._buttonsHit[loop] = _buttonsHit[loop]; targetStateCasted._buttonsUp[loop] = _buttonsUp[loop]; } // Reset current object _moveDistancePixel = Vector2.Zero; _wheelDelta = 0; for (var loop = 0; loop < s_buttonCount; loop++) { _buttonsUp[loop] = false; if (_buttonsHit[loop] || _buttonsDown[loop]) { _buttonsHit[loop] = false; _buttonsDown[loop] = true; } else { _buttonsHit[loop] = false; _buttonsDown[loop] = false; } } }
/// <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) { this.CopyAndResetForUpdatePassInternal(targetState); }
/// <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);