TrinityCore
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
21#include <G3D/Vector3.h>
22#include <G3D/AABox.h>
23#include <G3D/Ray.h>
25
26#include "Define.h"
27#include "EnumFlag.h"
28
29namespace VMAP
30{
31 class TreeNode;
32 struct AreaInfo;
33 struct LocationInfo;
34 struct GroupLocationInfo;
35 enum class ModelIgnoreFlags : uint32;
36
37 enum class ModelFlags : uint32
38 {
39 None = 0x0,
40 IsM2 = 0x1
41 };
42
44
46 {
50 };
51
53 {
54 public:
55 WmoLiquid(uint32 width, uint32 height, G3D::Vector3 const& corner, uint32 type);
56 WmoLiquid(WmoLiquid const& other);
57 ~WmoLiquid();
58 WmoLiquid& operator=(WmoLiquid const& other);
59 bool GetLiquidHeight(G3D::Vector3 const& pos, float& liqHeight) const;
60 uint32 GetType() const { return iType; }
61 float *GetHeightStorage() { return iHeight; }
62 uint8 *GetFlagsStorage() { return iFlags; }
63 float const* GetHeightStorage() const { return iHeight; }
64 uint8 const* GetFlagsStorage() const { return iFlags; }
65 uint32 GetFileSize();
66 bool writeToFile(FILE* wf);
67 static bool readFromFile(FILE* rf, WmoLiquid* &liquid);
68 void getPosInfo(uint32 &tilesX, uint32 &tilesY, G3D::Vector3 &corner) const;
69 private:
70 WmoLiquid() : iTilesX(0), iTilesY(0), iCorner(), iType(0), iHeight(nullptr), iFlags(nullptr) { }
73 G3D::Vector3 iCorner;
75 float *iHeight;
77 };
78
81 {
82 public:
83 GroupModel() : iBound(), iMogpFlags(0), iGroupWMOID(0), iLiquid(nullptr) { }
84 GroupModel(GroupModel const& other);
85 GroupModel(uint32 mogpFlags, uint32 groupWMOID, G3D::AABox const& bound):
86 iBound(bound), iMogpFlags(mogpFlags), iGroupWMOID(groupWMOID), iLiquid(nullptr) { }
87 ~GroupModel() { delete iLiquid; }
88
90 void setMeshData(std::vector<G3D::Vector3> &vert, std::vector<MeshTriangle> &tri);
91 void setLiquidData(WmoLiquid*& liquid) { iLiquid = liquid; liquid = nullptr; }
92 bool IntersectRay(const G3D::Ray &ray, float &distance, bool stopAtFirstHit) const;
93 bool IsInsideObject(const G3D::Vector3 &pos, const G3D::Vector3 &down, float &z_dist) const;
94 bool GetLiquidLevel(const G3D::Vector3 &pos, float &liqHeight) const;
95 uint32 GetLiquidType() const;
96 bool writeToFile(FILE* wf);
97 bool readFromFile(FILE* rf);
98 const G3D::AABox& GetBound() const { return iBound; }
99 uint32 GetMogpFlags() const { return iMogpFlags; }
100 uint32 GetWmoID() const { return iGroupWMOID; }
101 std::vector<G3D::Vector3> const& GetVertices() const { return vertices; }
102 std::vector<MeshTriangle> const& GetTriangles() const { return triangles; }
103 WmoLiquid const* GetLiquid() const { return iLiquid; }
104 protected:
105 G3D::AABox iBound;
106 uint32 iMogpFlags;// 0x8 outdor; 0x2000 indoor
108 std::vector<G3D::Vector3> vertices;
109 std::vector<MeshTriangle> triangles;
112 };
113
116 {
117 public:
118 WorldModel(): Flags(ModelFlags::None), RootWMOID(0) { }
119
121 void setGroupModels(std::vector<GroupModel> &models);
122 void setFlags(ModelFlags flags) { Flags = flags; }
123 void setRootWmoID(uint32 id) { RootWMOID = id; }
124 bool IntersectRay(const G3D::Ray &ray, float &distance, bool stopAtFirstHit, ModelIgnoreFlags ignoreFlags) const;
125 bool GetLocationInfo(const G3D::Vector3 &p, const G3D::Vector3 &down, float &dist, GroupLocationInfo& info) const;
126 bool writeFile(const std::string &filename);
127 bool readFile(const std::string &filename);
128 bool IsM2() const { return Flags.HasFlag(ModelFlags::IsM2); }
129 std::vector<GroupModel> const& getGroupModels() const { return groupModels; }
130 std::string const& GetName() const { return name; }
131 void SetName(std::string newName) { name = std::move(newName); }
132 protected:
135 std::vector<GroupModel> groupModels;
137 std::string name;
138 };
139} // namespace VMAP
140
141#endif // _WORLDMODEL_H
uint8_t uint8
Definition: Define.h:144
#define TC_COMMON_API
Definition: Define.h:99
uint32_t uint32
Definition: Define.h:142
uint16 flags
Definition: DisableMgr.cpp:49
std::vector< G3D::Vector3 > vertices
Definition: WorldModel.h:108
GroupModel(uint32 mogpFlags, uint32 groupWMOID, G3D::AABox const &bound)
Definition: WorldModel.h:85
uint32 GetMogpFlags() const
Definition: WorldModel.h:99
std::vector< G3D::Vector3 > const & GetVertices() const
Definition: WorldModel.h:101
WmoLiquid * iLiquid
Definition: WorldModel.h:111
uint32 GetWmoID() const
Definition: WorldModel.h:100
std::vector< MeshTriangle > triangles
Definition: WorldModel.h:109
std::vector< MeshTriangle > const & GetTriangles() const
Definition: WorldModel.h:102
void setLiquidData(WmoLiquid *&liquid)
Definition: WorldModel.h:91
const G3D::AABox & GetBound() const
Definition: WorldModel.h:98
uint32 iGroupWMOID
Definition: WorldModel.h:107
WmoLiquid const * GetLiquid() const
Definition: WorldModel.h:103
G3D::AABox iBound
Definition: WorldModel.h:105
uint32 iTilesY
Definition: WorldModel.h:72
G3D::Vector3 iCorner
the lower corner
Definition: WorldModel.h:73
WmoLiquid(uint32 width, uint32 height, G3D::Vector3 const &corner, uint32 type)
uint32 iType
liquid type
Definition: WorldModel.h:74
uint8 const * GetFlagsStorage() const
Definition: WorldModel.h:64
float * iHeight
(tilesX + 1)*(tilesY + 1) height values
Definition: WorldModel.h:75
uint32 iTilesX
number of tiles in x direction, each
Definition: WorldModel.h:71
float * GetHeightStorage()
Definition: WorldModel.h:61
float const * GetHeightStorage() const
Definition: WorldModel.h:63
uint32 GetType() const
Definition: WorldModel.h:60
uint8 * iFlags
info if liquid tile is used
Definition: WorldModel.h:76
uint8 * GetFlagsStorage()
Definition: WorldModel.h:62
std::string name
Definition: WorldModel.h:137
EnumFlag< ModelFlags > Flags
Definition: WorldModel.h:133
void setRootWmoID(uint32 id)
Definition: WorldModel.h:123
std::vector< GroupModel > const & getGroupModels() const
Definition: WorldModel.h:129
std::string const & GetName() const
Definition: WorldModel.h:130
void setFlags(ModelFlags flags)
Definition: WorldModel.h:122
void SetName(std::string newName)
Definition: WorldModel.h:131
bool IsM2() const
Definition: WorldModel.h:128
std::vector< GroupModel > groupModels
Definition: WorldModel.h:135
DEFINE_ENUM_FLAG(ModelFlags)
ModelFlags
Definition: WorldModel.h:38