feat: defined action with prereqs and effects
This commit is contained in:
		
							parent
							
								
									3b75b13a14
								
							
						
					
					
						commit
						e0261a033e
					
				
							
								
								
									
										53
									
								
								src/action.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/action.cpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,53 @@ | ||||||
|  | #include "action.hpp" | ||||||
|  | #include "utils/godot_macros.h" | ||||||
|  | 
 | ||||||
|  | namespace godot::goap { | ||||||
|  | void Action::_bind_methods() { | ||||||
|  | #define CLASSNAME Action | ||||||
|  |     GDPROPERTY(context_prerequisites, Variant::DICTIONARY); | ||||||
|  |     GDPROPERTY(prerequisites, Variant::DICTIONARY); | ||||||
|  |     GDPROPERTY(effects, Variant::DICTIONARY); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void Action::set_context_prerequisites(Dictionary dict) { | ||||||
|  |     Action::dict_to_property_map(dict, this->context_prerequisites); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dictionary Action::get_context_prerequisites() const { | ||||||
|  |     return Action::property_map_to_dict(this->context_prerequisites); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void Action::set_prerequisites(Dictionary dict) { | ||||||
|  |     Action::dict_to_property_map(dict, this->prerequisites); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dictionary Action::get_prerequisites() const { | ||||||
|  |     return Action::property_map_to_dict(this->prerequisites); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void Action::set_effects(Dictionary dict) { | ||||||
|  |     Action::dict_to_property_map(dict, this->effects); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dictionary Action::get_effects() const { | ||||||
|  |     return Action::property_map_to_dict(this->effects); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dictionary Action::property_map_to_dict(WorldState const &props) { | ||||||
|  |     Dictionary out{}; | ||||||
|  |     for(KeyValue<StringName, Variant> const &prop : props) { | ||||||
|  |         out[prop.key] = prop.value; | ||||||
|  |     } | ||||||
|  |     return out; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void Action::dict_to_property_map(Dictionary const &dict, WorldState &out) { | ||||||
|  |     out.clear(); | ||||||
|  |     Array keys = dict.keys(); | ||||||
|  |     Array vals = dict.values(); | ||||||
|  |     for(size_t i{0}; i < keys.size(); ++i) { | ||||||
|  |         if(keys[i].get_type() == Variant::STRING_NAME) | ||||||
|  |             out.insert(keys[i], vals[i]); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								src/action.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/action.hpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | ||||||
|  | #ifndef GOAP_ACTION_HPP | ||||||
|  | #define GOAP_ACTION_HPP | ||||||
|  | 
 | ||||||
|  | #include <cstddef> | ||||||
|  | #include <godot_cpp/classes/object.hpp> | ||||||
|  | #include <godot_cpp/classes/ref_counted.hpp> | ||||||
|  | #include <godot_cpp/classes/resource.hpp> | ||||||
|  | #include <godot_cpp/templates/hash_map.hpp> | ||||||
|  | #include <godot_cpp/templates/pair.hpp> | ||||||
|  | #include <godot_cpp/variant/variant.hpp> | ||||||
|  | 
 | ||||||
|  | namespace godot::goap { | ||||||
|  | typedef HashMap<StringName, Variant> WorldState; | ||||||
|  | typedef KeyValue<StringName, Variant> WorldProperty; | ||||||
|  | 
 | ||||||
|  | class Action : public Resource { | ||||||
|  |     GDCLASS(Action, Resource); | ||||||
|  |     static void _bind_methods(); | ||||||
|  | public: | ||||||
|  |     void set_context_prerequisites(Dictionary dict); | ||||||
|  |     Dictionary get_context_prerequisites() const; | ||||||
|  |     void set_prerequisites(Dictionary dict); | ||||||
|  |     Dictionary get_prerequisites() const; | ||||||
|  |     void set_effects(Dictionary dict); | ||||||
|  |     Dictionary get_effects() const; | ||||||
|  | protected: | ||||||
|  |     static Dictionary property_map_to_dict(WorldState const &props); | ||||||
|  |     static void dict_to_property_map(Dictionary const &dict, WorldState &out); | ||||||
|  | public: | ||||||
|  |     WorldState context_prerequisites{}; | ||||||
|  |     WorldState prerequisites{}; | ||||||
|  |     WorldState effects{}; | ||||||
|  | }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif //!GOAP_ACTION_HPP
 | ||||||
		Loading…
	
		Reference in a new issue
	
	 Sara
						Sara