Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
NGrid.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 SKYFIRE_NGRID_H
7#define SKYFIRE_NGRID_H
8
11
12#include "Grid.h"
13#include "GridReference.h"
14#include "Timer.h"
15#include "Util.h"
16
17#define DEFAULT_VISIBILITY_NOTIFY_PERIOD 1000
18
20{
21public:
25 GridInfo(time_t expiry, bool unload = true)
26 : i_timer(expiry), vis_Update(0, std::rand() % DEFAULT_VISIBILITY_NOTIFY_PERIOD),
28 const TimeTracker& getTimeTracker() const { return i_timer; }
34
35 void setTimer(const TimeTracker& pTimer) { i_timer = pTimer; }
36 void ResetTimeTracker(time_t interval) { i_timer.Reset(interval); }
37 void UpdateTimeTracker(time_t diff) { i_timer.Update(diff); }
39private:
42
43 uint16 i_unloadActiveLockCount : 16; // lock from active object spawn points (prevent clone loading)
44 bool i_unloadExplicitLock : 1; // explicit manual lock or config setting
45 bool i_unloadReferenceLock : 1; // lock from instance map copy
46};
47
56
57template
58<
59 uint32 N,
60 class ACTIVE_OBJECT,
61 class WORLD_OBJECT_TYPES,
62 class GRID_OBJECT_TYPES
63>
64class NGrid
65{
66public:
68 NGrid(uint32 id, int32 x, int32 y, time_t expiry, bool unload = true) :
69 i_gridId(id), i_GridInfo(GridInfo(expiry, unload)), i_x(x), i_y(y),
71 { }
72
73 GridType& GetGridType(const uint32 x, const uint32 y)
74 {
75 ASSERT(x < N && y < N);
76 return i_cells[x][y];
77 }
78
79 GridType const& GetGridType(const uint32 x, const uint32 y) const
80 {
81 ASSERT(x < N && y < N);
82 return i_cells[x][y];
83 }
84
85 uint32 GetGridId(void) const { return i_gridId; }
86 void SetGridId(uint32 id) { i_gridId = id; }
87 grid_state_t GetGridState(void) const { return i_cellstate; }
89 int32 getX() const { return i_x; }
90 int32 getY() const { return i_y; }
91
97 void setGridObjectDataLoaded(bool pLoaded) { i_GridObjectDataLoaded = pLoaded; }
98
100 const TimeTracker& getTimeTracker() const { return i_GridInfo.getTimeTracker(); }
101 bool getUnloadLock() const { return i_GridInfo.getUnloadLock(); }
102 void setUnloadExplicitLock(bool on) { i_GridInfo.setUnloadExplicitLock(on); }
103 void setUnloadReferenceLock(bool on) { i_GridInfo.setUnloadReferenceLock(on); }
104 void incUnloadActiveLock() { i_GridInfo.incUnloadActiveLock(); }
105 void decUnloadActiveLock() { i_GridInfo.decUnloadActiveLock(); }
106 void ResetTimeTracker(time_t interval) { i_GridInfo.ResetTimeTracker(interval); }
107 void UpdateTimeTracker(time_t diff) { i_GridInfo.UpdateTimeTracker(diff); }
108
109 /*
110 template<class SPECIFIC_OBJECT> void AddWorldObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT *obj)
111 {
112 GetGridType(x, y).AddWorldObject(obj);
113 }
114
115 template<class SPECIFIC_OBJECT> void RemoveWorldObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT *obj)
116 {
117 GetGridType(x, y).RemoveWorldObject(obj);
118 }
119
120 template<class SPECIFIC_OBJECT> void AddGridObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT *obj)
121 {
122 GetGridType(x, y).AddGridObject(obj);
123 }
124
125 template<class SPECIFIC_OBJECT> void RemoveGridObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT *obj)
126 {
127 GetGridType(x, y).RemoveGridObject(obj);
128 }
129 */
130
131 // Visit all Grids (cells) in NGrid (grid)
132 template<class T, class TT>
134 {
135 for (uint32 x = 0; x < N; ++x)
136 for (uint32 y = 0; y < N; ++y)
137 GetGridType(x, y).Visit(visitor);
138 }
139
140 // Visit a single Grid (cell) in NGrid (grid)
141 template<class T, class TT>
143 {
144 GetGridType(x, y).Visit(visitor);
145 }
146
147 //This gets the player count in grid
148 //I disable this to avoid confusion (active object usually means something else)
149 /*
150 uint32 GetActiveObjectCountInGrid() const
151 {
152 uint32 count = 0;
153 for (uint32 x = 0; x < N; ++x)
154 for (uint32 y = 0; y < N; ++y)
155 count += i_cells[x][y].ActiveObjectsInGrid();
156 return count;
157 }
158 */
159
160 template<class T>
162 {
163 uint32 count = 0;
164 for (uint32 x = 0; x < N; ++x)
165 for (uint32 y = 0; y < N; ++y)
166 count += i_cells[x][y].template GetWorldObjectCountInGrid<T>();
167 return count;
168 }
169
170private:
179};
180#endif
std::int32_t int32
Definition Define.h:73
std::uint32_t uint32
Definition Define.h:77
std::uint16_t uint16
Definition Define.h:78
#define ASSERT
Definition Errors.h:29
grid_state_t
Definition NGrid.h:49
@ GRID_STATE_REMOVAL
Definition NGrid.h:53
@ GRID_STATE_INVALID
Definition NGrid.h:50
@ GRID_STATE_IDLE
Definition NGrid.h:52
@ GRID_STATE_ACTIVE
Definition NGrid.h:51
@ MAX_GRID_STATE
Definition NGrid.h:54
#define DEFAULT_VISIBILITY_NOTIFY_PERIOD
Definition NGrid.h:17
Definition Grid.h:34
void Visit(TypeContainerVisitor< T, TypeMapContainer< GRID_OBJECT_TYPES > > &visitor)
Definition Grid.h:75
bool i_unloadExplicitLock
Definition NGrid.h:44
void decUnloadActiveLock()
Definition NGrid.h:33
bool i_unloadReferenceLock
Definition NGrid.h:45
const TimeTracker & getTimeTracker() const
Definition NGrid.h:28
GridInfo(time_t expiry, bool unload=true)
Definition NGrid.h:25
PeriodicTimer vis_Update
Definition NGrid.h:41
GridInfo()
Definition NGrid.h:22
TimeTracker i_timer
Definition NGrid.h:40
PeriodicTimer & getRelocationTimer()
Definition NGrid.h:38
uint16 i_unloadActiveLockCount
Definition NGrid.h:43
void setTimer(const TimeTracker &pTimer)
Definition NGrid.h:35
void setUnloadExplicitLock(bool on)
Definition NGrid.h:30
bool getUnloadLock() const
Definition NGrid.h:29
void ResetTimeTracker(time_t interval)
Definition NGrid.h:36
void UpdateTimeTracker(time_t diff)
Definition NGrid.h:37
void setUnloadReferenceLock(bool on)
Definition NGrid.h:31
void incUnloadActiveLock()
Definition NGrid.h:32
bool isGridObjectDataLoaded() const
Definition NGrid.h:96
GridReference< NGrid< N, Player, AllWorldObjectTypes, AllGridObjectTypes > > i_Reference
Definition NGrid.h:173
int32 getX() const
Definition NGrid.h:89
grid_state_t GetGridState(void) const
Definition NGrid.h:87
void ResetTimeTracker(time_t interval)
Definition NGrid.h:106
void decUnloadActiveLock()
Definition NGrid.h:105
void setGridObjectDataLoaded(bool pLoaded)
Definition NGrid.h:97
const TimeTracker & getTimeTracker() const
Definition NGrid.h:100
uint32 GetGridId(void) const
Definition NGrid.h:85
uint32 GetWorldObjectCountInNGrid() const
Definition NGrid.h:161
void SetGridState(grid_state_t s)
Definition NGrid.h:88
void setUnloadExplicitLock(bool on)
Definition NGrid.h:102
GridType & GetGridType(const uint32 x, const uint32 y)
Definition NGrid.h:73
void incUnloadActiveLock()
Definition NGrid.h:104
GridInfo * getGridInfoRef()
Definition NGrid.h:99
void SetGridId(uint32 id)
Definition NGrid.h:86
void VisitGrid(const uint32 x, const uint32 y, TypeContainerVisitor< T, TypeMapContainer< TT > > &visitor)
Definition NGrid.h:142
Grid< Player, AllWorldObjectTypes, AllGridObjectTypes > GridType
Definition NGrid.h:67
int32 getY() const
Definition NGrid.h:90
void setUnloadReferenceLock(bool on)
Definition NGrid.h:103
NGrid(uint32 id, int32 x, int32 y, time_t expiry, bool unload=true)
Definition NGrid.h:68
void UpdateTimeTracker(time_t diff)
Definition NGrid.h:107
GridType const & GetGridType(const uint32 x, const uint32 y) const
Definition NGrid.h:79
bool getUnloadLock() const
Definition NGrid.h:101
void link(GridRefManager< NGrid< N, ACTIVE_OBJECT, WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES > > *pTo)
Definition NGrid.h:92
void VisitAllGrids(TypeContainerVisitor< T, TypeMapContainer< TT > > &visitor)
Definition NGrid.h:133