summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKargatum <dowlandtop@yandex.com>2019-09-01 23:03:51 +0700
committerGitHub <noreply@github.com>2019-09-01 23:03:51 +0700
commitcae91f1650c080458f8edbd5cb6fd6b638215e0a (patch)
tree9dcbb3f7e429185e1a1b352a8aaf8db278f99c43
parent4effe04a5c692636ab818afd796e3e43ff0de13d (diff)
fix (Core/Vehicle): delay position update in Vehicles, this may be deleted (#2247)
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp
index e2ae54f166..4d17c128ee 100644
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -498,19 +498,25 @@ void Vehicle::RelocatePassengers()
{
ASSERT(_me->GetMap());
+ std::vector<std::pair<Unit*, Position>> seatRelocation;
+ seatRelocation.reserve(Seats.size());
+
// not sure that absolute position calculation is correct, it must depend on vehicle pitch angle
- for (SeatMap::const_iterator itr = Seats.begin(); itr != Seats.end(); ++itr)
+ for (auto const& itr : Seats)
{
- if (Unit* passenger = ObjectAccessor::GetUnit(*GetBase(), itr->second.Passenger.Guid))
+ if (Unit* passenger = ObjectAccessor::GetUnit(*GetBase(), itr.second.Passenger.Guid))
{
ASSERT(passenger->IsInWorld());
float px, py, pz, po;
passenger->m_movementInfo.transport.pos.GetPosition(px, py, pz, po);
CalculatePassengerPosition(px, py, pz, &po);
- passenger->UpdatePosition(px, py, pz, po);
+ seatRelocation.emplace_back(passenger, Position(px, py, pz, po));
}
}
+
+ for (auto const& pair : seatRelocation)
+ pair.first->UpdatePosition(pair.second);
}
void Vehicle::Dismiss()