TrinityCore
Loading...
Searching...
No Matches
WorldModel.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 _WORLDMODEL_H
19#define _WORLDMODEL_H
20
22#include "Define.h"
23#include "EnumFlag.h"
24#include "ModelIgnoreFlags.h"
25#include <G3D/AABox.h>
26#include <G3D/Ray.h>
27#include <G3D/Vector3.h>
28
29namespace VMAP
30{
31 enum class ModelFlags : uint32
32 {
33 None = 0x0,
34 IsM2 = 0x1
35 };
36
38
45
47 {
48 public:
49 WmoLiquid(uint32 width, uint32 height, G3D::Vector3 const& corner, uint32 type);
50 WmoLiquid(WmoLiquid const& other);
51 ~WmoLiquid();
52 WmoLiquid& operator=(WmoLiquid const& other);
53 bool GetLiquidHeight(G3D::Vector3 const& pos, float& liqHeight) const;
54 uint32 GetType() const { return iType; }
55 float *GetHeightStorage() { return iHeight; }
56 uint8 *GetFlagsStorage() { return iFlags; }
57 float const* GetHeightStorage() const { return iHeight; }
58 uint8 const* GetFlagsStorage() const { return iFlags; }
59 uint32 GetFileSize();
60 bool writeToFile(FILE* wf);
61 static bool readFromFile(FILE* rf, WmoLiquid* &liquid);
62 void getPosInfo(uint32 &tilesX, uint32 &tilesY, G3D::Vector3 &corner) const;
63 private:
64 WmoLiquid() : iTilesX(0), iTilesY(0), iCorner(), iType(0), iHeight(nullptr), iFlags(nullptr) { }
67 G3D::Vector3 iCorner;
69 float *iHeight;
71 };
72
75 {
76 public:
77 GroupModel() : iBound(G3D::AABox::empty()), iMogpFlags(0), iGroupWMOID(0), iLiquid(nullptr) { }
78 GroupModel(GroupModel const& other);
79 GroupModel(uint32 mogpFlags, uint32 groupWMOID, G3D::AABox const& bound):
80 iBound(bound), iMogpFlags(mogpFlags), iGroupWMOID(groupWMOID), iLiquid(nullptr) { }
81 ~GroupModel() { delete iLiquid; }
82
84 void setMeshData(std::vector<G3D::Vector3>&& vert, std::vector<MeshTriangle>&& tri);
85 void setLiquidData(WmoLiquid* liquid) { iLiquid = liquid; }
86 bool IntersectRay(const G3D::Ray &ray, float &distance, bool stopAtFirstHit) const;
87 enum InsideResult { INSIDE = 0, MAYBE_INSIDE = 1, ABOVE = 2, OUT_OF_BOUNDS = -1 };
88 InsideResult IsInsideObject(G3D::Ray const& ray, float& z_dist) const;
89 bool GetLiquidLevel(const G3D::Vector3 &pos, float &liqHeight) const;
90 uint32 GetLiquidType() const;
91 bool writeToFile(FILE* wf);
92 bool readFromFile(FILE* rf);
93 G3D::AABox const& GetBound() const { return iBound; }
94 G3D::AABox const& GetMeshTreeBound() const { return meshTree.bound(); }
95 uint32 GetMogpFlags() const { return iMogpFlags; }
96 uint32 GetWmoID() const { return iGroupWMOID; }
97 std::vector<G3D::Vector3> const& GetVertices() const { return vertices; }
98 std::vector<MeshTriangle> const& GetTriangles() const { return triangles; }
99 WmoLiquid const* GetLiquid() const { return iLiquid; }
100 protected:
101 G3D::AABox iBound;
102 uint32 iMogpFlags;// 0x8 outdor; 0x2000 indoor
104 std::vector<G3D::Vector3> vertices;
105 std::vector<MeshTriangle> triangles;
108 };
109
111 {
112 GroupModel const* hitModel = nullptr;
113 float distanceToModel = 0.0f;
115 };
116
119 {
120 public:
121 WorldModel(): Flags(ModelFlags::None), RootWMOID(0) { }
122
124 void setGroupModels(std::vector<GroupModel> &models);
125 void setFlags(ModelFlags flags) { Flags = flags; }
126 void setRootWmoID(uint32 id) { RootWMOID = id; }
127 bool IntersectRay(const G3D::Ray &ray, float &distance, bool stopAtFirstHit, ModelIgnoreFlags ignoreFlags) const;
128 bool GetLocationInfo(G3D::Vector3 const& p, G3D::Vector3 const& down, WorldModelLocationInfoQueryResult& info) const;
129 bool writeFile(const std::string &filename);
130 bool readFile(const std::string &filename);
131 bool IsM2() const { return Flags.HasFlag(ModelFlags::IsM2); }
132 std::vector<GroupModel> const& getGroupModels() const { return groupModels; }
133 protected:
136 std::vector<GroupModel> groupModels;
138 };
139} // namespace VMAP
140
141#endif // _WORLDMODEL_H
uint8_t uint8
Definition Define.h:156
#define TC_COMMON_API
Definition Define.h:99
int32_t int32
Definition Define.h:150
uint32_t uint32
Definition Define.h:154
uint16 flags
#define DEFINE_ENUM_FLAG(enumType)
Definition EnumFlag.h:26
std::vector< G3D::Vector3 > vertices
Definition WorldModel.h:104
GroupModel(uint32 mogpFlags, uint32 groupWMOID, G3D::AABox const &bound)
Definition WorldModel.h:79
uint32 GetMogpFlags() const
Definition WorldModel.h:95
std::vector< G3D::Vector3 > const & GetVertices() const
Definition WorldModel.h:97
WmoLiquid * iLiquid
Definition WorldModel.h:107
uint32 GetWmoID() const
Definition WorldModel.h:96
std::vector< MeshTriangle > triangles
Definition WorldModel.h:105
std::vector< MeshTriangle > const & GetTriangles() const
Definition WorldModel.h:98
G3D::AABox const & GetMeshTreeBound() const
Definition WorldModel.h:94
void setLiquidData(WmoLiquid *liquid)
Definition WorldModel.h:85
WmoLiquid const * GetLiquid() const
Definition WorldModel.h:99
G3D::AABox iBound
Definition WorldModel.h:101
G3D::AABox const & GetBound() const
Definition WorldModel.h:93
G3D::Vector3 iCorner
the lower corner
Definition WorldModel.h:67
WmoLiquid(uint32 width, uint32 height, G3D::Vector3 const &corner, uint32 type)
uint32 iType
liquid type
Definition WorldModel.h:68
uint8 const * GetFlagsStorage() const
Definition WorldModel.h:58
float * iHeight
(tilesX + 1)*(tilesY + 1) height values
Definition WorldModel.h:69
uint32 iTilesX
number of tiles in x direction, each
Definition WorldModel.h:65
float * GetHeightStorage()
Definition WorldModel.h:55
float const * GetHeightStorage() const
Definition WorldModel.h:57
uint32 GetType() const
Definition WorldModel.h:54
uint8 * iFlags
info if liquid tile is used
Definition WorldModel.h:70
uint8 * GetFlagsStorage()
Definition WorldModel.h:56
EnumFlag< ModelFlags > Flags
Definition WorldModel.h:134
void setRootWmoID(uint32 id)
Definition WorldModel.h:126
std::vector< GroupModel > const & getGroupModels() const
Definition WorldModel.h:132
void setFlags(ModelFlags flags)
Definition WorldModel.h:125
bool IsM2() const
Definition WorldModel.h:131
std::vector< GroupModel > groupModels
Definition WorldModel.h:136
ModelFlags
Definition WorldModel.h:32