diff --git a/src/planner.cpp b/src/planner.cpp index 6029b53..0940b95 100644 --- a/src/planner.cpp +++ b/src/planner.cpp @@ -31,6 +31,25 @@ Dictionary Goal::get_goal_state() const { #undef CLASSNAME // !Goal +PlannerNode PlannerNode::goal_node(WorldState const &goal) { + return PlannerNode{ + goal, {}, {} + }; +} + +PlannerNode PlannerNode::new_node_along(Ref action) const { + PlannerNode new_node{ + action->prerequisites, + action->effects, + action, + }; + for(WorldProperty const &prop : this->state) + new_node.state.insert(prop.key, prop.value); + for(WorldProperty const &prop : this->open_requirements) + new_node.open_requirements.insert(prop.key, prop.value); + return new_node; +} + void Planner::_bind_methods() { #define CLASSNAME Planner GDPROPERTY_HINTED(actions, Variant::ARRAY, PROPERTY_HINT_ARRAY_TYPE, GDRESOURCETYPE(Action)); diff --git a/src/planner.hpp b/src/planner.hpp index 6e84864..6fa4824 100644 --- a/src/planner.hpp +++ b/src/planner.hpp @@ -49,24 +49,9 @@ struct PlannerNode { PlannerNode() = default; PlannerNode(PlannerNode const &src) = default; - static PlannerNode goal_node(WorldState goal) { - return PlannerNode{ - goal, {}, {} - }; - } + static PlannerNode goal_node(WorldState const &goal); - PlannerNode new_node_along(Ref action) const { - PlannerNode new_node{ - action->prerequisites, - action->effects, - action, - }; - for(WorldProperty const &prop : this->state) - new_node.state.insert(prop.key, prop.value); - for(WorldProperty const &prop : this->open_requirements) - new_node.open_requirements.insert(prop.key, prop.value); - return new_node; - } + PlannerNode new_node_along(Ref action) const; }; class Planner : public Node {