diff --git a/godot/monitor/Monitor.gd b/godot/monitor/Monitor.gd index 62dd86e..63fe282 100644 --- a/godot/monitor/Monitor.gd +++ b/godot/monitor/Monitor.gd @@ -137,18 +137,18 @@ func _on_input_validated(validated_player: Dictionary) -> void: func _object_created(name: String, state: String, position: Vector2, velocity: Vector2) -> void: - if monitor_enabled and started: + if monitor_enabled: add_object(name, state, position, velocity) func _object_updated(name: String, state: String, position: Vector2, velocity: Vector2) -> void: - if monitor_enabled and started: + if monitor_enabled: remove_object(name) add_object(name, state, position, velocity) func _object_removed(name: String) -> void: - if monitor_enabled and started: + if monitor_enabled: remove_object(name) @@ -179,8 +179,8 @@ func add_object(name: String, state: String, position: Vector2, velocity: Vector func remove_object(name: String) -> void: for i in range(0, objects.size()): - if objects[i]["name"] == name: - objects.remove(i) + if objects[i]["name"] == name: + objects.remove(i) func _on_coin_update(amount: int) -> void: diff --git a/godot/monitor/Monitor.tscn b/godot/monitor/Monitor.tscn index 977db82..ae8206b 100644 --- a/godot/monitor/Monitor.tscn +++ b/godot/monitor/Monitor.tscn @@ -7,7 +7,6 @@ pause_mode = 2 script = ExtResource( 1 ) monitor_enabled = true -use_development_url = true [node name="MonitorGUI" parent="." instance=ExtResource( 3 )] visible = false diff --git a/src/Main.cpp b/src/Main.cpp index 17f9051..6bc13fb 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -46,20 +46,12 @@ void Main::_ready() { // Load monitor from pck Godot::print("Monitor pck found, loading..."); - Ref monitor_scene = _resource_loader->load("res://monitor/Monitor.tscn"); - add_child(monitor_scene->instance()); - auto monitor = get_node("Monitor"); - monitor->connect("monitor_loaded", this, "_on_monitor_loaded"); - get_tree()->set_pause(true); + load_monitor(); } else if (_resource_loader->exists("res://monitor/Monitor.tscn")) { // Load monitor from alai's pck - Ref monitor_scene = _resource_loader->load("res://monitor/Monitor.tscn"); - add_child(monitor_scene->instance()); - auto monitor = get_node("Monitor"); - monitor->connect("monitor_loaded", this, "_on_monitor_loaded"); - get_tree()->set_pause(true); + load_monitor(); } else { @@ -95,15 +87,36 @@ void Main::_ready() } } -void Main::_on_monitor_loaded() { - if (level != NULL) +void Main::_on_monitor_loaded() +{ + if (level != nullptr) + { + auto level_node = load_level(); + connect("monitor_loaded", level_node->get_child(0)->find_node("Player", true, false), "_on_monitor_loaded"); + emit_signal("monitor_loaded"); + } +} + +void Main::load_monitor() +{ + Ref monitor_scene = _resource_loader->load("res://monitor/Monitor.tscn"); + add_child(monitor_scene->instance()); + auto monitor = get_node("Monitor"); + monitor->connect("monitor_loaded", this, "_on_monitor_loaded"); + get_tree()->set_pause(true); +} + +Node *Main::load_level() +{ + if (level != nullptr) { auto path = level->get_path(); - Ref level_scene = _resource_loader->load(path); - auto loaded_level = level_scene->instance(); - connect("monitor_loaded", loaded_level, "_on_monitor_loaded"); - get_node("Level")->add_child(loaded_level); + auto loaded_level = level->instance(); + auto level_node = get_node("Level"); + level_node->add_child(loaded_level); + return level_node; } + return nullptr; } void Main::_physics_process(float delta) diff --git a/src/Main.h b/src/Main.h index 5e8cfee..4c04cc9 100644 --- a/src/Main.h +++ b/src/Main.h @@ -218,6 +218,9 @@ namespace godot int8_t get_launch_screen(); void _on_monitor_loaded(); + + void load_monitor(); + Node *load_level(); }; } } diff --git a/src/player/Player.cpp b/src/player/Player.cpp index 4c3fab7..868156b 100644 --- a/src/player/Player.cpp +++ b/src/player/Player.cpp @@ -81,7 +81,7 @@ void Player::_ready() } void Player::_on_monitor_loaded() { - auto object_node = get_tree()->get_root()->get_node("Main")->find_node("Monitor", true); + auto object_node = get_tree()->get_root()->find_node("Monitor", true, false); if (object_node != nullptr) { auto state = get_node("StateMachine")->get_child(0); @@ -97,10 +97,12 @@ void Player::_on_monitor_loaded() { WARN_PRINT("State not found!"); } } +#ifndef NDEBUG else { WARN_PRINT("Monitor not found!"); } +#endif } void Player::_physics_process(float delta)