From 73ff6ead4611235b8d2ae1b6518819a026ad8c8f Mon Sep 17 00:00:00 2001 From: Sara Date: Tue, 2 Apr 2024 22:25:26 +0200 Subject: [PATCH] feat: StateArgs now require a Planner as construction context --- src/planner.cpp | 5 +++-- src/planner.hpp | 2 +- src/state.cpp | 15 ++++++++------- src/state.hpp | 10 ++++++---- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/planner.cpp b/src/planner.cpp index cdd1235..c079c1a 100644 --- a/src/planner.cpp +++ b/src/planner.cpp @@ -64,8 +64,9 @@ void Planner::_bind_methods() { GDPROPERTY_HINTED(goals, Variant::ARRAY, PROPERTY_HINT_ARRAY_TYPE, GDRESOURCETYPE(Goal)); } -void Planner::_ready() { +void Planner::_enter_tree() { this->global_world_state = GlobalWorldState::get_singleton(); + UtilityFunctions::print("global world state cached: ", this->global_world_state); this->actor = Object::cast_to(this->get_parent()); } @@ -196,7 +197,7 @@ State Planner::get_next_state() { this->plan = this->make_plan(); if(this->plan.is_empty()) return State::new_invalid(); - return this->plan.get(0)->apply_state->construct(this->actor); + return this->plan.get(0)->apply_state->construct(this); } void Planner::set_actions(Array value) { diff --git a/src/planner.hpp b/src/planner.hpp index 9bf9e73..399a1cb 100644 --- a/src/planner.hpp +++ b/src/planner.hpp @@ -44,7 +44,7 @@ class Planner : public Node { GDCLASS(Planner, Node); static void _bind_methods(); public: - virtual void _ready() override; + virtual void _enter_tree() override; Vector> make_plan(); Ref select_goal(); diff --git a/src/state.cpp b/src/state.cpp index bdb1900..2dcb68f 100644 --- a/src/state.cpp +++ b/src/state.cpp @@ -1,5 +1,6 @@ #include "state.hpp" #include "character_actor.hpp" +#include "planner.hpp" #include "utils/godot_macros.h" namespace godot::goap { @@ -51,7 +52,7 @@ void StateArgs::_bind_methods() { GDPROPERTY(argument_property, Variant::STRING_NAME); } -State StateArgs::construct(Node *context) const { +State StateArgs::construct(Planner *context) const { return { .type = State::STATE_TYPE_MAX }; } @@ -60,21 +61,21 @@ StringName StateArgs::get_argument_property() const { return this->argument_prop void MoveStateArgs::_bind_methods() {} -State MoveStateArgs::construct(Node *context) const { - Node3D *node = Object::cast_to(context->call("get_" + this->argument_property)); +State MoveStateArgs::construct(Planner *context) const { + Node3D *node = Object::cast_to(context->get_world_property(this->argument_property)); return State::new_move_to(node); } void AnimateStateArgs::_bind_methods() {} -State AnimateStateArgs::construct(Node *context) const { - return State::new_animate(context->call("get_" + this->argument_property)); +State AnimateStateArgs::construct(Planner *context) const { + return State::new_animate(context->get_world_property(this->argument_property)); } void ActivateStateArgs::_bind_methods() {} -State ActivateStateArgs::construct(Node *context) const { - Node *node = Object::cast_to(context->call("get_" + this->argument_property)); +State ActivateStateArgs::construct(Planner *context) const { + Node *node = Object::cast_to(context->get_world_property(this->argument_property)); return State::new_activate(node); } } diff --git a/src/state.hpp b/src/state.hpp index 1e9986c..4cbf89e 100644 --- a/src/state.hpp +++ b/src/state.hpp @@ -9,6 +9,8 @@ namespace godot { class CharacterActor; } namespace godot::goap { +class Planner; + struct State { ~State(); static State new_move_to(Node3D *location); @@ -36,7 +38,7 @@ class StateArgs : public Resource { GDCLASS(StateArgs, Resource); static void _bind_methods(); public: - virtual State construct(Node *context) const; + virtual State construct(Planner *context) const; void set_argument_property(StringName name); StringName get_argument_property() const; StringName argument_property; @@ -45,21 +47,21 @@ public: class MoveStateArgs : public StateArgs { GDCLASS(MoveStateArgs, StateArgs); static void _bind_methods(); - virtual State construct(Node *context) const override; + virtual State construct(Planner *context) const override; }; class AnimateStateArgs : public StateArgs { GDCLASS(AnimateStateArgs, StateArgs); static void _bind_methods(); public: - virtual State construct(Node *context) const override; + virtual State construct(Planner *context) const override; }; class ActivateStateArgs : public StateArgs { GDCLASS(ActivateStateArgs, StateArgs); static void _bind_methods(); public: - virtual State construct(Node *context) const override; + virtual State construct(Planner *context) const override; }; };