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 PointLightRenderer::UpdatePointLight(const DX::StepTimer& gameTime) { static float pointLightIntensity = 1.0f; float elapsedTime = static_cast<float>(gameTime.GetElapsedSeconds()); GamePad::State gamePadState = mGamePad->CurrentState(); if (gamePadState.IsConnected()) { // Update point light intensity if (mGamePad->IsButtonDown(GamePadButton::X) && pointLightIntensity <= 1.0f) { pointLightIntensity += elapsedTime; pointLightIntensity = min(pointLightIntensity, 1.0f); mPixelCBufferPerFrameData.LightColor = XMFLOAT4(pointLightIntensity, pointLightIntensity, pointLightIntensity, 1.0f); mPointLight->SetColor(mPixelCBufferPerFrameData.LightColor); } if (mGamePad->IsButtonDown(GamePadButton::Y) && pointLightIntensity >= 0.0f) { pointLightIntensity -= elapsedTime; pointLightIntensity = max(pointLightIntensity, 0.0f); mPixelCBufferPerFrameData.LightColor = XMFLOAT4(pointLightIntensity, pointLightIntensity, pointLightIntensity, 1.0f); mPointLight->SetColor(mPixelCBufferPerFrameData.LightColor); } // Move point light XMFLOAT3 movementAmount = Vector3Helper::Zero; if (!bIsCameraControlled) { if (gamePadState.IsLeftThumbStickLeft()) { movementAmount.x = -1.0f; } if (gamePadState.IsLeftThumbStickRight()) { movementAmount.x = 1.0f; } if (gamePadState.IsLeftThumbStickUp()) { movementAmount.y = 1.0f; } if (gamePadState.IsLeftThumbStickDown()) { movementAmount.y = -1.0f; } if (gamePadState.IsRightThumbStickLeft()) { movementAmount.z = -1.0f; } if (gamePadState.IsRightThumbStickRight()) { movementAmount.z = 1.0f; } } XMVECTOR movement = XMLoadFloat3(&movementAmount) * LightMovementRate * elapsedTime; mPointLight->SetPosition(mPointLight->PositionVector() + movement); mProxyModel->SetPosition(mPointLight->Position()); mVertexCBufferPerFrameData.LightPosition = mPointLight->Position(); mPixelCBufferPerFrameData.LightPosition = mPointLight->Position(); } }
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; }