43 lines
1.2 KiB
C++
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);
|
|
}
|
|
}
|