Fix racing spawn positions (#913)

This commit is contained in:
David Markowitz 2022-12-22 05:16:18 -08:00 committed by GitHub
parent dff02773a0
commit 015cbc06ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 32 deletions

View File

@ -98,7 +98,7 @@ void RacingControlComponent::OnPlayerLoaded(Entity* player) {
} }
void RacingControlComponent::LoadPlayerVehicle(Entity* player, void RacingControlComponent::LoadPlayerVehicle(Entity* player,
bool initialLoad) { uint32_t positionNumber, bool initialLoad) {
// Load the player's vehicle. // Load the player's vehicle.
if (player == nullptr) { if (player == nullptr) {
@ -126,33 +126,18 @@ void RacingControlComponent::LoadPlayerVehicle(Entity* player,
auto* path = dZoneManager::Instance()->GetZone()->GetPath( auto* path = dZoneManager::Instance()->GetZone()->GetPath(
GeneralUtils::UTF16ToWTF8(m_PathName)); GeneralUtils::UTF16ToWTF8(m_PathName));
auto startPosition = path->pathWaypoints[0].position + NiPoint3::UNIT_Y * 3; auto spawnPointEntities = EntityManager::Instance()->GetEntitiesByLOT(4843);
auto startPosition = NiPoint3::ZERO;
const auto spacing = 15; auto startRotation = NiQuaternion::IDENTITY;
const std::string placementAsString = std::to_string(positionNumber);
// This sometimes spawns the vehicle out of the map if there are lots of for (auto entity : spawnPointEntities) {
// players loaded. if (!entity) continue;
if (entity->GetVarAsString(u"placement") == placementAsString) {
const auto range = m_LoadedPlayers * spacing; startPosition = entity->GetPosition();
startRotation = entity->GetRotation();
startPosition = break;
startPosition + NiPoint3::UNIT_Z * ((m_LeadingPlayer / 2) + }
m_RacingPlayers.size() * spacing); }
auto startRotation =
NiQuaternion::LookAt(startPosition, startPosition + NiPoint3::UNIT_X);
auto angles = startRotation.GetEulerAngles();
angles.y -= M_PI;
startRotation = NiQuaternion::FromEulerAngles(angles);
Game::logger->Log("RacingControlComponent",
"Start position <%f, %f, %f>, <%f, %f, %f>",
startPosition.x, startPosition.y, startPosition.z,
angles.x * (180.0f / M_PI), angles.y * (180.0f / M_PI),
angles.z * (180.0f / M_PI));
// Make sure the player is at the correct position. // Make sure the player is at the correct position.
@ -567,12 +552,12 @@ void RacingControlComponent::Update(float deltaTime) {
Game::logger->Log("RacingControlComponent", Game::logger->Log("RacingControlComponent",
"Loading all players..."); "Loading all players...");
for (size_t i = 0; i < m_LobbyPlayers.size(); i++) { for (size_t positionNumber = 0; positionNumber < m_LobbyPlayers.size(); positionNumber++) {
Game::logger->Log("RacingControlComponent", Game::logger->Log("RacingControlComponent",
"Loading player now!"); "Loading player now!");
auto* player = auto* player =
EntityManager::Instance()->GetEntity(m_LobbyPlayers[i]); EntityManager::Instance()->GetEntity(m_LobbyPlayers[positionNumber]);
if (player == nullptr) { if (player == nullptr) {
return; return;
@ -581,7 +566,7 @@ void RacingControlComponent::Update(float deltaTime) {
Game::logger->Log("RacingControlComponent", Game::logger->Log("RacingControlComponent",
"Loading player now NOW!"); "Loading player now NOW!");
LoadPlayerVehicle(player, true); LoadPlayerVehicle(player, positionNumber + 1, true);
m_Loaded = true; m_Loaded = true;
} }

View File

@ -123,7 +123,7 @@ public:
* @param player The player who's vehicle to initialize. * @param player The player who's vehicle to initialize.
* @param initialLoad Is this the first time the player is loading in this race? * @param initialLoad Is this the first time the player is loading in this race?
*/ */
void LoadPlayerVehicle(Entity* player, bool initialLoad = false); void LoadPlayerVehicle(Entity* player, uint32_t positionNumber, bool initialLoad = false);
/** /**
* Invoked when the client says it has loaded in. * Invoked when the client says it has loaded in.