diff options
| author | Shauren <none@none> | 2010-08-05 17:01:25 +0200 |
|---|---|---|
| committer | Shauren <none@none> | 2010-08-05 17:01:25 +0200 |
| commit | c94046b0651c1df362309c7f9b663745e7cd7fed (patch) | |
| tree | e08eb4369b72c07a46f55cfdbc183f5dc97040e7 /src/server/game/Entities/Object | |
| parent | 30194bdd614b907c4e0de7b96a3697415d83a7ea (diff) | |
Make typecasting methods *really* safe and get rid of redundant typeId/Typemask checks, thanks Zor and Machiavelli for help
--HG--
branch : trunk
Diffstat (limited to 'src/server/game/Entities/Object')
| -rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 40 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Object.h | 13 |
2 files changed, 49 insertions, 4 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 203b6a3e1b6..9ad66051119 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1135,6 +1135,46 @@ bool Object::PrintIndexError(uint32 index, bool set) const return false; } +inline Unit* Object::ToUnit() +{ + return dynamic_cast<Unit*>(this); +} + +inline const Unit* Object::ToUnit() const +{ + return dynamic_cast<const Unit*>(this); +} + +inline Player* Object::ToPlayer() +{ + return dynamic_cast<Player*>(this); +} + +inline const Player* Object::ToPlayer() const +{ + return dynamic_cast<const Player*>(this); +} + +inline Creature* Object::ToCreature() +{ + return dynamic_cast<Creature*>(this); +} + +inline const Creature* Object::ToCreature() const +{ + return dynamic_cast<const Creature*>(this); +} + +inline Item* Object::ToItem() +{ + return dynamic_cast<Item*>(this); +} + +inline const Item* Object::ToItem() const +{ + return dynamic_cast<const Item*>(this); +} + bool Position::HasInLine(const Unit * const target, float distance, float width) const { if (!HasInArc(M_PI, target) || !target->IsWithinDist3d(m_positionX, m_positionY, m_positionZ, distance)) diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 6a6ed7ca10a..af0c7fb76c5 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -116,6 +116,7 @@ class CreatureAI; class ZoneScript; class Unit; class Transport; +class Item; typedef UNORDERED_MAP<Player*, UpdateData> UpdateDataMapType; @@ -320,10 +321,14 @@ class Object // FG: some hacky helpers void ForceValuesUpdateAtIndex(uint32); - Player* ToPlayer(){ if (GetTypeId() == TYPEID_PLAYER) return reinterpret_cast<Player*>(this); else return NULL; } - const Player* ToPlayer() const { if (GetTypeId() == TYPEID_PLAYER) return (const Player*)((Player*)this); else return NULL; } - Creature* ToCreature(){ if (GetTypeId() == TYPEID_UNIT) return reinterpret_cast<Creature*>(this); else return NULL; } - const Creature* ToCreature() const {if (GetTypeId() == TYPEID_UNIT) return (const Creature*)((Creature*)this); else return NULL; } + Unit* ToUnit(); + const Unit* ToUnit() const; + Player* ToPlayer(); + const Player* ToPlayer() const; + Creature* ToCreature(); + const Creature* ToCreature() const; + Item* ToItem(); + const Item* ToItem() const; protected: |
