Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
Vehicle.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SF_SKYFIRE_VEHICLE_H
7#define SF_SKYFIRE_VEHICLE_H
8
9#include "Object.h"
10#include "ObjectDefines.h"
11#include "Unit.h"
12#include "VehicleDefines.h"
13#include <list>
14
15struct VehicleEntry;
16class Unit;
18
19typedef std::set<uint64> GuidSet;
20
21class Vehicle : public TransportBase
22{
23protected:
24 friend bool Unit::CreateVehicleKit(uint32 id, uint32 creatureEntry, bool);
25 Vehicle(Unit* unit, VehicleEntry const* vehInfo, uint32 creatureEntry);
26
27 friend void Unit::RemoveVehicleKit(bool);
28 ~Vehicle();
29
30public:
31 void Install();
32 void Uninstall();
33 void Reset(bool evading = false);
34 void InstallAllAccessories(bool evading);
35 void ApplyAllImmunities();
36 void InstallAccessory(uint32 entry, int8 seatId, bool minion, TempSummonType type, uint32 summonTime);
37
38 Unit* GetBase() const { return _me; }
39 VehicleEntry const* GetVehicleInfo() const { return _vehicleInfo; }
41
42 bool HasEmptySeat(int8 seatId) const;
43 Unit* GetPassenger(int8 seatId) const;
44 SeatMap::const_iterator GetNextEmptySeat(int8 seatId, bool next) const;
46
47 bool AddPassenger(Unit* passenger, int8 seatId = -1);
48 Vehicle* RemovePassenger(Unit* passenger);
49 void RelocatePassengers();
51 bool IsVehicleInUse() const;
52
53 void SetLastShootPos(Position const& pos) { _lastShootPos.Relocate(pos); }
54 Position const& GetLastShootPos() const { return _lastShootPos; }
55
57
58 VehicleSeatEntry const* GetSeatForPassenger(Unit const* passenger) const;
59
61
62protected:
63 friend class VehicleJoinEvent;
65
66private:
73
74 SeatMap::iterator GetSeatIteratorForPassenger(Unit* passenger);
76
78 void CalculatePassengerPosition(float& x, float& y, float& z, float* o /*= NULL*/) const
79 {
81 GetBase()->GetPositionX(), GetBase()->GetPositionY(),
82 GetBase()->GetPositionZ(), GetBase()->GetOrientation());
83 }
84
86 void CalculatePassengerOffset(float& x, float& y, float& z, float* o /*= NULL*/) const
87 {
89 GetBase()->GetPositionX(), GetBase()->GetPositionY(),
90 GetBase()->GetPositionZ(), GetBase()->GetOrientation());
91 }
92
95
96private:
100
104
105 typedef std::list<VehicleJoinEvent*> PendingJoinEventContainer;
107};
108
110{
111 friend class Vehicle;
112protected:
115 bool Execute(uint64, uint32);
116 void Abort(uint64);
117
120 SeatMap::iterator Seat;
121};
122
123#endif
std::set< uint64 > GuidSet
Definition Battlefield.h:62
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::int8_t int8
Definition Define.h:75
std::uint64_t uint64
Definition Define.h:76
TempSummonType
Definition Object.h:67
std::set< uint64 > GuidSet
Definition Vehicle.h:19
std::map< int8, VehicleSeat > SeatMap
virtual void CalculatePassengerPosition(float &x, float &y, float &z, float *o=NULL) const =0
This method transforms supplied transport offsets into global coordinates.
virtual void CalculatePassengerOffset(float &x, float &y, float &z, float *o=NULL) const =0
This method transforms supplied global coordinates into local offsets.
Definition Unit.h:1367
void RemoveVehicleKit(bool remove=false)
Definition Unit.cpp:7179
bool CreateVehicleKit(uint32 id, uint32 creatureEntry, bool loading=false)
Definition Unit.cpp:7163
Vehicle(Unit *unit, VehicleEntry const *vehInfo, uint32 creatureEntry)
Definition Vehicle.cpp:24
Position _lastShootPos
Definition Vehicle.h:103
uint8 GetAvailableSeatCount() const
Gets the available seat count.
Definition Vehicle.cpp:657
Unit * GetBase() const
May be called from scripts.
Definition Vehicle.h:38
GuidSet vehiclePlayers
Definition Vehicle.h:99
Unit * GetPassenger(int8 seatId) const
Gets a passenger on specified seat.
Definition Vehicle.cpp:306
void ApplyAllImmunities()
Applies specific immunities that cannot be set in DB.
Definition Vehicle.cpp:184
void RemovePendingEvent(VehicleJoinEvent *e)
Removes @VehicleJoinEvent objects from pending join event store. This method only removes it after it...
Definition Vehicle.cpp:681
SeatMap::iterator GetSeatIteratorForPassenger(Unit *passenger)
Gets seat iterator for specified passenger.
Definition Vehicle.cpp:636
void SetLastShootPos(Position const &pos)
Definition Vehicle.h:53
VehicleEntry const * GetVehicleInfo() const
Definition Vehicle.h:39
void Reset(bool evading=false)
Reapplies immunities and reinstalls accessories. Only has effect for creatures.
Definition Vehicle.cpp:162
Vehicle * RemovePassenger(Unit *passenger)
Removes the passenger from the vehicle.
Definition Vehicle.cpp:487
void InitMovementInfoForBase()
Sets correct MovementFlags2 based on VehicleFlags from DBC.
Definition Vehicle.cpp:585
bool AddPassenger(Unit *passenger, int8 seatId=-1)
Attempts to add a passenger to the vehicle on 'seatId'.
Definition Vehicle.cpp:415
void CalculatePassengerPosition(float &x, float &y, float &z, float *o) const
This method transforms supplied transport offsets into global coordinates.
Definition Vehicle.h:78
@ STATUS_INSTALLED
Definition Vehicle.h:70
@ STATUS_UNINSTALLING
Definition Vehicle.h:71
@ STATUS_NONE
Definition Vehicle.h:69
uint32 GetCreatureEntry() const
Definition Vehicle.h:40
void RemoveAllPassengers()
Removes all current and pending passengers from the vehicle.
Definition Vehicle.cpp:241
void InstallAccessory(uint32 entry, int8 seatId, bool minion, TempSummonType type, uint32 summonTime)
Installs an accessory.
Definition Vehicle.cpp:374
~Vehicle()
Definition Vehicle.cpp:47
bool IsVehicleInUse() const
Returns information whether the vehicle is currently used by any unit.
Definition Vehicle.cpp:567
uint32 UsableSeatNum
Number of seats that match VehicleSeatEntry::UsableByPlayer, used for proper display flags.
Definition Vehicle.h:64
std::list< VehicleJoinEvent * > PendingJoinEventContainer
Definition Vehicle.h:105
uint32 _creatureEntry
Can be different than the entry of _me in case of players.
Definition Vehicle.h:101
Status _status
Internal variable for sanity checks.
Definition Vehicle.h:102
void Uninstall()
Removes all passengers and sets status to STATUS_UNINSTALLING. No new passengers can be added to the ...
Definition Vehicle.cpp:133
void RemovePendingEventsForSeat(int8 seatId)
Removes any pending events for given seatId. Executed when a @VehicleJoinEventExecute is called.
Definition Vehicle.cpp:704
Unit * _me
The underlying unit with the vehicle kit. Can be player or creature.
Definition Vehicle.h:97
bool HasEmptySeat(int8 seatId) const
Checks if vehicle's seat specified by 'seatId' is empty.
Definition Vehicle.cpp:285
PendingJoinEventContainer _pendingJoinEvents
Collection of delayed join events for prospective passengers.
Definition Vehicle.h:106
VehicleSeatEntry const * GetSeatForPassenger(Unit const *passenger) const
Returns information on the seat of specified passenger, represented by the format in VehicleSeat....
Definition Vehicle.cpp:614
void Install()
Initializes power type for vehicle. Nothing more.
Definition Vehicle.cpp:64
void RelocatePassengers()
Relocate passengers. Must be called after m_base::Relocate.
Definition Vehicle.cpp:536
SeatMap Seats
The collection of all seats on the vehicle. Including vacant ones.
Definition Vehicle.h:56
Position const & GetLastShootPos() const
Definition Vehicle.h:54
SeatMap::const_iterator GetNextEmptySeat(int8 seatId, bool next) const
Gets the next empty seat based on current seat.
Definition Vehicle.cpp:329
friend class VehicleJoinEvent
Definition Vehicle.h:63
void RemovePendingEventsForPassenger(Unit *passenger)
Definition Vehicle.cpp:729
VehicleEntry const * _vehicleInfo
DBC data for vehicle.
Definition Vehicle.h:98
void InstallAllAccessories(bool evading)
Definition Vehicle.cpp:109
void CalculatePassengerOffset(float &x, float &y, float &z, float *o) const
This method transforms supplied global coordinates into local offsets.
Definition Vehicle.h:86
bool Execute(uint64, uint32)
Actually adds the passenger @Passenger to vehicle @Target.
Definition Vehicle.cpp:764
SeatMap::iterator Seat
Definition Vehicle.h:120
Unit * Passenger
Definition Vehicle.h:119
Vehicle * Target
Definition Vehicle.h:118
friend class Vehicle
Definition Vehicle.h:111
void Abort(uint64)
Aborts the event. Implies that unit @Passenger will not be boarding vehicle @Target after all.
Definition Vehicle.cpp:856
VehicleJoinEvent(Vehicle *v, Unit *u)
Definition Vehicle.h:113