#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 handler) { handlers_.push_back(std::make_tuple(target, handler)); } void BtContext::AddEvent(std::shared_ptr 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); } } }