fix (Core/Vehicle): delay position update in Vehicles, this may be deleted (#2247)

This commit is contained in:
Kargatum
2019-09-01 23:03:51 +07:00
committed by GitHub
parent 4effe04a5c
commit cae91f1650

View File

@@ -498,19 +498,25 @@ void Vehicle::RelocatePassengers()
{ {
ASSERT(_me->GetMap()); 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 // 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()); ASSERT(passenger->IsInWorld());
float px, py, pz, po; float px, py, pz, po;
passenger->m_movementInfo.transport.pos.GetPosition(px, py, pz, po); passenger->m_movementInfo.transport.pos.GetPosition(px, py, pz, po);
CalculatePassengerPosition(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() void Vehicle::Dismiss()