21#include <G3D/HashTrait.h>
22#include <G3D/Vector3.h>
34 struct GroupLocationInfo;
55 bool GetLiquidHeight(G3D::Vector3
const& pos,
float& liqHeight)
const;
60 bool writeToFile(FILE* wf);
61 static bool readFromFile(FILE* rf,
WmoLiquid* &liquid);
62 void getPosInfo(
uint32 &tilesX,
uint32 &tilesY, G3D::Vector3 &corner)
const;
64 WmoLiquid() : iTilesX(0), iTilesY(0), iCorner(), iType(0), iHeight(nullptr), iFlags(nullptr) { }
77 GroupModel() : iBound(), iMogpFlags(0), iGroupWMOID(0), iLiquid(nullptr) { }
80 iBound(bound), iMogpFlags(mogpFlags), iGroupWMOID(groupWMOID), iLiquid(nullptr) { }
84 void setMeshData(std::vector<G3D::Vector3> &vert, std::vector<MeshTriangle> &tri);
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; }
97 void getMeshData(std::vector<G3D::Vector3>& outVertices, std::vector<MeshTriangle>& outTriangles,
WmoLiquid*& liquid);
115 void setGroupModels(std::vector<GroupModel> &models);
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);
std::vector< G3D::Vector3 > vertices
GroupModel(uint32 mogpFlags, uint32 groupWMOID, G3D::AABox const &bound)
uint32 GetMogpFlags() const
std::vector< MeshTriangle > triangles
void setLiquidData(WmoLiquid *&liquid)
G3D::AABox const & GetMeshTreeBound() const
G3D::AABox const & GetBound() const
MeshTriangle(uint32 na, uint32 nb, uint32 nc)
G3D::Vector3 iCorner
the lower corner
WmoLiquid(uint32 width, uint32 height, G3D::Vector3 const &corner, uint32 type)
float * iHeight
(tilesX + 1)*(tilesY + 1) height values
uint32 iTilesX
number of tiles in x direction, each
float * GetHeightStorage()
uint8 * iFlags
info if liquid tile is used
uint8 * GetFlagsStorage()
void setRootWmoID(uint32 id)
std::vector< GroupModel > groupModels