AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
StaticVMapCollisionData Class Reference

#include "MapCollisionData.h"

Public Member Functions

 StaticVMapCollisionData (uint32 mapId)
 
bool isInLineOfSight (float x1, float y1, float z1, float x2, float y2, float z2, VMAP::ModelIgnoreFlags ignoreFlags) const
 
bool GetObjectHitPos (float x1, float y1, float z1, float x2, float y2, float z2, float &rx, float &ry, float &rz, float modifyDist) const
 
float getHeight (float x, float y, float z, float maxSearchDist) const
 
bool GetAreaAndLiquidData (float x, float y, float z, Optional< uint8 > reqLiquidType, VMAP::AreaAndLiquidData &data) const
 

Protected Attributes

std::shared_ptr< VMAP::StaticMapTree_staticTree
 
uint32 _mapId
 

Friends

class MapCollisionData
 

Detailed Description

Constructor & Destructor Documentation

◆ StaticVMapCollisionData()

StaticVMapCollisionData::StaticVMapCollisionData ( uint32  mapId)
inline
39: _mapId(mapId) {}
uint32 _mapId
Definition MapCollisionData.h:48

Member Function Documentation

◆ GetAreaAndLiquidData()

bool StaticVMapCollisionData::GetAreaAndLiquidData ( float  x,
float  y,
float  z,
Optional< uint8 reqLiquidType,
VMAP::AreaAndLiquidData data 
) const
137{
138 if (_staticTree)
139 {
141 G3D::Vector3 const pos = VMAP::VMapMgr2::convertPositionToInternalRep(x, y, z);
142 if (_staticTree->GetLocationInfo(pos, info))
143 {
144 data.floorZ = info.ground_Z;
146 {
147 uint32 liquidType = info.hitModel->GetLiquidType(); // entry from LiquidType.dbc
148 float liquidLevel;
149 if (!reqLiquidType || (GetLiquidFlags(liquidType) & *reqLiquidType))
150 if (info.hitInstance->GetLiquidLevel(pos, info, liquidLevel))
151 data.liquidInfo.emplace(liquidType, liquidLevel);
152 }
153
155 data.areaInfo.emplace(info.hitModel->GetWmoID(), info.hitInstance->adtId, info.rootId, info.hitModel->GetMogpFlags(), info.hitInstance->ID);
156 return true;
157 }
158 }
159
160 return false;
161}
uint32 GetLiquidFlags(uint32 liquidType)
Definition DBCStores.cpp:834
std::uint32_t uint32
Definition Define.h:107
static bool IsVMAPDisabledFor(uint32 entry, uint8 flags)
Definition DisableMgr.cpp:440
std::shared_ptr< VMAP::StaticMapTree > _staticTree
Definition MapCollisionData.h:47
uint32 GetLiquidType() const
Definition WorldModel.cpp:505
uint32 GetMogpFlags() const
Definition WorldModel.h:93
uint32 GetWmoID() const
Definition WorldModel.h:94
bool GetLiquidLevel(const G3D::Vector3 &p, LocationInfo &info, float &liqHeight) const
Definition ModelInstance.cpp:110
uint16 adtId
Definition ModelInstance.h:47
uint32 ID
Definition ModelInstance.h:48
static G3D::Vector3 convertPositionToInternalRep(float x, float y, float z)
Definition VMapMgr2.cpp:41
@ VMAP_DISABLE_LIQUIDSTATUS
Definition VMapMgr2.h:51
@ VMAP_DISABLE_AREAFLAG
Definition VMapMgr2.h:48
Optional< AreaInfo > areaInfo
Definition IVMapMgr.h:77
Optional< LiquidInfo > liquidInfo
Definition IVMapMgr.h:78
float floorZ
Definition IVMapMgr.h:76
Definition MapTree.h:40
float ground_Z
Definition MapTree.h:44
const GroupModel * hitModel
Definition MapTree.h:43
const ModelInstance * hitInstance
Definition MapTree.h:42
int32 rootId
Definition MapTree.h:45

References _mapId, _staticTree, VMAP::ModelSpawn::adtId, VMAP::AreaAndLiquidData::areaInfo, VMAP::VMapMgr2::convertPositionToInternalRep(), VMAP::AreaAndLiquidData::floorZ, GetLiquidFlags(), VMAP::ModelInstance::GetLiquidLevel(), VMAP::GroupModel::GetLiquidType(), VMAP::GroupModel::GetMogpFlags(), VMAP::GroupModel::GetWmoID(), VMAP::LocationInfo::ground_Z, VMAP::LocationInfo::hitInstance, VMAP::LocationInfo::hitModel, VMAP::ModelSpawn::ID, DisableMgr::IsVMAPDisabledFor(), VMAP::AreaAndLiquidData::liquidInfo, VMAP::LocationInfo::rootId, VMAP::VMAP_DISABLE_AREAFLAG, and VMAP::VMAP_DISABLE_LIQUIDSTATUS.

