mirror of
https://github.com/DarkflameUniverse/DarkflameServer
synced 2024-08-30 18:43:58 +00:00
Fix racing spawn positions (#913)
This commit is contained in:
parent
dff02773a0
commit
015cbc06ea
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user