46 lines
993 B
C++
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);
|
|
}
|
|
}
|
|
}
|