void VoxGame::SetGameMode(GameMode mode) { GameMode previousgameMode = m_gameMode; m_gameMode = mode; if (m_gameMode == GameMode_Debug) { } if (m_gameMode == GameMode_FrontEnd) { if (previousgameMode == GameMode_Game || previousgameMode == GameMode_Loading) { // Close all open GUI windows CloseAllGUIWindows(); // Clear the items m_pItemManager->ClearItems(); // Setup the gamedata since we have just loaded fresh into the frontend. SetupDataForFrontEnd(); } } if (m_gameMode == GameMode_Game) { if (previousgameMode == GameMode_FrontEnd || previousgameMode == GameMode_Loading) { // Close all open GUI windows CloseAllGUIWindows(); // Clear the items m_pItemManager->ClearItems(); // Reset the player m_pPlayer->ResetPlayer(); // Load default inventory m_pInventoryManager->LoadDefaultInventory("Steve"); // Setup the gamedata since we have just loaded fresh into a game. SetupDataForGame(); } } }
void VoxGame::ShowQuitPopup() { CloseAllGUIWindows(); m_pFrontendManager->SetFrontendScreen(FrontendScreen_QuitPopup); SetPaused(true); SetGlobalBlurAmount(0.0015f); m_pVoxWindow->TurnCursorOn(true); }
void VoxGame::UpdateKeyboardControls(float dt) { GameMode gameMode = GetGameMode(); if (gameMode == GameMode_Debug || m_cameraMode == CameraMode_Debug) { // Keyboard camera movements if (m_bKeyboardForward) { m_pGameCamera->Fly(20.0f * dt, true); } if (m_bKeyboardBackward) { m_pGameCamera->Fly(-20.0f * dt, true); } if (m_bKeyboardStrafeLeft) { m_pGameCamera->Strafe(-20.0f * dt, true); } if (m_bKeyboardStrafeRight) { m_pGameCamera->Strafe(20.0f * dt, true); } if (m_bKeyboardUp) { m_pGameCamera->Levitate(20.0f * dt, true); } if (m_bKeyboardDown) { m_pGameCamera->Levitate(-20.0f * dt, true); } } else if (gameMode == GameMode_Game) { // Pause menu if (m_bKeyboardMenu) { m_bKeyboardMenu = false; if (IsGUIWindowStillDisplayed()) { CloseAllGUIWindows(); if (IsGUIWindowStillDisplayed() == false) { TurnCursorOff(false); } } else { if (m_pFrontendManager->GetFrontendScreen() == FrontendScreen_None) { SetPauseMenu(); } else if (m_pFrontendManager->GetFrontendScreen() == FrontendScreen_PauseMenu) { UnsetPauseMenu(); } else if (m_pFrontendManager->GetFrontendScreen() == FrontendScreen_OptionsMenu) { m_pFrontendManager->SetFrontendScreen(FrontendScreen_PauseMenu); } else if (m_pFrontendManager->GetFrontendScreen() == FrontendScreen_ModMenu) { m_pFrontendManager->SetFrontendScreen(FrontendScreen_PauseMenu); } } // Cancel quit popup menu with escape button if (m_pFrontendManager->GetFrontendScreen() == FrontendScreen_QuitPopup) { VoxGame::GetInstance()->CancelQuitPopup(); } } 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 { // Jumping if (m_bKeyboardSpace) { m_pPlayer->Jump(); } // Attacking if (m_bAttackPressed_Mouse && m_bCanDoAttack_Mouse) { // Check interactions bool interaction = CheckInteractions(); if (interaction == false) { m_pPlayer->PressAttack(); } m_bCanDoAttack_Mouse = false; } if (m_bAttackReleased_Mouse) { m_pPlayer->ReleaseAttack(); m_bAttackReleased_Mouse = false; } // Player movements bool resetMovementVector = false; if (m_bKeyboardForward == false && m_bKeyboardBackward == false && m_bKeyboardStrafeLeft == false && m_bKeyboardStrafeRight == false) { // Reduce the movement speed (drag) m_movementSpeed -= m_maxMovementSpeed / (m_movementDragTime / dt); if (m_movementSpeed <= 0.0f) { m_movementSpeed = 0.0f; m_keyboardMovement = false; m_pPlayer->StopMoving(); } } else { m_keyboardMovement = 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; } } float targetModeMovementRatio = 0.65f; // Forwards, backwards, strafe, left, right directional movement if (m_bKeyboardForward) { if (resetMovementVector == false) { m_movementDirection = vec3(0.0f, 0.0f, 0.0f); resetMovementVector = true; } if (m_pPlayer->GetTargetEnemy() == NULL) { vec3 cameraRight = m_pGameCamera->GetRight(); vec3 playerUp = m_pPlayer->GetUpVector(); vec3 moveDirection = normalize(cross(cameraRight, playerUp)); m_movementDirection -= moveDirection; } else { m_pPlayer->Move(m_movementSpeed * targetModeMovementRatio * dt); } } if (m_bKeyboardBackward) { if (resetMovementVector == false) { m_movementDirection = vec3(0.0f, 0.0f, 0.0f); resetMovementVector = true; } if (m_pPlayer->GetTargetEnemy() == NULL) { vec3 cameraRight = m_pGameCamera->GetRight(); vec3 playerUp = m_pPlayer->GetUpVector(); vec3 moveDirection = normalize(cross(cameraRight, playerUp)); m_movementDirection += moveDirection; } else { m_pPlayer->Move(-m_movementSpeed * targetModeMovementRatio * dt); } } if (m_bKeyboardStrafeLeft) { if (resetMovementVector == false) { m_movementDirection = vec3(0.0f, 0.0f, 0.0f); resetMovementVector = true; } if (m_pPlayer->GetTargetEnemy() == NULL) { vec3 cameraRight = m_pGameCamera->GetRight(); vec3 moveDirection = -cameraRight; m_movementDirection += moveDirection; } else { m_targetCameraXAxisAmount_Target += (0.75f * dt); if (m_targetCameraXAxisAmount_Target > 1.0f) { m_targetCameraXAxisAmount_Target = 1.0f; } m_pPlayer->Strafe(m_movementSpeed * targetModeMovementRatio * dt); } } if (m_bKeyboardStrafeRight) { if (resetMovementVector == false) { m_movementDirection = vec3(0.0f, 0.0f, 0.0f); resetMovementVector = true; } if (m_pPlayer->GetTargetEnemy() == NULL) { vec3 cameraRight = m_pGameCamera->GetRight(); vec3 moveDirection = -cameraRight; m_movementDirection -= moveDirection; } else { m_targetCameraXAxisAmount_Target -= (0.75f * dt); if (m_targetCameraXAxisAmount_Target < -1.0f) { m_targetCameraXAxisAmount_Target = -1.0f; } m_pPlayer->Strafe(-m_movementSpeed * targetModeMovementRatio * dt); } } 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); } } } } } }