TrinityCore
GridMap.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef TRINITY_GRID_MAP_H
19#define TRINITY_GRID_MAP_H
20
21#include "Define.h"
22#include "MapDefines.h"
23#include "Optional.h"
24#include <cstdio>
25
26struct LiquidData;
28namespace G3D { class Plane; }
29
31{
33 union
34 {
35 float* m_V9;
38 };
39 union
40 {
41 float* m_V8;
44 };
45 G3D::Plane* _minHeightPlanes;
46 // Height level data
49
50 // Area data
52
53 // Liquid data
57 float* _liquidMap;
65
67
68 bool loadAreaData(FILE* in, uint32 offset, uint32 size);
69 bool loadHeightData(FILE* in, uint32 offset, uint32 size);
70 bool loadLiquidData(FILE* in, uint32 offset, uint32 size);
71 bool loadHolesData(FILE* in, uint32 offset, uint32 size);
72 bool isHole(int row, int col) const;
73
74 // Get height functions and pointers
75 typedef float (GridMap::* GetHeightPtr) (float x, float y) const;
76 GetHeightPtr _gridGetHeight;
77 float getHeightFromFloat(float x, float y) const;
78 float getHeightFromUint16(float x, float y) const;
79 float getHeightFromUint8(float x, float y) const;
80 float getHeightFromFlat(float x, float y) const;
81
82public:
83 GridMap();
84 ~GridMap();
85
86 enum class LoadResult
87 {
88 Ok,
89 FileDoesNotExist,
90 InvalidFile
91 };
92
93 LoadResult loadData(char const* filename);
94 void unloadData();
95
96 uint16 getArea(float x, float y) const;
97 float getHeight(float x, float y) const { return (this->*_gridGetHeight)(x, y); }
98 float getMinHeight(float x, float y) const;
99 float getLiquidLevel(float x, float y) const;
100 ZLiquidStatus GetLiquidStatus(float x, float y, float z, Optional<map_liquidHeaderTypeFlags> ReqLiquidType, LiquidData* data = nullptr, float collisionHeight = 2.03128f) const; // DEFAULT_COLLISION_HEIGHT in Object.h
101};
102
103#endif // TRINITY_GRID_MAP_H
#define TC_GAME_API
Definition: Define.h:123
uint8_t uint8
Definition: Define.h:144
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
ZLiquidStatus
Definition: MapDefines.h:125
map_liquidHeaderTypeFlags
Definition: MapDefines.h:97
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition: Optional.h:25
LoadResult
Definition: GridMap.h:87
uint8 * m_uint8_V8
Definition: GridMap.h:43
float _liquidLevel
Definition: GridMap.h:54
uint16 * m_uint16_V8
Definition: GridMap.h:42
uint16 * _liquidEntry
Definition: GridMap.h:55
uint8 _liquidOffY
Definition: GridMap.h:62
map_liquidHeaderTypeFlags * _liquidFlags
Definition: GridMap.h:56
uint16 _liquidGlobalEntry
Definition: GridMap.h:59
map_liquidHeaderTypeFlags _liquidGlobalFlags
Definition: GridMap.h:60
uint8 _liquidOffX
Definition: GridMap.h:61
uint8 * m_uint8_V9
Definition: GridMap.h:37
float * _liquidMap
Definition: GridMap.h:57
uint32 _flags
Definition: GridMap.h:32
uint8 _liquidHeight
Definition: GridMap.h:64
uint16 * _areaMap
Definition: GridMap.h:51
float _gridIntHeightMultiplier
Definition: GridMap.h:48
uint8 _liquidWidth
Definition: GridMap.h:63
float * m_V9
Definition: GridMap.h:35
G3D::Plane * _minHeightPlanes
Definition: GridMap.h:45
uint16 _gridArea
Definition: GridMap.h:58
uint16 * m_uint16_V9
Definition: GridMap.h:36
float getHeight(float x, float y) const
Definition: GridMap.h:97
uint8 * _holes
Definition: GridMap.h:66
float _gridHeight
Definition: GridMap.h:47
GetHeightPtr _gridGetHeight
Definition: GridMap.h:76
float * m_V8
Definition: GridMap.h:41
constexpr std::size_t size()
Definition: UpdateField.h:796
LoadResult
Definition: IVMapManager.h:35