Example #1
0
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?
					}
				}
			}
		}
	}
}
Example #2
0
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);
		}
	}
}