diff --git a/src/game/TransportSystem.cpp b/src/game/TransportSystem.cpp index 2c34ef7cc..be1602c14 100644 --- a/src/game/TransportSystem.cpp +++ b/src/game/TransportSystem.cpp @@ -24,7 +24,7 @@ * This file contains the code needed for MaNGOS to provide abstract support for transported entities * Currently implemented * - Calculating between local and global coords - * + * - Abstract storage of passengers (added by BoardPassenger, UnboardPassenger) */ #include "TransportSystem.h" @@ -136,6 +136,34 @@ void TransportBase::CalculateGlobalPositionOf(float lx, float ly, float lz, floa go = NormalizeOrientation(lo + m_owner->GetOrientation()); } +void TransportBase::BoardPassenger(WorldObject* passenger, float lx, float ly, float lz, float lo, uint8 seat) +{ + TransportInfo* transportInfo = new TransportInfo(passenger, this, lx, ly, lz, lo, seat); + + // Insert our new passenger + m_passengers.insert(PassengerMap::value_type(passenger, transportInfo)); + + // The passenger needs fast access to transportInfo + passenger->SetTransportInfo(transportInfo); +} + +void TransportBase::UnBoardPassenger(WorldObject* passenger) +{ + PassengerMap::const_iterator itr = m_passengers.find(passenger); + + if (itr == m_passengers.end()) + return; + + // Set passengers transportInfo to NULL + passenger->SetTransportInfo(NULL); + + // Delete transportInfo + delete itr->second; + + // Unboard finally + m_passengers.erase(itr); +} + /* **************************************** TransportInfo ****************************************/ TransportInfo::TransportInfo(WorldObject* owner, TransportBase* transport, float lx, float ly, float lz, float lo, uint8 seat) : diff --git a/src/game/TransportSystem.h b/src/game/TransportSystem.h index f0b4e1a04..0365b3387 100644 --- a/src/game/TransportSystem.h +++ b/src/game/TransportSystem.h @@ -53,7 +53,7 @@ class TransportBase { public: explicit TransportBase(WorldObject* owner); - ~TransportBase(); + virtual ~TransportBase(); void Update(uint32 diff); void UpdateGlobalPositions(); @@ -68,6 +68,10 @@ class TransportBase void CalculateGlobalPositionOf(float lx, float ly, float lz, float lo, float& gx, float& gy, float& gz, float& go) const; protected: + // Helper functions to add/ remove a passenger from the list + void BoardPassenger(WorldObject* passenger, float lx, float ly, float lz, float lo, uint8 seat); + void UnBoardPassenger(WorldObject* passenger); + WorldObject* m_owner; ///< The transporting unit PassengerMap m_passengers; ///< List of passengers and their transport-information @@ -88,7 +92,9 @@ class TransportInfo public: explicit TransportInfo(WorldObject* owner, TransportBase* transport, float lx, float ly, float lz, float lo, uint8 seat); + // Set local positions void SetLocalPosition(float lx, float ly, float lz, float lo); + void SetTransportSeat(uint8 seat) { m_seat = seat; } // Accessors WorldObject* GetTransport() const { return m_transport->GetOwner(); } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index f6917361e..962dc5daf 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "12217" + #define REVISION_NR "12218" #endif // __REVISION_NR_H__