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
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
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(G3D::AABox::empty()), 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; }
92 bool IntersectRay(const G3D::Ray &ray, float &distance, bool stopAtFirstHit) const;
93 enum InsideResult { INSIDE = 0, MAYBE_INSIDE = 1, ABOVE = 2, OUT_OF_BOUNDS = -1 };
94 InsideResult IsInsideObject(G3D::Ray const& ray, float& z_dist) const;
95 bool GetLiquidLevel(const G3D::Vector3 &pos, float &liqHeight) const;
96 uint32 GetLiquidType() const;
97 bool writeToFile(FILE* wf);
98 bool readFromFile(FILE* rf);
99 G3D::AABox const& GetBound() const { return iBound; }
100 G3D::AABox const& GetMeshTreeBound() const { return meshTree.bound(); }
101 uint32 GetMogpFlags() const { return iMogpFlags; }
102 uint32 GetWmoID() const { return iGroupWMOID; }
103 std::vector<G3D::Vector3> const& GetVertices() const { return vertices; }
104 std::vector<MeshTriangle> const& GetTriangles() const { return triangles; }
105 WmoLiquid const* GetLiquid() const { return iLiquid; }
106 protected:
107 G3D::AABox iBound;
108 uint32 iMogpFlags;// 0x8 outdor; 0x2000 indoor
110 std::vector<G3D::Vector3> vertices;
111 std::vector<MeshTriangle> triangles;
114 };
115
118 {
119 public:
120 WorldModel(): Flags(ModelFlags::None), RootWMOID(0) { }
121
123 void setGroupModels(std::vector<GroupModel> &models);
124 void setFlags(ModelFlags flags) { Flags = flags; }
125 void setRootWmoID(uint32 id) { RootWMOID = id; }
126 bool IntersectRay(const G3D::Ray &ray, float &distance, bool stopAtFirstHit, ModelIgnoreFlags ignoreFlags) const;
127 bool GetLocationInfo(const G3D::Vector3 &p, const G3D::Vector3 &down, float &dist, GroupLocationInfo& info) const;
128 bool writeFile(const std::string &filename);
129 bool readFile(const std::string &filename);
130 bool IsM2() const { return Flags.HasFlag(ModelFlags::IsM2); }
131 std::vector<GroupModel> const& getGroupModels() const { return groupModels; }
132 protected:
135 std::vector<GroupModel> groupModels;
137 };
138} // namespace VMAP
139
140#endif // _WORLDMODEL_H
uint8_t uint8
Definition Define.h:156
#define TC_COMMON_API
Definition Define.h:99
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:110
GroupModel(uint32 mogpFlags, uint32 groupWMOID, G3D::AABox const &bound)
Definition WorldModel.h:85
uint32 GetMogpFlags() const
Definition WorldModel.h:101
std::vector< G3D::Vector3 > const & GetVertices() const
Definition WorldModel.h:103
WmoLiquid * iLiquid
Definition WorldModel.h:113
uint32 GetWmoID() const
Definition WorldModel.h:102
std::vector< MeshTriangle > triangles
Definition WorldModel.h:111
std::vector< MeshTriangle > const & GetTriangles() const
Definition WorldModel.h:104
G3D::AABox const & GetMeshTreeBound() const
Definition WorldModel.h:100
void setLiquidData(WmoLiquid *liquid)
Definition WorldModel.h:91
WmoLiquid const * GetLiquid() const
Definition WorldModel.h:105
G3D::AABox iBound
Definition WorldModel.h:107
G3D::AABox const & GetBound() const
Definition WorldModel.h:99
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
EnumFlag< ModelFlags > Flags
Definition WorldModel.h:133
void setRootWmoID(uint32 id)
Definition WorldModel.h:125
std::vector< GroupModel > const & getGroupModels() const
Definition WorldModel.h:131
void setFlags(ModelFlags flags)
Definition WorldModel.h:124
bool IsM2() const
Definition WorldModel.h:130
std::vector< GroupModel > groupModels
Definition WorldModel.h:135
ModelFlags
Definition WorldModel.h:38