30#include <G3D/Vector3.h>
36int CHECK_TREE_PERIOD = 200;
178 float distance = maxDist;
189 float maxDist = (endPos - startPos).magnitude();
191 ASSERT(maxDist < std::numeric_limits<float>::max());
193 if (maxDist < 1e-10f)
195 resultHitPos = endPos;
198 G3D::Vector3 dir = (endPos - startPos)/maxDist;
199 G3D::Ray ray(startPos, dir);
200 float dist = maxDist;
203 resultHitPos = startPos + dir * dist;
206 if ((resultHitPos - startPos).magnitude() > -modifyDist)
207 resultHitPos += dir * modifyDist;
209 resultHitPos = startPos;
212 resultHitPos += dir * modifyDist;
218 resultHitPos = endPos;
226 float maxDist = (endPos - startPos).magnitude();
228 if (!G3D::fuzzyGt(maxDist, 0) )
231 G3D::Ray r(startPos, (endPos - startPos) / maxDist);
235 return !callback.
didHit();
240 G3D::Vector3 v(x, y, z);
241 G3D::Ray r(v, G3D::Vector3(0, 0, -1));
246 return v.z - maxSearchDist;
253 G3D::Vector3 v(x, y, z + 0.5f);
263 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 getIntersectionTime(G3D::Ray const &ray, G3D::Vector3 const &endPos, PhaseShift const &phaseShift, float &maxDist) const
bool isInLineOfSight(G3D::Vector3 const &startPos, G3D::Vector3 const &endPos, PhaseShift const &phaseShift) const
void insert(GameObjectModel const &)
bool getObjectHitPos(G3D::Vector3 const &startPos, G3D::Vector3 const &endPos, G3D::Vector3 &resultHitPos, float modifyDist, PhaseShift const &phaseShift) const
float getHeight(float x, float y, float z, float maxSearchDist, PhaseShift const &phaseShift) const
bool getAreaAndLiquidData(float x, float y, float z, PhaseShift const &phaseShift, Optional< uint8 > reqLiquidType, VMAP::AreaAndLiquidData &data) const
void remove(GameObjectModel const &)
uint8 GetNameSetId() const
const G3D::AABox & getBounds() const
const G3D::Vector3 & getPosition() const
bool intersectRay(G3D::Ray const &ray, float &maxDist, bool stopAtFirstHit, PhaseShift const &phaseShift, VMAP::ModelIgnoreFlags ignoreFlags) const
bool GetLocationInfo(G3D::Vector3 const &point, VMAP::LocationInfo &info, PhaseShift const &phaseShift) const
bool GetLiquidLevel(G3D::Vector3 const &point, VMAP::LocationInfo &info, float &liqHeight) 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)
PhaseShift const & _phaseShift
DynamicTreeIntersectionCallback(PhaseShift const &phaseShift)
VMAP::LocationInfo _locationInfo
DynamicTreeLocationInfoCallback(PhaseShift const &phaseShift)
void operator()(G3D::Vector3 const &p, GameObjectModel const &obj)
VMAP::LocationInfo & GetLocationInfo()
GameObjectModel const * GetHitModel() const
PhaseShift const & _phaseShift
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