metro-rts/src/goap/goal.cpp

43 lines
1.2 KiB
C++

#include "goal.hpp"
#include "utils/godot_macros.hpp"
#include "utils/util_functions.hpp"
namespace goap {
void Goal::_bind_methods() {
#define CLASSNAME Goal
GDPROPERTY(requirements_dict, gd::Variant::DICTIONARY);
GDPROPERTY(desired_state_dict, gd::Variant::DICTIONARY);
}
gd::Ref<Goal> Goal::create(gd::StringName key, gd::Variant value) {
gd::Ref<Goal> goal = memnew(Goal);
goal->desired_state.insert(key, value);
return goal;
}
bool Goal::check_requirements_met(ActorWorldState *world_state) {
for(WorldProperty const &prop : this->requirements) {
if(!world_state->check_property_match(prop)) {
return false;
}
}
return true;
}
void Goal::set_requirements_dict(gd::Dictionary dict) {
this->requirements = utils::dictionary_to_hashmap<gd::StringName, gd::Variant>(dict);
}
gd::Dictionary Goal::get_requirements_dict() const {
return utils::hashmap_to_dictionary(this->requirements);
}
void Goal::set_desired_state_dict(gd::Dictionary dict) {
this->desired_state = utils::dictionary_to_hashmap<gd::StringName, gd::Variant>(dict);
}
gd::Dictionary Goal::get_desired_state_dict() const {
return utils::hashmap_to_dictionary(this->desired_state);
}
}