feat: refactored how mapregion tracks units and npcs
This commit is contained in:
		
							parent
							
								
									0ff5f4ae9c
								
							
						
					
					
						commit
						8dad8bbc1f
					
				| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
#include "map_region.h"
 | 
					#include "map_region.h"
 | 
				
			||||||
#include "enemy_body.h"
 | 
					#include "enemy_body.h"
 | 
				
			||||||
 | 
					#include "player_body.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
String const MapRegion::sig_difficulty_increased{ "difficulty_increased" };
 | 
					String const MapRegion::sig_difficulty_increased{ "difficulty_increased" };
 | 
				
			||||||
String const MapRegion::sig_phase_changed{ "hunt_phase" };
 | 
					String const MapRegion::sig_phase_changed{ "hunt_phase" };
 | 
				
			||||||
| 
						 | 
					@ -7,16 +8,33 @@ String const MapRegion::sig_phase_changed{ "hunt_phase" };
 | 
				
			||||||
void MapRegion::_bind_methods() {
 | 
					void MapRegion::_bind_methods() {
 | 
				
			||||||
	ADD_SIGNAL(MethodInfo(sig_difficulty_increased));
 | 
						ADD_SIGNAL(MethodInfo(sig_difficulty_increased));
 | 
				
			||||||
	ADD_SIGNAL(MethodInfo(sig_phase_changed, PropertyInfo(Variant::BOOL, "hunt")));
 | 
						ADD_SIGNAL(MethodInfo(sig_phase_changed, PropertyInfo(Variant::BOOL, "hunt")));
 | 
				
			||||||
 | 
						ClassDB::bind_method(D_METHOD("raise_difficulty", "amount"), &self_type::raise_difficulty);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MapRegion::on_node_entered(Node *node) {
 | 
					void MapRegion::on_node_entered(Node3D *node) {
 | 
				
			||||||
	if (EnemyBody * body{ cast_to<EnemyBody>(node) }) {
 | 
						if (cast_to<PlayerBody>(node) != nullptr) {
 | 
				
			||||||
		if (!this->units.has(body->get_unit())) {
 | 
							this->has_player = true;
 | 
				
			||||||
			body->get_unit()->set_region(this);
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void MapRegion::on_node_exited(Node3D *node) {
 | 
				
			||||||
 | 
						if (cast_to<PlayerBody>(node) != nullptr) {
 | 
				
			||||||
 | 
							this->has_player = false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void MapRegion::on_child_entered_tree(Node *node) {
 | 
				
			||||||
 | 
						if (NpcUnit * unit{ cast_to<NpcUnit>(node) }) {
 | 
				
			||||||
 | 
							if (!this->units.has(unit)) {
 | 
				
			||||||
 | 
								unit->set_region(this);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void MapRegion::enter_tree() {
 | 
				
			||||||
 | 
						connect("child_entered_tree", callable_mp(this, &self_type::on_child_entered_tree));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MapRegion::ready() {
 | 
					void MapRegion::ready() {
 | 
				
			||||||
	connect("body_entered", callable_mp(this, &self_type::on_node_entered));
 | 
						connect("body_entered", callable_mp(this, &self_type::on_node_entered));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -28,6 +46,9 @@ void MapRegion::_notification(int what) {
 | 
				
			||||||
	switch (what) {
 | 
						switch (what) {
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
 | 
							case NOTIFICATION_ENTER_TREE:
 | 
				
			||||||
 | 
								enter_tree();
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
		case NOTIFICATION_READY:
 | 
							case NOTIFICATION_READY:
 | 
				
			||||||
			ready();
 | 
								ready();
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,10 @@
 | 
				
			||||||
class MapRegion : public Area3D {
 | 
					class MapRegion : public Area3D {
 | 
				
			||||||
	GDCLASS(MapRegion, Area3D);
 | 
						GDCLASS(MapRegion, Area3D);
 | 
				
			||||||
	static void _bind_methods();
 | 
						static void _bind_methods();
 | 
				
			||||||
	void on_node_entered(Node *node);
 | 
						void on_node_entered(Node3D *node);
 | 
				
			||||||
 | 
						void on_node_exited(Node3D *node);
 | 
				
			||||||
 | 
						void on_child_entered_tree(Node *node);
 | 
				
			||||||
 | 
						void enter_tree();
 | 
				
			||||||
	void ready();
 | 
						void ready();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
| 
						 | 
					@ -24,6 +27,7 @@ private:
 | 
				
			||||||
	double difficulty{ 0.f };
 | 
						double difficulty{ 0.f };
 | 
				
			||||||
	bool hunt_phase{ false };
 | 
						bool hunt_phase{ false };
 | 
				
			||||||
	HashSet<NpcUnit *> units{ nullptr };
 | 
						HashSet<NpcUnit *> units{ nullptr };
 | 
				
			||||||
 | 
						bool has_player{ false };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	static String const sig_difficulty_increased;
 | 
						static String const sig_difficulty_increased;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue