diff options
author | Kargatum <dowlandtop@yandex.com> | 2019-09-01 23:03:51 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-01 23:03:51 +0700 |
commit | cae91f1650c080458f8edbd5cb6fd6b638215e0a (patch) | |
tree | 9dcbb3f7e429185e1a1b352a8aaf8db278f99c43 | |
parent | 4effe04a5c692636ab818afd796e3e43ff0de13d (diff) |
fix (Core/Vehicle): delay position update in Vehicles, this may be deleted (#2247)
-rw-r--r-- | src/server/game/Entities/Vehicle/Vehicle.cpp | 12 |
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() |