dungeon/src/IfSeeFriendNode.cpp

32 lines
830 B
C++
Raw Normal View History

2017-09-17 13:43:13 +02:00
#include "IfSeeFriendNode.h"
#include "BehaviourTree.h"
#include "Actor.h"
#include "Tilemap.h"
#include "FieldOfView.h"
2017-09-17 13:43:13 +02:00
IfSeeFriendNode::IfSeeFriendNode(BehaviourTreeNode* parent) : BehaviourTreeNode(parent) {}
IfSeeFriendNode::~IfSeeFriendNode() {}
BehaviourTreeStatus IfSeeFriendNode::tick(BTTick * tick) {
if (children.size() <= 0) {
return BT_ERROR;
}
bool ishero = tick->target->isTypeOf(ACT_HERO);
2017-09-21 22:44:05 +02:00
auto actors = tick->target->map->get_actor_list();
2017-09-17 20:07:38 +02:00
for (auto actor : *actors) {
2017-09-17 13:43:13 +02:00
if (actor == tick->target) continue;
if (actor->isTypeOf(ACT_HERO) == ishero) {
2017-09-21 22:44:05 +02:00
vec2i pos = actor->get_position();
if (line_of_sight(tick->target->map, tick->target->get_position(), pos)) {
2017-09-17 13:43:13 +02:00
return children[0]->execute(tick);
}
}
}
return BT_FAILED;
}