コード例 #1
0
ファイル: VoxGame.cpp プロジェクト: Digmaster/Vox
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();
		}
	}
}
コード例 #2
0
ファイル: VoxGame.cpp プロジェクト: Digmaster/Vox
void VoxGame::ShowQuitPopup()
{
	CloseAllGUIWindows();

	m_pFrontendManager->SetFrontendScreen(FrontendScreen_QuitPopup);

	SetPaused(true);

	SetGlobalBlurAmount(0.0015f);

	m_pVoxWindow->TurnCursorOn(true);
}
コード例 #3
0
ファイル: VoxControls.cpp プロジェクト: AlwaysGeeky/Vox
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);
					}
				}
			}
		}
	}
}