game2006/server/gameserver/btcontext.cc
aozhiwei 7f49358f6f 1
2023-10-14 14:53:11 +08:00

46 lines
993 B
C++

#include "precompile.h"
#include "btcontext.h"
#include "creature.h"
#include "trigger.h"
#include "btevent.h"
BtContext::~BtContext()
{
for (auto& tuple : handlers_) {
if (std::get<0>(tuple).Get() && !std::get<1>(tuple).expired()) {
std::get<0>(tuple).Get()->GetTrigger()->RemoveEventHandler(std::get<1>(tuple));
}
}
}
void BtContext::AddHandler(CreatureWeakPtr target, std::weak_ptr<EventHandlerPtr> handler)
{
handlers_.push_back(std::make_tuple(target, handler));
}
void BtContext::AddEvent(std::shared_ptr<BtEvent> event)
{
events_.push_back(event);
}
bool BtContext::HasEvent()
{
if (!events_.empty()) {
auto event = events_.at(events_.size() - 1);
return event->HasEvent();
}
return false;
}
void BtContext::FireEvent(BaseAgent* agent)
{
if (!events_.empty()) {
auto event = events_.at(events_.size() - 1);
if (event->HasEvent()) {
event->FireEvent(agent);
}
}
}