Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
WorldModel.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef _WORLDMODEL_H
7#define _WORLDMODEL_H
8
9#include <G3D/HashTrait.h>
10#include <G3D/Vector3.h>
11#include <G3D/AABox.h>
12#include <G3D/Ray.h>
14
15#include "Define.h"
16
17namespace VMAP
18{
19 class TreeNode;
20 struct AreaInfo;
21 struct LocationInfo;
22
24 {
25 public:
26 MeshTriangle() : idx0(0), idx1(0), idx2(0) { }
27 MeshTriangle(uint32 na, uint32 nb, uint32 nc): idx0(na), idx1(nb), idx2(nc) { }
28
32 };
33
35 {
36 public:
37 WmoLiquid(uint32 width, uint32 height, const G3D::Vector3 &corner, uint32 type);
38 WmoLiquid(const WmoLiquid &other);
39 ~WmoLiquid();
40 WmoLiquid& operator=(const WmoLiquid &other);
41 bool GetLiquidHeight(const G3D::Vector3 &pos, float &liqHeight) const;
42 uint32 GetType() const { return iType; }
43 float *GetHeightStorage() { return iHeight; }
46 bool writeToFile(FILE* wf);
47 static bool readFromFile(FILE* rf, WmoLiquid* &liquid);
48 private:
49 WmoLiquid() : iTilesX(0), iTilesY(0), iCorner(), iType(0), iHeight(NULL), iFlags(NULL) { }
52 G3D::Vector3 iCorner;
54 float *iHeight;
56 public:
57 void getPosInfo(uint32 &tilesX, uint32 &tilesY, G3D::Vector3 &corner) const;
58 };
59
62 {
63 public:
65 GroupModel(const GroupModel &other);
66 GroupModel(uint32 mogpFlags, uint32 groupWMOID, const G3D::AABox &bound):
67 iBound(bound), iMogpFlags(mogpFlags), iGroupWMOID(groupWMOID), iLiquid(NULL) { }
68 ~GroupModel() { delete iLiquid; }
69
71 void setMeshData(std::vector<G3D::Vector3> &vert, std::vector<MeshTriangle> &tri);
72 void setLiquidData(WmoLiquid*& liquid) { iLiquid = liquid; liquid = NULL; }
73 bool IntersectRay(const G3D::Ray &ray, float &distance, bool stopAtFirstHit) const;
74 bool IsInsideObject(const G3D::Vector3 &pos, const G3D::Vector3 &down, float &z_dist) const;
75 bool GetLiquidLevel(const G3D::Vector3 &pos, float &liqHeight) const;
76 uint32 GetLiquidType() const;
77 bool writeToFile(FILE* wf);
78 bool readFromFile(FILE* rf);
79 const G3D::AABox& GetBound() const { return iBound; }
80 uint32 GetMogpFlags() const { return iMogpFlags; }
81 uint32 GetWmoID() const { return iGroupWMOID; }
82 protected:
83 G3D::AABox iBound;
84 uint32 iMogpFlags;// 0x8 outdor; 0x2000 indoor
86 std::vector<G3D::Vector3> vertices;
87 std::vector<MeshTriangle> triangles;
90 public:
91 void getMeshData(std::vector<G3D::Vector3> &vertices, std::vector<MeshTriangle> &triangles, WmoLiquid* &liquid);
92 };
93
95 {
96 public:
98
100 void setGroupModels(std::vector<GroupModel> &models);
101 void setRootWmoID(uint32 id) { RootWMOID = id; }
102 bool IntersectRay(const G3D::Ray &ray, float &distance, bool stopAtFirstHit) const;
103 bool IntersectPoint(const G3D::Vector3 &p, const G3D::Vector3 &down, float &dist, AreaInfo &info) const;
104 bool GetLocationInfo(const G3D::Vector3 &p, const G3D::Vector3 &down, float &dist, LocationInfo &info) const;
105 bool writeFile(const std::string &filename);
106 bool readFile(const std::string &filename);
107 protected:
109 std::vector<GroupModel> groupModels;
111 public:
112 void getGroupModels(std::vector<GroupModel> &groupModels);
113 };
114} // namespace VMAP
115
116#endif // _WORLDMODEL_H
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::vector< G3D::Vector3 > vertices
Definition WorldModel.h:86
uint32 GetLiquidType() const
bool readFromFile(FILE *rf)
uint32 GetMogpFlags() const
Definition WorldModel.h:80
void getMeshData(std::vector< G3D::Vector3 > &vertices, std::vector< MeshTriangle > &triangles, WmoLiquid *&liquid)
WmoLiquid * iLiquid
Definition WorldModel.h:89
uint32 GetWmoID() const
Definition WorldModel.h:81
std::vector< MeshTriangle > triangles
Definition WorldModel.h:87
bool GetLiquidLevel(const G3D::Vector3 &pos, float &liqHeight) const
bool IntersectRay(const G3D::Ray &ray, float &distance, bool stopAtFirstHit) const
void setLiquidData(WmoLiquid *&liquid)
Definition WorldModel.h:72
GroupModel(uint32 mogpFlags, uint32 groupWMOID, const G3D::AABox &bound)
Definition WorldModel.h:66
bool writeToFile(FILE *wf)
const G3D::AABox & GetBound() const
Definition WorldModel.h:79
void setMeshData(std::vector< G3D::Vector3 > &vert, std::vector< MeshTriangle > &tri)
pass mesh data to object and create BIH. Passed vectors get get swapped with old geometry!
G3D::AABox iBound
Definition WorldModel.h:83
bool IsInsideObject(const G3D::Vector3 &pos, const G3D::Vector3 &down, float &z_dist) const
MeshTriangle(uint32 na, uint32 nb, uint32 nc)
Definition WorldModel.h:27
WmoLiquid(uint32 width, uint32 height, const G3D::Vector3 &corner, uint32 type)
bool GetLiquidHeight(const G3D::Vector3 &pos, float &liqHeight) const
G3D::Vector3 iCorner
the lower corner
Definition WorldModel.h:52
void getPosInfo(uint32 &tilesX, uint32 &tilesY, G3D::Vector3 &corner) const
uint32 iType
liquid type
Definition WorldModel.h:53
uint32 GetFileSize()
float * iHeight
(tilesX + 1)*(tilesY + 1) height values
Definition WorldModel.h:54
uint32 iTilesX
number of tiles in x direction, each
Definition WorldModel.h:50
float * GetHeightStorage()
Definition WorldModel.h:43
uint32 GetType() const
Definition WorldModel.h:42
uint8 * iFlags
info if liquid tile is used
Definition WorldModel.h:55
WmoLiquid & operator=(const WmoLiquid &other)
static bool readFromFile(FILE *rf, WmoLiquid *&liquid)
uint8 * GetFlagsStorage()
Definition WorldModel.h:44
bool writeToFile(FILE *wf)
void getGroupModels(std::vector< GroupModel > &groupModels)
bool GetLocationInfo(const G3D::Vector3 &p, const G3D::Vector3 &down, float &dist, LocationInfo &info) const
void setRootWmoID(uint32 id)
Definition WorldModel.h:101
bool IntersectRay(const G3D::Ray &ray, float &distance, bool stopAtFirstHit) const
bool readFile(const std::string &filename)
void setGroupModels(std::vector< GroupModel > &models)
pass group models to WorldModel and create BIH. Passed vector is swapped with old geometry!
bool IntersectPoint(const G3D::Vector3 &p, const G3D::Vector3 &down, float &dist, AreaInfo &info) const
bool writeFile(const std::string &filename)
std::vector< GroupModel > groupModels
Definition WorldModel.h:109