diff options
| author | Shauren <shauren.trinity@gmail.com> | 2015-07-25 15:37:35 +0200 |
|---|---|---|
| committer | DDuarte <dnpd.dd@gmail.com> | 2015-07-25 16:22:33 +0100 |
| commit | 130878c1a5d3f1ae42564a14fb6f0a19840f8749 (patch) | |
| tree | 73c09ca6da74f3763b2813df5e2f95fd4e91081e /src/server/game/Entities/GameObject | |
| parent | c40d3be6dc3cc54fce8296e1a6294a3d51eff4da (diff) | |
Core/Collision: Removed direct GameObject references from collision project
(cherry picked from commit a029f97c8231f7be188663d63f95f34dd1b4f9e1)
Conflicts:
src/server/collision/Models/GameObjectModel.cpp
Diffstat (limited to 'src/server/game/Entities/GameObject')
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 26 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.h | 1 |
2 files changed, 25 insertions, 2 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index d1e3d8a82af..bb0d1c79b1e 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -226,7 +226,7 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa SetDisplayId(goinfo->displayId); - m_model = GameObjectModel::Create(*this); + m_model = CreateModel(); // GAMEOBJECT_BYTES_1, index at 0, 1, 2 and 3 SetGoType(GameobjectTypes(goinfo->type)); SetGoState(go_state); @@ -2128,7 +2128,7 @@ void GameObject::UpdateModel() if (GetMap()->ContainsGameObjectModel(*m_model)) GetMap()->RemoveGameObjectModel(*m_model); delete m_model; - m_model = GameObjectModel::Create(*this); + m_model = CreateModel(); if (m_model) GetMap()->InsertGameObjectModel(*m_model); } @@ -2321,3 +2321,25 @@ void GameObject::UpdateModelPosition() GetMap()->InsertGameObjectModel(*m_model); } } + +class GameObjectModelOwnerImpl : public GameObjectModelOwnerBase +{ +public: + explicit GameObjectModelOwnerImpl(GameObject const* owner) : _owner(owner) { } + + virtual bool IsSpawned() const override { return _owner->isSpawned(); } + virtual uint32 GetDisplayId() const override { return _owner->GetDisplayId(); } + virtual uint32 GetPhaseMask() const override { return _owner->GetPhaseMask(); } + virtual G3D::Vector3 GetPosition() const override { return G3D::Vector3(_owner->GetPositionX(), _owner->GetPositionY(), _owner->GetPositionZ()); } + virtual float GetOrientation() const override { return _owner->GetOrientation(); } + virtual float GetScale() const override { return _owner->GetObjectScale(); } + virtual void DebugVisualizeCorner(G3D::Vector3 const& corner) const override { _owner->SummonCreature(1, corner.x, corner.y, corner.z, 0, TEMPSUMMON_MANUAL_DESPAWN); } + +private: + GameObject const* _owner; +}; + +GameObjectModel* GameObject::CreateModel() +{ + return GameObjectModel::Create(Trinity::make_unique<GameObjectModelOwnerImpl>(this), sWorld->GetDataPath()); +} diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 9da4afd7957..7ef8ef2737d 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -850,6 +850,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map protected: bool AIM_Initialize(); + GameObjectModel* CreateModel(); void UpdateModel(); // updates model in case displayId were changed uint32 m_spellId; time_t m_respawnTime; // (secs) time of next respawn (or despawn if GO have owner()), |
