From 7cb583a6570d35aec63c7df41e92f5cceea8de8b Mon Sep 17 00:00:00 2001 From: Aokromes Date: Wed, 20 Jul 2016 19:55:44 +0200 Subject: [PATCH] =?UTF-8?q?Core/Vehicle:=20delay=20position=20update=20in?= =?UTF-8?q?=20Vehicles,=20this=20may=20be=20deleted=20=E2=80=A6=20?= =?UTF-8?q?=E2=80=A6on=20UpdatePosition,=20generating=20a=20crash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Entities/Vehicle/Vehicle.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index b091a790349..80c7c5d3957 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -529,6 +529,9 @@ void Vehicle::RelocatePassengers() { ASSERT(_me->GetMap()); + std::vector> 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) { @@ -539,10 +542,12 @@ void Vehicle::RelocatePassengers() 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); } /**