21#include <G3D/Vector3.h>
34 struct GroupLocationInfo;
59 bool GetLiquidHeight(G3D::Vector3
const& pos,
float& liqHeight)
const;
66 bool writeToFile(FILE* wf);
67 static bool readFromFile(FILE* rf,
WmoLiquid* &liquid);
68 void getPosInfo(
uint32 &tilesX,
uint32 &tilesY, G3D::Vector3 &corner)
const;
70 WmoLiquid() : iTilesX(0), iTilesY(0), iCorner(), iType(0), iHeight(nullptr), iFlags(nullptr) { }
83 GroupModel() : iBound(), iMogpFlags(0), iGroupWMOID(0), iLiquid(nullptr) { }
86 iBound(bound), iMogpFlags(mogpFlags), iGroupWMOID(groupWMOID), iLiquid(nullptr) { }
90 void setMeshData(std::vector<G3D::Vector3> &vert, std::vector<MeshTriangle> &tri);
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; }
101 std::vector<G3D::Vector3>
const&
GetVertices()
const {
return vertices; }
102 std::vector<MeshTriangle>
const&
GetTriangles()
const {
return triangles; }
121 void setGroupModels(std::vector<GroupModel> &models);
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);
130 std::string
const&
GetName()
const {
return name; }
131 void SetName(std::string newName) { name = std::move(newName); }
std::vector< G3D::Vector3 > vertices
GroupModel(uint32 mogpFlags, uint32 groupWMOID, G3D::AABox const &bound)
uint32 GetMogpFlags() const
std::vector< G3D::Vector3 > const & GetVertices() const
std::vector< MeshTriangle > triangles
std::vector< MeshTriangle > const & GetTriangles() const
void setLiquidData(WmoLiquid *&liquid)
const G3D::AABox & GetBound() const
WmoLiquid const * GetLiquid() const
G3D::Vector3 iCorner
the lower corner
WmoLiquid(uint32 width, uint32 height, G3D::Vector3 const &corner, uint32 type)
uint8 const * GetFlagsStorage() const
float * iHeight
(tilesX + 1)*(tilesY + 1) height values
uint32 iTilesX
number of tiles in x direction, each
float * GetHeightStorage()
float const * GetHeightStorage() const
uint8 * iFlags
info if liquid tile is used
uint8 * GetFlagsStorage()
EnumFlag< ModelFlags > Flags
void setRootWmoID(uint32 id)
std::vector< GroupModel > const & getGroupModels() const
std::string const & GetName() const
void setFlags(ModelFlags flags)
void SetName(std::string newName)
std::vector< GroupModel > groupModels
DEFINE_ENUM_FLAG(ModelFlags)