diff options
author | Kandera <KanderaDev@gmail.com> | 2012-09-04 12:07:20 -0400 |
---|---|---|
committer | Kandera <KanderaDev@gmail.com> | 2012-09-04 12:08:12 -0400 |
commit | 26af8ac65a86714792fdd054d7066542c4d5daa2 (patch) | |
tree | a5d8b5a01eb79698693b0245ddb9237ca01ecaaf | |
parent | 73172c67f02b8f2649b762262d54aea7b7f94d07 (diff) |
Core/Gameobject: another attempt at fixing collision. chest gameobject initial collision provided by vincent-michael
-rw-r--r-- | src/server/collision/Models/GameObjectModel.h | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/GameObject/GameObject.cpp | 14 |
2 files changed, 8 insertions, 8 deletions
diff --git a/src/server/collision/Models/GameObjectModel.h b/src/server/collision/Models/GameObjectModel.h index 0bb6c0f47bc..78a0e876676 100644 --- a/src/server/collision/Models/GameObjectModel.h +++ b/src/server/collision/Models/GameObjectModel.h @@ -61,6 +61,8 @@ public: void disable() { phasemask = 0;} void enable(uint32 ph_mask) { phasemask = ph_mask;} + bool isEnabled() const {return phasemask != 0;} + bool intersectRay(const G3D::Ray& Ray, float& MaxDist, bool StopAtFirstHit, uint32 ph_mask) const; static GameObjectModel* Create(const GameObject& go); diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 751107ac011..ba7087b6b18 100755 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -135,7 +135,7 @@ void GameObject::AddToWorld() sObjectAccessor->AddObject(this); bool startOpen = (GetGoType() == GAMEOBJECT_TYPE_DOOR || GetGoType() == GAMEOBJECT_TYPE_BUTTON ? GetGOInfo()->door.startOpen : false); // The state can be changed after GameObject::Create but before GameObject::AddToWorld - bool toggledState = GetGOData() ? GetGOData()->go_state != GO_STATE_READY : false; + bool toggledState = GetGoType == GAMEOBJECT_TYPE_CHEST ? getLootState () == GO_READY : GetGoState() != GO_STATE_READY; if (m_model) GetMap()->InsertGameObjectModel(*m_model); @@ -1930,13 +1930,10 @@ void GameObject::SetLootState(LootState state, Unit* unit) bool startOpen = (GetGoType() == GAMEOBJECT_TYPE_DOOR || GetGoType() == GAMEOBJECT_TYPE_BUTTON ? GetGOInfo()->door.startOpen : false); // Use the current go state - if (GetGoState() != GO_STATE_READY) + if ((GetGoState() != GO_STATE_READY && (state == GO_ACTIVATED || state == GO_JUST_DEACTIVATED)) || state == GO_READY) startOpen = !startOpen; - - if (state == GO_ACTIVATED || state == GO_JUST_DEACTIVATED) - EnableCollision(startOpen); - else if (state == GO_READY) - EnableCollision(!startOpen); + + EnableCollision(startOpen); } } @@ -1968,7 +1965,8 @@ void GameObject::SetDisplayId(uint32 displayid) void GameObject::SetPhaseMask(uint32 newPhaseMask, bool update) { WorldObject::SetPhaseMask(newPhaseMask, update); - EnableCollision(true); + if (m_model && m_model->isEnabled()) + EnableCollision(true); } void GameObject::EnableCollision(bool enable) |