Referenced by Map::GetAreaInfo(), Map::GetFullTerrainStatusForPosition(), and Map::GetLiquidData().

◆ getHeight()

float StaticVMapCollisionData::getHeight ( float  x,
float  y,
float  z,
float  maxSearchDist 
) const
117{
118#if defined(ENABLE_VMAP_CHECKS)
120#endif
121 {
122 if (_staticTree)
123 {
124 G3D::Vector3 const pos = VMAP::VMapMgr2::convertPositionToInternalRep(x, y, z);
125 float height = _staticTree->getHeight(pos, maxSearchDist);
126 if (height >= G3D::finf())
127 return VMAP_INVALID_HEIGHT_VALUE; // No height
128
129 return height;
130 }
131 }
132
134}
#define VMAP_INVALID_HEIGHT_VALUE
Definition IVMapMgr.h:51
@ CONFIG_VMAP_ENABLE_HEIGHT
Definition WorldConfig.h:84
#define sWorld
Definition World.h:316
@ VMAP_DISABLE_HEIGHT
Definition VMapMgr2.h:49

References _mapId, _staticTree, CONFIG_VMAP_ENABLE_HEIGHT, VMAP::VMapMgr2::convertPositionToInternalRep(), DisableMgr::IsVMAPDisabledFor(), sWorld, VMAP::VMAP_DISABLE_HEIGHT, and VMAP_INVALID_HEIGHT_VALUE.

Referenced by Map::GetHeight().

◆ GetObjectHitPos()

bool StaticVMapCollisionData::GetObjectHitPos ( float  x1,
float  y1,
float  z1,
float  x2,
float  y2,
float  z2,
float &  rx,
float &  ry,
float &  rz,
float  modifyDist 
) const
90{
91#if defined(ENABLE_VMAP_CHECKS)
93#endif
94 {
95 if (_staticTree)
96 {
97 G3D::Vector3 const pos1 = VMAP::VMapMgr2::convertPositionToInternalRep(x1, y1, z1);
98 G3D::Vector3 const pos2 = VMAP::VMapMgr2::convertPositionToInternalRep(x2, y2, z2);
99 G3D::Vector3 resultPos;
100 bool result = _staticTree->GetObjectHitPos(pos1, pos2, resultPos, modifyDist);
101 resultPos = VMAP::VMapMgr2::convertPositionToInternalRep(resultPos.x, resultPos.y, resultPos.z);
102 rx = resultPos.x;
103 ry = resultPos.y;
104 rz = resultPos.z;
105 return result;
106 }
107 }
108
109 rx = x2;
110 ry = y2;
111 rz = z2;
112
113 return false;
114}
@ CONFIG_VMAP_ENABLE_LOS
Definition WorldConfig.h:83
@ VMAP_DISABLE_LOS
Definition VMapMgr2.h:50

References _mapId, _staticTree, CONFIG_VMAP_ENABLE_LOS, VMAP::VMapMgr2::convertPositionToInternalRep(), DisableMgr::IsVMAPDisabledFor(), sWorld, and VMAP::VMAP_DISABLE_LOS.

Referenced by Map::CheckCollisionAndGetValidCoords(), spell_entropius_black_hole_effect::RaycastToObstacle(), and Spell::SelectImplicitCasterDestTargets().

◆ isInLineOfSight()

bool StaticVMapCollisionData::isInLineOfSight ( float  x1,
float  y1,
float  z1,
float  x2,
float  y2,
float  z2,
VMAP::ModelIgnoreFlags  ignoreFlags 
) const
72{
73#if defined(ENABLE_VMAP_CHECKS)
75 return true;
76#endif
77
78 if (!_staticTree)
79 return true;
80
81 G3D::Vector3 const pos1 = VMAP::VMapMgr2::convertPositionToInternalRep(x1, y1, z1);
82 G3D::Vector3 const pos2 = VMAP::VMapMgr2::convertPositionToInternalRep(x2, y2, z2);
83 if (pos1 != pos2)
84 return _staticTree->isInLineOfSight(pos1, pos2, ignoreFlags);
85
86 return true;
87}

References _mapId, _staticTree, CONFIG_VMAP_ENABLE_LOS, VMAP::VMapMgr2::convertPositionToInternalRep(), DisableMgr::IsVMAPDisabledFor(), sWorld, and VMAP::VMAP_DISABLE_LOS.

Referenced by Map::isInLineOfSight().

Friends And Related Symbol Documentation

◆ MapCollisionData

friend class MapCollisionData
friend

Member Data Documentation

◆ _mapId

uint32 StaticVMapCollisionData::_mapId
protected

◆ _staticTree


The documentation for this class was generated from the following files: