Core/GameObjects: Skip gameobjects with M2 models when searching for area info (perf optimization, they dont have any area info)

This commit is contained in:
Shauren
2018-04-08 00:04:20 +02:00
parent d510bb5764
commit dad56a224d
2 changed files with 5 additions and 2 deletions

View File

@@ -145,6 +145,7 @@ bool GameObjectModel::initialize(std::unique_ptr<GameObjectModelOwnerBase> model
#endif
owner = std::move(modelOwner);
isWmo = it->second.isWmo;
return true;
}
@@ -187,7 +188,7 @@ bool GameObjectModel::intersectRay(G3D::Ray const& ray, float& maxDist, bool sto
void GameObjectModel::intersectPoint(G3D::Vector3 const& point, VMAP::AreaInfo& info, PhaseShift const& phaseShift) const
{
if (!isCollisionEnabled() || !owner->IsSpawned())
if (!isCollisionEnabled() || !owner->IsSpawned() || !isMapObject())
return;
if (!owner->IsInPhase(phaseShift))

View File

@@ -54,7 +54,7 @@ public:
class TC_COMMON_API GameObjectModel /*, public Intersectable*/
{
GameObjectModel() : _collisionEnabled(false), iInvScale(0), iScale(0), iModel(nullptr) { }
GameObjectModel() : _collisionEnabled(false), iInvScale(0), iScale(0), iModel(nullptr), isWmo(false) { }
public:
std::string name;
@@ -67,6 +67,7 @@ public:
/* Enables/disables collision */
void enableCollision(bool enable) { _collisionEnabled = enable; }
bool isCollisionEnabled() const { return _collisionEnabled; }
bool isMapObject() const { return isWmo; }
bool intersectRay(G3D::Ray const& ray, float& maxDist, bool stopAtFirstHit, PhaseShift const& phaseShift) const;
void intersectPoint(G3D::Vector3 const& point, VMAP::AreaInfo& info, PhaseShift const& phaseShift) const;
@@ -86,6 +87,7 @@ private:
float iScale;
VMAP::WorldModel* iModel;
std::unique_ptr<GameObjectModelOwnerBase> owner;
bool isWmo;
};
TC_COMMON_API void LoadGameObjectModelList(std::string const& dataPath);