#include "stdafx.h" #include "char.h" #include "desc.h" #include "sectree_manager.h" CEntity::CEntity() { Initialize(); } CEntity::~CEntity() { if (!m_bIsDestroyed) assert(!"You must call CEntity::destroy() method in your derived class destructor"); } void CEntity::Initialize(int type) { m_bIsDestroyed = false; m_iType = type; m_iViewAge = 0; m_pos.x = m_pos.y = m_pos.z = 0; m_map_view.clear(); m_pSectree = NULL; m_lpDesc = NULL; m_lMapIndex = 0; m_bIsObserver = false; m_bObserverModeChange = false; } void CEntity::Destroy() { if (m_bIsDestroyed) { return; } ViewCleanup(); m_bIsDestroyed = true; } void CEntity::SetType(int type) { m_iType = type; } int CEntity::GetType() const { return m_iType; } bool CEntity::IsType(int type) const { return (m_iType == type ? true : false); } struct FuncPacketAround { const void * m_data; int m_bytes; LPENTITY m_except; FuncPacketAround(const void * data, int bytes, LPENTITY except = NULL) :m_data(data), m_bytes(bytes), m_except(except) { } void operator () (LPENTITY ent) { if (ent == m_except) return; if (ent->GetDesc()) ent->GetDesc()->Packet(m_data, m_bytes); } }; struct FuncPacketView : public FuncPacketAround { FuncPacketView(const void * data, int bytes, LPENTITY except = NULL) : FuncPacketAround(data, bytes, except) {} void operator() (const CEntity::ENTITY_MAP::value_type& v) { FuncPacketAround::operator() (v.first); } }; void CEntity::PacketAround(const void * data, int bytes, LPENTITY except) { PacketView(data, bytes, except); } void CEntity::PacketView(const void * data, int bytes, LPENTITY except) { if (!GetSectree()) return; FuncPacketView f(data, bytes, except); // ¿ÉÀú¹ö »óÅ¿¡¼± ³» ÆÐŶÀº ³ª¸¸ ¹Þ´Â´Ù. if (!m_bIsObserver) for_each(m_map_view.begin(), m_map_view.end(), f); f(std::make_pair(this, 0)); } void CEntity::SetObserverMode(bool bFlag) { if (m_bIsObserver == bFlag) return; m_bIsObserver = bFlag; m_bObserverModeChange = true; UpdateSectree(); if (IsType(ENTITY_CHARACTER)) { LPCHARACTER ch = (LPCHARACTER) this; ch->ChatPacket(CHAT_TYPE_COMMAND, "ObserverMode %d", m_bIsObserver ? 1 : 0); } }