void VoxGame::UpdateGamePadControls(float dt) { JoystickCameraZoom(dt); m_bJoystickJump = m_pVoxWindow->GetJoystickButton(0, 0); if (m_bAttackPressed_Joystick) { m_bCanDoAttack_Joystick = m_pVoxWindow->GetJoystickAxisValue(0, 2) >= -0.75f; m_bAttackReleased_Joystick = m_pVoxWindow->GetJoystickAxisValue(0, 2) >= -0.75f; } m_bAttackPressed_Joystick = m_pVoxWindow->GetJoystickAxisValue(0, 2) <= -0.75f; m_bTargetEnemyPressed_Joystick = false; // TODO : Need to get newer version of glfw to support different triggers for LT, RT m_bTargetEnemyReleased_Joystick = false; // TODO : Need to get newer version of glfw to support different triggers for LT, RT GameMode gameMode = GetGameMode(); if (gameMode == GameMode_Debug || m_cameraMode == CameraMode_Debug) { JoystickCameraMove(dt); JoystickCameraRotate(dt); } else if (gameMode == GameMode_Game) { if (m_pPlayer->IsDead() == false) { if (m_bPaused == false) // If we are paused, don't allow gameplay control movements { if (IsGUIWindowStillDisplayed() == true) { // Reset movement speed since we have a GUI window open m_movementSpeed = 0.0f; } else { if (m_cameraMode == CameraMode_MouseRotate) { JoystickCameraRotate(dt); } else if (m_cameraMode == CameraMode_AutoCamera) { /* Do nothing, camera rotation is not controlled by player. */ } else if (m_cameraMode == CameraMode_FirstPerson) { JoystickCameraRotate(dt); } // Jumping if (m_bJoystickJump) { m_pPlayer->Jump(); } // Enemy targetting if (m_cameraMode != CameraMode_FirstPerson) { if (m_bTargetEnemyPressed_Joystick) { if(m_pPlayer->GetTargetEnemy() == NULL) { SetEnemyTarget(); } } if (m_bTargetEnemyReleased_Joystick) { if (m_pPlayer->GetTargetEnemy() != NULL) { ReleaseEnemyTarget(); } } } // Attacking if (m_bAttackPressed_Joystick && m_bCanDoAttack_Joystick) { // Check interactions bool interaction = CheckInteractions(); if (interaction == false) { m_pPlayer->PressAttack(); } m_bCanDoAttack_Joystick = false; } if (m_bAttackReleased_Joystick) { m_pPlayer->ReleaseAttack(); m_bAttackReleased_Joystick = false; } // Player movements float axisX = m_pVoxWindow->GetJoystickAxisValue(0, 0); float axisY = m_pVoxWindow->GetJoystickAxisValue(0, 1); // Dead zones if (fabs(axisX) < m_pVoxWindow->GetJoystickAnalogDeadZone()) { axisX = 0.0f; } if (fabs(axisY) < m_pVoxWindow->GetJoystickAnalogDeadZone()) { axisY = 0.0f; } if (fabs(axisX) <= 0.0f && fabs(axisY) <= 0.0f) { // Reduce the movement speed (drag) m_movementSpeed -= m_maxMovementSpeed / (m_movementDragTime / dt); if (m_movementSpeed <= 0.0f) { m_movementSpeed = 0.0f; m_gamepadMovement = false; m_pPlayer->StopMoving(); } } else { m_gamepadMovement = true; // Increase the movement speed since we are pressing a movement key m_movementSpeed += m_maxMovementSpeed / (m_movementIncreaseTime / dt); // Don't allow faster than max movement if (m_movementSpeed > m_maxMovementSpeed) { m_movementSpeed = m_maxMovementSpeed; } } if (m_pPlayer->GetTargetEnemy() == NULL) { vec3 cameraRight = m_pGameCamera->GetRight(); vec3 playerUp = m_pPlayer->GetUpVector(); vec3 moveDirection = normalize(cross(cameraRight, playerUp)); m_movementDirection += moveDirection * axisY; m_movementDirection += cameraRight * axisX; if (length(m_movementDirection) > 0.001f && m_movementSpeed > m_movementStopThreshold) { bool shouldChangePlayerFacing = (m_cameraMode != CameraMode_FirstPerson); m_movementDirection = normalize(m_movementDirection); vec3 amountMoved = m_pPlayer->MoveAbsolute(m_movementDirection, m_movementSpeed * dt, shouldChangePlayerFacing); m_pGameCamera->SetFakePosition(m_pGameCamera->GetFakePosition() + amountMoved); } } else { m_targetCameraXAxisAmount_Target -= (axisX * dt); if (m_targetCameraXAxisAmount_Target > 1.0f) { m_targetCameraXAxisAmount_Target = 1.0f; } if (m_targetCameraXAxisAmount_Target < -1.0f) { m_targetCameraXAxisAmount_Target = -1.0f; } m_pPlayer->Move(-axisY * 10.0f * dt); // TODO : Is this a good value for gamepad movement speed? m_pPlayer->Strafe(-axisX * 10.0f * dt); // TODO : Is this a good value for gamepad movement speed? } } } } } }
void VoxGame::UpdateGamePadControls(float dt) { JoystickCameraZoom(dt); m_bJoystickJump = m_pVoxWindow->GetJoystickButton(0, 0); if (m_bAttackPressed_Joystick) { m_bCanDoAttack_Joystick = m_pVoxWindow->GetJoystickAxisValue(0, 2) >= -0.75f; m_bAttackReleased_Joystick = m_pVoxWindow->GetJoystickAxisValue(0, 2) >= -0.75f; } m_bAttackPressed_Joystick = m_pVoxWindow->GetJoystickAxisValue(0, 2) <= -0.75f; GameMode gameMode = GetGameMode(); if (gameMode == GameMode_Debug || m_cameraMode == CameraMode_Debug) { JoystickCameraMove(dt); JoystickCameraRotate(dt); } else if (gameMode == GameMode_Game) { if (m_cameraMode == CameraMode_MouseRotate) { JoystickCameraRotate(dt); } if (m_cameraMode == CameraMode_AutoCamera) { /* Do nothing, camera rotation is not controlled by player. */ } else if (m_cameraMode == CameraMode_FirstPerson) { JoystickCameraRotate(dt); } // Jumping if (m_bJoystickJump) { m_pPlayer->Jump(); } // Attacking if (m_bAttackPressed_Joystick && m_bCanDoAttack_Joystick) { m_pPlayer->PressAttack(); m_bCanDoAttack_Joystick = false; } if (m_bAttackReleased_Joystick) { m_pPlayer->ReleaseAttack(); m_bAttackReleased_Joystick = false; } // Player movements float axisX = m_pVoxWindow->GetJoystickAxisValue(0, 0); float axisY = m_pVoxWindow->GetJoystickAxisValue(0, 1); // Dead zones if (fabs(axisX) < m_pVoxWindow->GetJoystickAnalogDeadZone()) { axisX = 0.0f; } if (fabs(axisY) < m_pVoxWindow->GetJoystickAnalogDeadZone()) { axisY = 0.0f; } if (fabs(axisX) <= 0.0f && fabs(axisY) <= 0.0f) { // Reduce the movement speed (drag) m_movementSpeed -= m_maxMovementSpeed / (m_movementDragTime / dt); if (m_movementSpeed <= 0.0f) { m_movementSpeed = 0.0f; m_gamepadMovement = false; m_pPlayer->StopMoving(); } } else { m_gamepadMovement = true; // Increase the movement speed since we are pressing a movement key m_movementSpeed += m_maxMovementSpeed / (m_movementIncreaseTime / dt); // Don't allow faster than max movement if (m_movementSpeed > m_maxMovementSpeed) { m_movementSpeed = m_maxMovementSpeed; } } vec3 cameraRight = m_pGameCamera->GetRight(); vec3 playerUp = m_pPlayer->GetUpVector(); vec3 moveDirection = normalize(cross(cameraRight, playerUp)); m_movementDirection += moveDirection * axisY; m_movementDirection += cameraRight * axisX; if (length(m_movementDirection) > 0.001f && m_movementSpeed > m_movementStopThreshold) { bool shouldChangePlayerFacing = (m_cameraMode != CameraMode_FirstPerson); m_movementDirection = normalize(m_movementDirection); vec3 amountMoved = m_pPlayer->MoveAbsolute(m_movementDirection, m_movementSpeed * dt, shouldChangePlayerFacing); m_pGameCamera->SetFakePosition(m_pGameCamera->GetFakePosition() + amountMoved); } } }