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/HashTrait.h>
22#include <G3D/Vector3.h>
23#include <G3D/AABox.h>
24#include <G3D/Ray.h>
26
27#include "Define.h"
28
29namespace VMAP
30{
31 class TreeNode;
32 struct AreaInfo;
33 struct LocationInfo;
34 struct GroupLocationInfo;
35 enum class ModelIgnoreFlags : uint32;
36
38 {
39 public:
40 MeshTriangle() : idx0(0), idx1(0), idx2(0) { }
41 MeshTriangle(uint32 na, uint32 nb, uint32 nc): idx0(na), idx1(nb), idx2(nc) { }
42
46 };
47
49 {
50 public:
51 WmoLiquid(uint32 width, uint32 height, G3D::Vector3 const& corner, uint32 type);
52 WmoLiquid(WmoLiquid const& other);
53 ~WmoLiquid();
54 WmoLiquid& operator=(WmoLiquid const& other);
55 bool GetLiquidHeight(G3D::Vector3 const& pos, float& liqHeight) const;
56 uint32 GetType() const { return iType; }
57 float *GetHeightStorage() { return iHeight; }
58 uint8 *GetFlagsStorage() { 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(), 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; liquid = nullptr; }
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 void getMeshData(std::vector<G3D::Vector3>& outVertices, std::vector<MeshTriangle>& outTriangles, WmoLiquid*& liquid);
98 protected:
99 G3D::AABox iBound;
100 uint32 iMogpFlags;// 0x8 outdor; 0x2000 indoor
102 std::vector<G3D::Vector3> vertices;
103 std::vector<MeshTriangle> triangles;
106 };
107
110 {
111 public:
112 WorldModel(): Flags(0), RootWMOID(0) { }
113
115 void setGroupModels(std::vector<GroupModel> &models);
116 void setRootWmoID(uint32 id) { RootWMOID = id; }
117 bool IntersectRay(const G3D::Ray &ray, float &distance, bool stopAtFirstHit, ModelIgnoreFlags ignoreFlags) const;
118 bool GetLocationInfo(const G3D::Vector3 &p, const G3D::Vector3 &down, float &dist, GroupLocationInfo& info) const;
119 bool writeFile(const std::string &filename);
120 bool readFile(const std::string &filename);
121 void getGroupModels(std::vector<GroupModel>& outGroupModels);
123 protected:
125 std::vector<GroupModel> groupModels;
127 };
128} // namespace VMAP
129
130#endif // _WORLDMODEL_H
uint8_t uint8
Definition Define.h:135
#define TC_COMMON_API
Definition Define.h:96
uint32_t uint32
Definition Define.h:133
std::vector< G3D::Vector3 > vertices
Definition WorldModel.h:102
GroupModel(uint32 mogpFlags, uint32 groupWMOID, G3D::AABox const &bound)
Definition WorldModel.h:79
uint32 GetMogpFlags() const
Definition WorldModel.h:95
WmoLiquid * iLiquid
Definition WorldModel.h:105
uint32 GetWmoID() const
Definition WorldModel.h:96
std::vector< MeshTriangle > triangles
Definition WorldModel.h:103
void setLiquidData(WmoLiquid *&liquid)
Definition WorldModel.h:85
G3D::AABox const & GetMeshTreeBound() const
Definition WorldModel.h:94
G3D::AABox iBound
Definition WorldModel.h:99
G3D::AABox const & GetBound() const
Definition WorldModel.h:93
MeshTriangle(uint32 na, uint32 nb, uint32 nc)
Definition WorldModel.h:41
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
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:57
uint32 GetType() const
Definition WorldModel.h:56
uint8 * iFlags
info if liquid tile is used
Definition WorldModel.h:70
uint8 * GetFlagsStorage()
Definition WorldModel.h:58
void setRootWmoID(uint32 id)
Definition WorldModel.h:116
std::vector< GroupModel > groupModels
Definition WorldModel.h:125