void PointLightRenderer::UpdateSpecularLight(const DX::StepTimer& gameTime) { static float specularIntensity = 1.0f; GamePad::State gamePadState = mGamePad->CurrentState(); if (gamePadState.IsConnected()) { if (gamePadState.IsLeftTriggerPressed() && specularIntensity <= 1.0f) { specularIntensity += static_cast<float>(gameTime.GetElapsedSeconds()); specularIntensity = min(specularIntensity, 1.0f); mPixelCBufferPerObjectData.SpecularColor = XMFLOAT3(specularIntensity, specularIntensity, specularIntensity); } if (gamePadState.IsRightTriggerPressed() && specularIntensity >= 0.0f) { specularIntensity -= (float)gameTime.GetElapsedSeconds(); specularIntensity = max(specularIntensity, 0.0f); mPixelCBufferPerObjectData.SpecularColor = XMFLOAT3(specularIntensity, specularIntensity, specularIntensity); } static float specularPower = mPixelCBufferPerObjectData.SpecularPower; if (mGamePad->IsButtonDown(GamePadButton::DPadUp) && specularPower < UCHAR_MAX) { specularPower += LightModulationRate * static_cast<float>(gameTime.GetElapsedSeconds()); specularPower = min(specularPower, static_cast<float>(UCHAR_MAX)); mPixelCBufferPerObjectData.SpecularPower = specularPower; } if (mGamePad->IsButtonDown(GamePadButton::DPadDown) && specularPower > 1.0f) { specularPower -= LightModulationRate * static_cast<float>(gameTime.GetElapsedSeconds()); specularPower = max(specularPower, 1.0f); mPixelCBufferPerObjectData.SpecularPower = specularPower; } } }
void GamePad::ButtonStateTracker::Update( const GamePad::State& state ) { UPDATE_BUTTON_STATE(a); assert( ( !state.buttons.a && !lastState.buttons.a ) == ( a == UP ) ); assert( ( state.buttons.a && lastState.buttons.a ) == ( a == HELD ) ); assert( ( !state.buttons.a && lastState.buttons.a ) == ( a == RELEASED ) ); assert( ( state.buttons.a && !lastState.buttons.a ) == ( a == PRESSED ) ); UPDATE_BUTTON_STATE(b); UPDATE_BUTTON_STATE(x); UPDATE_BUTTON_STATE(y); UPDATE_BUTTON_STATE(leftStick); UPDATE_BUTTON_STATE(rightStick); UPDATE_BUTTON_STATE(leftShoulder); UPDATE_BUTTON_STATE(rightShoulder); UPDATE_BUTTON_STATE(back); UPDATE_BUTTON_STATE(start); dpadUp = static_cast<ButtonState>( ( !!state.dpad.up ) | ( ( !!state.dpad.up ^ !!lastState.dpad.up ) << 1 ) ); dpadDown = static_cast<ButtonState>( ( !!state.dpad.down ) | ( ( !!state.dpad.down ^ !!lastState.dpad.down ) << 1 ) ); dpadLeft = static_cast<ButtonState>( ( !!state.dpad.left ) | ( ( !!state.dpad.left ^ !!lastState.dpad.left ) << 1 ) ); dpadRight = static_cast<ButtonState>( ( !!state.dpad.right ) | ( ( !!state.dpad.right ^ !!lastState.dpad.right ) << 1 ) ); assert( ( !state.dpad.up && !lastState.dpad.up ) == ( dpadUp == UP ) ); assert( ( state.dpad.up && lastState.dpad.up ) == ( dpadUp == HELD ) ); assert( ( !state.dpad.up && lastState.dpad.up ) == ( dpadUp == RELEASED ) ); assert( ( state.dpad.up && !lastState.dpad.up ) == ( dpadUp == PRESSED ) ); // Handle 'threshold' tests which emulate buttons bool threshold = state.IsLeftThumbStickUp(); leftStickUp = static_cast<ButtonState>( ( !!threshold) | ( ( !!threshold ^ !!lastState.IsLeftThumbStickUp() ) << 1 ) ); threshold = state.IsLeftThumbStickDown(); leftStickDown = static_cast<ButtonState>((!!threshold) | ((!!threshold ^ !!lastState.IsLeftThumbStickDown()) << 1)); threshold = state.IsLeftThumbStickLeft(); leftStickLeft = static_cast<ButtonState>((!!threshold) | ((!!threshold ^ !!lastState.IsLeftThumbStickLeft()) << 1)); threshold = state.IsLeftThumbStickRight(); leftStickRight = static_cast<ButtonState>((!!threshold) | ((!!threshold ^ !!lastState.IsLeftThumbStickRight()) << 1)); threshold = state.IsRightThumbStickUp(); rightStickUp = static_cast<ButtonState>((!!threshold) | ((!!threshold ^ !!lastState.IsRightThumbStickUp()) << 1)); threshold = state.IsRightThumbStickDown(); rightStickDown = static_cast<ButtonState>((!!threshold) | ((!!threshold ^ !!lastState.IsRightThumbStickDown()) << 1)); threshold = state.IsRightThumbStickLeft(); rightStickLeft = static_cast<ButtonState>((!!threshold) | ((!!threshold ^ !!lastState.IsRightThumbStickLeft()) << 1)); threshold = state.IsRightThumbStickRight(); rightStickRight = static_cast<ButtonState>((!!threshold) | ((!!threshold ^ !!lastState.IsRightThumbStickRight()) << 1)); threshold = state.IsLeftTriggerPressed(); leftTrigger = static_cast<ButtonState>((!!threshold) | ((!!threshold ^ !!lastState.IsLeftTriggerPressed()) << 1)); threshold = state.IsRightTriggerPressed(); rightTrigger = static_cast<ButtonState>((!!threshold) | ((!!threshold ^ !!lastState.IsRightTriggerPressed()) << 1)); lastState = state; }