-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathnav_mesh.h
More file actions
414 lines (379 loc) · 9.19 KB
/
nav_mesh.h
File metadata and controls
414 lines (379 loc) · 9.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
#ifndef _INCLUDE_NAV_MESH_H_
#define _INCLUDE_NAV_MESH_H_
#include "game_events.h"
#include "util.h"
struct CNavMesh_iface
{
void * PreLoadAreas;
void * CreateArea;
void * DestroyArea;
void * CreateHidingSpot;
void * Reset;
void * Update;
void * Load;
void * PostLoad;
void * Save;
void * GetSubVersionNumber;
void * SaveCustomData;
void * LoadCustomData;
void * SaveCustomDataPreArea;
void * LoadCustomDataPreArea;
void * OnServerActivate;
void * OnRoundRestart;
void * OnRoundRestartPreEntity;
void * OnBreakableCreated;
void * OnBreakableBroken;
void * OnAreaBlocked;
void * OnAreaUnblocked;
void * OnAvoidanceObstacleEnteredArea;
void * OnAvoidanceObstacleLeftArea;
void * OnEditCreateNotify;
void * OnEditDestroyNotify;
void * OnEditDestroyNotify2;
void * OnNodeAdded;
void * AddWalkableSeeds;
void * CommandNavFloodSelect;
void * StripNavigationAreas;
void * PostCustomAnalysis;
void * RemoveNavArea;
void * BeginCustomAnalysis;
void * EndCustomAnalysis;
};
struct TerrorNavMesh_iface
{
void * OnDoorCreated; // lol
};
struct CNavMesh_vtable
{
void * dtor1;
void * dtor0;
IGameEventListener2_iface IGameEventListener2;
CNavMesh_iface CNavMesh;
};
struct TerrorNavMesh_vtable
{
void * dtor1;
void * dtor0;
IGameEventListener2_iface IGameEventListener2;
CNavMesh_iface CNavMesh;
TerrorNavMesh_iface TerrorNavMesh;
};
struct CNavArea_iface
{
void * OnServerActivate;
void * OnRoundRestart;
void * OnRoundRestartPreEntity;
void * OnEnter;
void * OnExit;
void * OnDestroyNotify;
void * OnDestroyNotify2;
void * OnEditCreateNotify;
void * OnEditDestroyNotify;
void * OnEditDestroyNotify2;
void * Save;
void * Load;
void * PostLoad;
void * SaveToSelectedSet;
void * RestoreFromSelectedSet;
void * Dump;
void * UpdateBlocked;
void * GetDangerDecayRate;
void * Draw;
void * DrawFilled;
void * DrawSelectedSet;
void * ComputeHidingSpots;
void * ComputeSniperSpots;
void * ComputeSpotEncounters;
void * ComputeEarliestOccupyTimes;
void * CustomAnalysis;
void * ComputeLighting;
void * IsAbleToMergeWith;
void * InheritAttributes;
};
struct TerrorNavArea_iface
{
void * OnEnterActiveSet;
void * OnLeaveActiveSet;
void * ResetPotentiallyVisibleAreas;
};
struct CNavArea_vtable
{
void * dtor1;
void * dtor0;
CNavArea_iface CNavArea;
};
struct TerrorNavArea_vtable
{
void * dtor1;
void * dtor0;
CNavArea_iface CNavArea;
TerrorNavArea_iface TerrorNavArea;
};
struct CNavArea;
struct NavConnect
{
union
{
unsigned int id;
CNavArea * area;
};
float length;
};
struct CNavLadder
{
float m_top[3]; // 0
float m_bottom[3]; // 12
float m_length; // 24
float m_width; // 28
CNavArea * m_topForwardArea; // 32
CNavArea * m_topLeftArea; // 36
CNavArea * m_topRightArea; // 40
CNavArea * m_topBehindArea; // 44
CNavArea * m_bottomArea; // 48
int m_ladderEntity; // 52
int m_dir; // 56 0=up, 1=down
float m_normal[3]; // 60
unsigned int m_id; // 64
};
struct CNavNode
{
float m_pos[3];
float m_normal[3];
CNavNode *m_to[4];
float m_obstacleHeight[4];
float m_obstacleStartDist[4];
float m_obstacleEndDist[4];
unsigned int m_id;
int m_attributeFlags;
CNavNode *m_next;
CNavNode *m_nextAtXY;
unsigned char m_visited;
CNavNode *m_parent;
bool m_isCovered;
CNavArea *m_area;
bool m_isBlocked[4];
bool m_crouch[4];
float m_groundHeightAboveNode[4];
bool m_isOnDisplacement;
};
struct AreaBindInfo
{
union
{
CNavArea *area;
unsigned int id;
};
//unsigned char attributes;
};
struct CNavArea_data
{
float m_nwCorner[3];
float m_seCorner[3];
float m_invDxCorners;
float m_invDyCorners;
float m_neZ;
float m_swZ;
float m_center[3];
unsigned char m_playerCount[2];
bool m_isBlocked[2]; // Goofy
unsigned int m_marker;
float m_totalCost;
float m_costSoFar;
CNavArea * m_nextOpen;
CNavArea * m_prevOpen;
unsigned int m_openMarker;
int m_attributeFlags;
NavConnect **m_connect[4];
CNavLadder **m_ladder[2];
int m_damagingTickCount;
unsigned int m_nearNavSearchMarker;
CNavArea * m_parent;
int m_parentHow; // NavTraverseType Also goofy
float m_pathLengthSoFar;
void * m_elevator; // CFunElevator
NavConnect **m_elevatorAreas;
unsigned int m_id;
unsigned int m_debugid;
unsigned int m_place; // Place
CountdownTimer m_blockedTimer;
bool m_isUnderwater;
bool m_isBattlefront;
//float m_avoidanceObstacleHeight;
CountdownTimer m_avoidanceObstacleTimer;
float m_clearedTimestamp[2];
float m_danger[2];
float m_dangerTimestamp[2];
void **m_hidingSpots; // HidingSpot
void **m_spotEncounters; // SpotEncounter
float m_earliestOccupyTime[2];
float m_lightIntensity[ 4 ];
CNavNode *m_node[4];
CNavArea *m_prevHash;
CNavArea *m_nextHash;
char unknownxx[16];
NavConnect **m_incomingConnect[4];
};
DECLARE_CUTLVECTOR_FULL(CAreaBindInfoArray, AreaBindInfo, CUTLMEMORYCONSERVATIVE(AreaBindInfo));
struct TerrorNavArea_data
{
int m_TerrorMarker; // 292
_DWORD unknown296; // 296
unsigned int m_spawnAttributes; // 300
AreaBindInfo m_inheritVisibilityFrom; // 304
CAreaBindInfoArray m_potentiallyVisibleAreas; // 308
bool m_isInheritedFrom; // 324
bool m_isCleared; // 325 might just be byte/uchar
IntervalTimer m_clearedTimer; // 328 starts when nav area is cleared by player
char unknown332[20]; // 332
short m_siUnknown352[2]; // 352
IntervalTimer m_unclearedTimer; // 356 starts when nav area is uncleared
char unknown364[4];
int m_hDoorEntity;
};
struct CNavArea
{
CNavArea_vtable *vptr;
CNavArea_data CNavArea;
};
struct TerrorNavArea
{
TerrorNavArea_vtable *vptr;
CNavArea_data CNavArea;
TerrorNavArea_data TerrorNavArea;
};
// 24
struct Extent
{
float lo[3]; // 0
float hi[3]; // 12
};
// 96
struct Checkpoint
{
CUTLVECTOR(TerrorNavArea*) m_containedAreas; // 0
float m_flTotalArea; // 20
Extent m_extent; // 24 (default +/-99999.0)
CUTLVECTOR(TerrorNavArea*) m_containedSpawnAreas; // 48
float m_flTotalSpawnArea; // 68
CUTLVECTOR(int) m_containedDoors; // 72 EHANDLE vector
bool m_bInUse; // 92
bool m_bNoZombies; // 93
bool m_bAllAliveHumanSurvivorsInside; // 94
bool m_bOutward; // 95
};
DECLARE_CUTLVECTOR(NavAreaVector, CNavArea *);
DECLARE_CUTLVECTOR(NavLadderVector, CNavLadder *);
struct WalkableSeedSpot
{
float pos[3];
float normal[3];
};
struct INavAvoidanceObstacle_iface
{
void * IsPotentiallyAbleToObstructNavAreas;
void * GetNavObstructionHeight;
void * CanObstructNavAreas;
void * GetObstructingEntity;
void * OnNavMeshLoaded;
};
struct INavAvoidanceObstacle
{
INavAvoidanceObstacle_iface *vptr;
};
// 1520?
struct CNavMesh_data
{
int unk0; // 0
bool unk4; // 4
bool unk5;
bool unk6;
/* // ERROR - SILVERSHOT
CUTLVECTOR(CUTLVECTOR(CNavArea*)) m_grid; // 8
float m_gridCellSize; // 28
float m_gridSizeX; // 32
float m_gridSizeY; // 36
float m_minX; // 40
float m_minY; // 44
unsigned int m_areaCount; // 48
bool m_isLoaded; // 52
bool m_isOutOfDate; // 53
bool m_isAnalyzed; // 54
char padding55; // 55
char unknown56[20]; // 56
CNavArea *m_hashTable[256]; // 76
char **m_placeName; // 1100
unsigned int m_placeCount; // 1104
int m_editMode; // 1108
bool m_isEditing; // 1112
unsigned int m_navPlace; // 1116
float m_editCursorPos[3]; // 1120
CNavArea * m_markedArea; // 1132
CNavArea *m_selectedArea; // 1136
CNavArea *m_lastSelectedArea; // 1140
int m_markedCorner; // 1144 NavCornerType
float m_anchor[3]; // 1148
bool m_isPlacePainting; // 1160
bool m_splitAlongX; // 1161
float m_splitEdge; // 1164
bool m_climbableSurface; // 1168
float m_surfaceNormal[3]; // 1172
float m_ladderAnchor[3]; // 1184
float m_ladderNormal[3]; // 1196
CNavLadder *m_selectedLadder; // 1208
CNavLadder *m_lastSelectedLadder; // 1212
CNavLadder *m_markedLadder; // 1216
CountdownTimer m_showAreaInfoTimer; // 1220
NavAreaVector m_selectedSet; // 1232
NavAreaVector m_dragSelectionSet; // 1252
bool m_isContinuouslySelecting; // 1272
bool m_isContinuouslyDeselecting; // 1273
bool m_bIsDragDeselecting; // 1274
int m_nDragSelectionVolumeZMax; // 1276
int m_nDragSelectionVolumeZMin; // 1280
CNavNode *m_currentNode; // 1284
int m_generationDir; // 1288 NavDirType
NavLadderVector m_ladders; // 1292
int m_generationState; // 1312 GenerationStateType
int m_generationMode; // 1316 GenerationModeType
int m_generationIndex; // 1320
int m_sampleTick; // 1324
bool m_bQuitWhenFinished; // 1328
float m_generationStartTime; // 1332
Extent m_simplifyGenerationExtent; // 1336
char *m_spawnName; // 1360
CUTLVECTOR(WalkableSeedSpot) m_walkableSeeds; // 1364
int m_seedIdx; // 1384
int m_hostThreadModeRestoreValue; // 1388
NavAreaVector m_transientAreas; // 1392
NavAreaVector m_avoidanceObstacleAreas; // 1412
CUTLVECTOR(INavAvoidanceObstacle) m_avoidanceObstacles; // 1432
NavAreaVector m_blockedAreas; // 1452
CUTLVECTOR(int) m_storedSelectedSet; // 1472
char unknown1492[28]; // 1492
// */
};
// starts at base + 1524
// total size 1744.
// size 220.
struct TerrorNavMesh_data
{
// base 1524
float m_fMapMaxFlowDistance; // 0
char unknown4[108];
Checkpoint **m_checkpoints; // 112 nav areas?
char unknown116[8]; // 116
int m_iNumCheckpoints; // 124 Checkpoint == saferoom
char unknown128[92];
};
struct CNavMesh
{
CNavMesh_vtable *vptr;
CNavMesh_data CNavMesh;
};
struct TerrorNavMesh
{
TerrorNavMesh_vtable * vptr; // 0
CNavMesh_data CNavMesh; // 4
TerrorNavMesh_data TerrorNavMesh; // 1516
};
#endif // _INCLUDE_NAV_MESH_H_