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(
G3D::AABox::empty()), 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 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; }
103 std::vector<G3D::Vector3>
const&
GetVertices()
const {
return vertices; }
104 std::vector<MeshTriangle>
const&
GetTriangles()
const {
return triangles; }
123 void setGroupModels(std::vector<GroupModel> &models);
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);
#define DEFINE_ENUM_FLAG(enumType)
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
G3D::AABox const & GetMeshTreeBound() const
void setLiquidData(WmoLiquid *liquid)
WmoLiquid const * GetLiquid() const
G3D::AABox const & GetBound() 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
void setFlags(ModelFlags flags)
std::vector< GroupModel > groupModels