feat: created character awareness node
This commit is contained in:
		
							parent
							
								
									ca53fb4ae1
								
							
						
					
					
						commit
						c689d16dfd
					
				
							
								
								
									
										43
									
								
								src/character_awareness.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								src/character_awareness.cpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | ||||||
|  | #include "character_awareness.hpp" | ||||||
|  | #include "character_actor.hpp" | ||||||
|  | #include "utils/godot_macros.h" | ||||||
|  | #include <godot_cpp/variant/callable_method_pointer.hpp> | ||||||
|  | 
 | ||||||
|  | namespace godot { | ||||||
|  | void CharacterAwareness::_bind_methods() { | ||||||
|  | #define CLASSNAME CharacterAwareness | ||||||
|  |     GDSIGNAL("detect_actor", PropertyInfo(Variant::OBJECT, "character", PROPERTY_HINT_NODE_TYPE, "CharacterActor")); | ||||||
|  |     GDSIGNAL("lose_actor", PropertyInfo(Variant::OBJECT, "character", PROPERTY_HINT_NODE_TYPE, "CharacterActor")); | ||||||
|  |     GDSIGNAL("detect_node", PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_NODE_TYPE, "Node")); | ||||||
|  |     GDSIGNAL("lose_node", PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_NODE_TYPE, "Node")); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void CharacterAwareness::_enter_tree() { | ||||||
|  |     this->set_collision_mask(0x2); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void CharacterAwareness::_ready() { | ||||||
|  |     this->connect("body_entered", callable_mp(this, &CharacterAwareness::on_body_entered)); | ||||||
|  |     this->connect("body_exited", callable_mp(this, &CharacterAwareness::on_body_exited)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void CharacterAwareness::on_body_entered(Node *node) { | ||||||
|  |     this->node_awareness.insert(node); | ||||||
|  |     this->emit_signal("detect_node", node); | ||||||
|  |     CharacterActor *actor = Object::cast_to<CharacterActor>(node); | ||||||
|  |     if(actor) { | ||||||
|  |         this->actor_awareness.insert(actor); | ||||||
|  |         this->emit_signal("detect_actor", actor); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void CharacterAwareness::on_body_exited(Node *node) { | ||||||
|  |     this->node_awareness.erase(node); | ||||||
|  |     this->emit_signal("lose_node", node); | ||||||
|  |     CharacterActor *actor = Object::cast_to<CharacterActor>(node); | ||||||
|  |     if(actor) { | ||||||
|  |         this->actor_awareness.erase(actor); | ||||||
|  |         this->emit_signal("lose_actor", actor); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | } | ||||||
							
								
								
									
										25
									
								
								src/character_awareness.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/character_awareness.hpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | ||||||
|  | #ifndef CHARACTER_AWARENESS_HPP | ||||||
|  | #define CHARACTER_AWARENESS_HPP | ||||||
|  | 
 | ||||||
|  | #include "character_actor.hpp" | ||||||
|  | #include <godot_cpp/classes/area3d.hpp> | ||||||
|  | #include <godot_cpp/templates/hash_set.hpp> | ||||||
|  | 
 | ||||||
|  | namespace godot { | ||||||
|  | class CharacterAwareness : public Area3D { | ||||||
|  |     GDCLASS(CharacterAwareness, Area3D); | ||||||
|  |     static void _bind_methods(); | ||||||
|  | public: | ||||||
|  |     virtual void _enter_tree() override; | ||||||
|  |     virtual void _ready() override; | ||||||
|  |     void on_body_entered(Node *node); | ||||||
|  |     void on_body_exited(Node *node); | ||||||
|  | private: | ||||||
|  |     // awareness of characters specifically
 | ||||||
|  |     HashSet<CharacterActor*> actor_awareness{}; | ||||||
|  |     // not a character :( cringe
 | ||||||
|  |     HashSet<Node*> node_awareness{}; | ||||||
|  | }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif // !CHARACTER_AWARENESS_HPP
 | ||||||
		Loading…
	
		Reference in a new issue
	
	 Sara
						Sara