Files
Sun1602/SolarTrigger/TriggerAreaManager.cpp
T
2022-10-26 12:25:11 +08:00

124 lines
3.4 KiB
C++

#include "StdAfx.h"
#include ".\triggerareamanager.h"
//==================================================================================================
TriggerAreaManager::TriggerAreaManager()
{
}
TriggerAreaManager::~TriggerAreaManager()
{
}
void TriggerAreaManager::Init()
{
}
void TriggerAreaManager::Release()
{
FOREACH_CONTAINER(const TRIGGER_AREA_MAP::value_type& node, trigger_areas_, TRIGGER_AREA_MAP)
{
TriggerArea* trigger_area = node.second;
if (trigger_area != NULL) {
TAllocDelete(TriggerArea, trigger_area);
}
}
trigger_areas_.clear();
}
bool TriggerAreaManager::EnterArea(TRIGGER_ENTER_AREA* msg)
{
return TriggerArea::EnterArea(this, msg);
}
bool TriggerAreaManager::LeaveArea(TRIGGER_LEAVE_AREA* msg)
{
return TriggerArea::LeaveArea(this, msg);
}
DWORD TriggerAreaManager::GetPlayerNumber(int area_id) const
{
TriggerArea* trigger_area = FindArea(area_id);
if (trigger_area) {
return trigger_area->GetPlayerNumber();
};
return 0;
}
bool TriggerAreaManager::InsertNewArea(int area_id, TriggerAreaLocalStorage* area_item)
{
TriggerArea* trigger_area = FindArea(area_id);
if (trigger_area == NULL)
{
trigger_area = TAllocNew(TriggerArea)(area_id);
trigger_areas_.insert(std::make_pair(area_id, trigger_area));
}
// (WAVERIX) (090904) (BUG-FIX) 하나의 영역당 이벤트 관리에서 n개의 공간이 존재해도 notify list는
// 하나만 존재하게 되어 버리는 문제 수정 (객체 생성 다음 라인에서 목록 등록하던 문제 수정)
trigger_area->InsertAreaCondition(area_item);
return true;
}
//==================================================================================================
//==================================================================================================
//==================================================================================================
TriggerAreaManagerForNpc::TriggerAreaManagerForNpc()
{
}
TriggerAreaManagerForNpc::~TriggerAreaManagerForNpc()
{
}
void TriggerAreaManagerForNpc::Init()
{
}
void TriggerAreaManagerForNpc::Release()
{
FOREACH_CONTAINER(const TRIGGER_AREA_MAP::value_type& node, trigger_areas_, TRIGGER_AREA_MAP)
{
TriggerAreaForNpc* trigger_area = node.second;
if (trigger_area != NULL) {
TAllocDelete(TriggerAreaForNpc, trigger_area);
}
}
trigger_areas_.clear();
}
bool TriggerAreaManagerForNpc::EnterArea(TRIGGER_NPC_ENTER_AREA* msg)
{
return TriggerAreaForNpc::EnterArea(this, msg);
}
bool TriggerAreaManagerForNpc::LeaveArea(TRIGGER_NPC_LEAVE_AREA* msg)
{
return TriggerAreaForNpc::LeaveArea(this, msg);
}
DWORD TriggerAreaManagerForNpc::GetNpcNumber(int area_id)
{
TriggerAreaForNpc* trigger_area = FindArea(area_id);
if (trigger_area) {
return trigger_area->GetNpcNumber();
};
return 0;
}
bool TriggerAreaManagerForNpc::InsertNewArea(int area_id, TriggerAreaLocalStorageForNpc* area_item)
{
TriggerAreaForNpc* trigger_area = FindArea(area_id);
if (trigger_area == NULL)
{
trigger_area = TAllocNew(TriggerAreaForNpc)(area_id);
trigger_areas_.insert(std::make_pair(area_id, trigger_area));
}
// (WAVERIX) (090904) (BUG-FIX) 하나의 영역당 이벤트 관리에서 n개의 공간이 존재해도 notify list는
// 하나만 존재하게 되어 버리는 문제 수정 (객체 생성 다음 라인에서 목록 등록하던 문제 수정)
trigger_area->InsertAreaCondition(area_item);
return true;
}