Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
TransportMgr.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 TRANSPORTMGR_H
7#define TRANSPORTMGR_H
8
9#include "DBCStores.h"
10#include "Platform/Singleton.h"
11#include "Spline.h"
12#include <G3D/Quat.h>
13
14struct KeyFrame;
17class Transport;
18class Map;
19
21typedef std::vector<KeyFrame> KeyFrameVec;
23typedef std::set<Transport*> TransportSet;
26
28{
29 explicit KeyFrame(TaxiPathNodeEntry const& _node) : Index(0), Node(&_node),
30 DistSinceStop(-1.0f), DistUntilStop(-1.0f), DistFromPrev(-1.0f), TimeFrom(0.0f), TimeTo(0.0f),
32 {
33 }
34
40 float TimeFrom;
41 float TimeTo;
46
47 // Data needed for next frame
50
51 bool IsTeleportFrame() const { return Teleport; }
52 bool IsStopFrame() const { return Node->actionFlag == 2; }
53};
54
68
69typedef std::map<uint32, TransportAnimationEntry const*> TransportPathContainer;
70typedef std::map<uint32, TransportRotationEntry const*> TransportPathRotationContainer;
71
85
86typedef std::map<uint32, TransportAnimation> TransportAnimationContainer;
87
89{
90 friend class Skyfire::Singleton<TransportMgr, Skyfire::Mutex>;
91 friend void LoadDBCStores(std::string const&);
92
93public:
94 void Unload();
95
97
98 // Creates a transport using given GameObject template entry
99 Transport* CreateTransport(uint32 entry, uint32 guid = 0, Map* map = NULL);
100
101 // Spawns all continent transports, used at core startup
103
104 // creates all transports for instance
105 void CreateInstanceTransports(Map* map);
106
107 // Spawns all local map transports from gameobject data.
108 void SpawnLocalTransports(Map* map);
109
110 Transport* CreateLocalTransport(uint32 guid, Map* map);
111 Transport* CreateLocalTransport(uint32 entry, Map* map, float x, float y, float z, float o, uint32 animprogress);
112
113 uint32 GetLocalTransportEntry(uint32 entry) const;
114
115 void AddLocalTransportSpawn(uint16 mapId, uint32 spawnMask, uint32 guid)
116 {
117 for (uint8 i = 0; spawnMask != 0; i++, spawnMask >>= 1)
118 if (spawnMask & 1)
119 _localTransportSpawns[MAKE_PAIR32(mapId, i)].insert(guid);
120 }
121
123 {
124 TransportTemplates::const_iterator itr = _transportTemplates.find(entry);
125 if (itr != _transportTemplates.end())
126 return &itr->second;
127 return NULL;
128 }
129
131 {
132 TransportAnimationContainer::const_iterator itr = _transportAnimations.find(entry);
133 if (itr != _transportAnimations.end())
134 return &itr->second;
135
136 return NULL;
137 }
138
139private:
140 TransportMgr();
144
145 // Generates and precaches a path for transport to avoid generation each time transport instance is created
146 void GeneratePath(GameObjectTemplate const* goInfo, TransportTemplate* transport);
147
148 void AddPathNodeToTransport(uint32 transportEntry, uint32 timeSeg, TransportAnimationEntry const* node);
149
150 void AddPathRotationToTransport(uint32 transportEntry, uint32 timeSeg, TransportRotationEntry const* node)
151 {
152 _transportAnimations[transportEntry].Rotations[timeSeg] = node;
153 }
154
155 // Container storing transport templates
157
158 // Container storing transport entries to create for instanced maps
160
162
164};
165
166#define sTransportMgr Skyfire::Singleton<TransportMgr, Skyfire::Mutex>::instance()
167
168#endif // TRANSPORTMGR_H
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
uint32 MAKE_PAIR32(uint16 l, uint16 h)
Movement::Spline< double > TransportSpline
std::map< uint32, TransportRotationEntry const * > TransportPathRotationContainer
UNORDERED_MAP< uint32, std::set< uint32 > > TransportInstanceMap
std::map< uint32, TransportAnimation > TransportAnimationContainer
UNORDERED_MAP< uint32, TransportTemplate > TransportTemplates
std::map< uint32, TransportAnimationEntry const * > TransportPathContainer
UNORDERED_MAP< uint32, TransportSet > TransportMap
std::vector< KeyFrame > KeyFrameVec
std::set< Transport * > TransportSet
#define UNORDERED_MAP
Definition Map.h:238
void LoadTransportTemplates()
TransportTemplates _transportTemplates
void AddLocalTransportSpawn(uint16 mapId, uint32 spawnMask, uint32 guid)
TransportAnimation const * GetTransportAnimInfo(uint32 entry) const
TransportInstanceMap _localTransportSpawns
Transport * CreateLocalTransport(uint32 guid, Map *map)
TransportAnimationContainer _transportAnimations
uint32 GetLocalTransportEntry(uint32 entry) const
TransportMgr(TransportMgr const &)
void SpawnLocalTransports(Map *map)
void CreateInstanceTransports(Map *map)
friend void LoadDBCStores(std::string const &)
TransportTemplate const * GetTransportTemplate(uint32 entry) const
TransportInstanceMap _instanceTransports
Transport * CreateTransport(uint32 entry, uint32 guid=0, Map *map=NULL)
void AddPathNodeToTransport(uint32 transportEntry, uint32 timeSeg, TransportAnimationEntry const *node)
void AddPathRotationToTransport(uint32 transportEntry, uint32 timeSeg, TransportRotationEntry const *node)
TransportMgr & operator=(TransportMgr const &)
void GeneratePath(GameObjectTemplate const *goInfo, TransportTemplate *transport)
void SpawnContinentTransports()
float DistUntilStop
uint32 Index
float NextDistFromPrev
bool IsTeleportFrame() const
float DistFromPrev
uint32 NextArriveTime
bool IsStopFrame() const
float DistSinceStop
uint32 DepartureTime
TaxiPathNodeEntry const * Node
bool Teleport
float TimeFrom
float TimeTo
KeyFrame(TaxiPathNodeEntry const &_node)
TransportSpline * Spline
uint32 ArriveTime
TransportPathRotationContainer Rotations
TransportAnimationEntry const * GetAnimNode(uint32 time) const
TransportPathContainer Path
G3D::Quat GetAnimRotation(uint32 time) const
TransportAnimationEntry const * GetNextAnimNode(uint32 time) const
TransportAnimationEntry const * GetPrevAnimNode(uint32 time) const
std::set< uint32 > mapsUsed
KeyFrameVec keyFrames