30#include <G3D/Vector3.h>
36int CHECK_TREE_PERIOD = 200;
173 const G3D::Vector3& endPos,
float& maxDist)
const
175 float distance = maxDist;
184 const G3D::Vector3& endPos, G3D::Vector3& resultHit,
185 float modifyDist)
const
188 float maxDist = (endPos - startPos).magnitude();
190 ASSERT(maxDist < std::numeric_limits<float>::max());
192 if (maxDist < 1e-10f)
197 G3D::Vector3 dir = (endPos - startPos)/maxDist;
198 G3D::Ray ray(startPos, dir);
199 float dist = maxDist;
202 resultHit = startPos + dir * dist;
205 if ((resultHit - startPos).magnitude() > -modifyDist)
206 resultHit = resultHit + dir*modifyDist;
208 resultHit = startPos;
211 resultHit = resultHit + dir*modifyDist;
225 G3D::Vector3 v1(x1, y1, z1), v2(x2, y2, z2);
227 float maxDist = (v2 - v1).magnitude();
229 if (!G3D::fuzzyGt(maxDist, 0) )
232 G3D::Ray r(v1, (v2-v1) / maxDist);
241 G3D::Vector3 v(x, y, z);
242 G3D::Ray r(v, G3D::Vector3(0, 0, -1));
247 return v.z - maxSearchDist;
254 G3D::Vector3 v(x, y, z + 0.5f);
264 data.
liquidInfo.emplace(liquidType, liquidLevel);
RegularGrid2D< GameObjectModel, BIHWrap< GameObjectModel > > ParentTree
std::optional< T > Optional
Optional helper class to wrap optional values within.
bool contains(GameObjectModel const &) const
bool getAreaAndLiquidData(float x, float y, float z, uint32 phasemask, Optional< uint8 > reqLiquidType, VMAP::AreaAndLiquidData &data) const
bool getIntersectionTime(uint32 phasemask, const G3D::Ray &ray, const G3D::Vector3 &endPos, float &maxDist) const
bool isInLineOfSight(float x1, float y1, float z1, float x2, float y2, float z2, uint32 phasemask) const
void insert(GameObjectModel const &)
float getHeight(float x, float y, float z, float maxSearchDist, uint32 phasemask) const
bool getObjectHitPos(uint32 phasemask, const G3D::Vector3 &pPos1, const G3D::Vector3 &pPos2, G3D::Vector3 &pResultHitPos, float pModifyDist) const
void remove(GameObjectModel const &)
bool GetLocationInfo(G3D::Vector3 const &point, VMAP::LocationInfo &info, uint32 ph_mask) const
const G3D::AABox & getBounds() const
const G3D::Vector3 & getPosition() const
bool GetLiquidLevel(G3D::Vector3 const &point, VMAP::LocationInfo &info, float &liqHeight) const
bool intersectRay(const G3D::Ray &Ray, float &MaxDist, bool StopAtFirstHit, uint32 ph_mask, VMAP::ModelIgnoreFlags ignoreFlags) const
void intersectZAllignedRay(const G3D::Ray &ray, RayCallback &intersectCallback, float &max_dist)
void insert(const T &value)
bool contains(const T &value) const
void intersectRay(const G3D::Ray &ray, RayCallback &intersectCallback, float max_dist)
void remove(const T &value)
void intersectPoint(const G3D::Vector3 &point, IsectCallback &intersectCallback)
uint32 GetLiquidType() const
uint32 GetMogpFlags() const
static VMapManager2 * createOrGetVMapManager()
static void getBounds2(GameObjectModel const *g, G3D::AABox &out)
static void getBounds(GameObjectModel const &g, G3D::AABox &out)
void insert(Model const &mdl)
TimeTracker rebalance_timer
void remove(Model const &mdl)
void update(uint32 difftime)
bool operator()(G3D::Ray const &r, GameObjectModel const &obj, float &distance)
DynamicTreeIntersectionCallback(uint32 phasemask)
VMAP::LocationInfo _locationInfo
DynamicTreeLocationInfoCallback(uint32 phaseMask)
void operator()(G3D::Vector3 const &p, GameObjectModel const &obj)
VMAP::LocationInfo & GetLocationInfo()
GameObjectModel const * GetHitModel() const
GameObjectModel const * _hitModel
static size_t hashCode(GameObjectModel const &g)
static void getPosition(GameObjectModel const &g, G3D::Vector3 &p)
Optional< AreaInfo > areaInfo
Optional< LiquidInfo > liquidInfo
GroupModel const * hitModel