diff --git a/jrpg/scenes/TestMain.tscn b/jrpg/scenes/TestMain.tscn index f93d028..7dd8908 100644 --- a/jrpg/scenes/TestMain.tscn +++ b/jrpg/scenes/TestMain.tscn @@ -17,13 +17,6 @@ scenes = { [node name="CanvasLayer" type="CanvasLayer" parent="."] -[node name="UI" type="Control" parent="CanvasLayer"] -anchor_right = 1.0 -anchor_bottom = 1.0 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="HUD" parent="CanvasLayer/UI" instance=ExtResource( 7 )] +[node name="HUD" parent="CanvasLayer" instance=ExtResource( 7 )] -[node name="SpeechPanel" parent="CanvasLayer/UI" instance=ExtResource( 6 )] +[node name="SpeechPanel" parent="CanvasLayer" instance=ExtResource( 6 )] diff --git a/jrpg/scripts/entities/components/interactions/talk_interaction.gd b/jrpg/scripts/entities/components/interactions/talk_interaction.gd index 8d19f1f..81f844c 100644 --- a/jrpg/scripts/entities/components/interactions/talk_interaction.gd +++ b/jrpg/scripts/entities/components/interactions/talk_interaction.gd @@ -2,9 +2,7 @@ extends BasisInteraction class_name TalkInteraction -signal trigger_script - var yarn_script : Resource func on_interact(): - emit_signal("trigger_script", yarn_script) + EventDispatcher.emit_signal("trigger_script", yarn_script) diff --git a/jrpg/scripts/entities/model/player_infos.gd b/jrpg/scripts/entities/model/player_infos.gd index 2e850ee..f73a004 100644 --- a/jrpg/scripts/entities/model/player_infos.gd +++ b/jrpg/scripts/entities/model/player_infos.gd @@ -46,3 +46,8 @@ func gold_set(value): func gold_get(): return gold +func reset(): + curHp = maxHp + emit_signal("curHp_update", curHp) + gold = 0 + emit_signal("gold_update", gold) diff --git a/jrpg/scripts/levels/script_trigger.gd b/jrpg/scripts/levels/script_trigger.gd index 6bad5b3..a1b7edd 100644 --- a/jrpg/scripts/levels/script_trigger.gd +++ b/jrpg/scripts/levels/script_trigger.gd @@ -1,12 +1,9 @@ extends Area -signal trigger_script - export var yarnScript : Resource func enable(): self.connect("body_entered", self, "_on_TriggerArea_body_entered") func _on_TriggerArea_body_entered(body): - print("triggered") - emit_signal("trigger_script", yarnScript) + EventDispatcher.emit_signal("trigger_script", yarnScript) diff --git a/jrpg/scripts/levels/spawner.gd b/jrpg/scripts/levels/spawner.gd index f778e4d..301a460 100644 --- a/jrpg/scripts/levels/spawner.gd +++ b/jrpg/scripts/levels/spawner.gd @@ -4,13 +4,12 @@ export var character_data : Resource var interaction_component : BasisInteraction -func spawn(level): +func spawn(): var inst = character_data.scene.instance() inst.name = character_data.name if character_data.yarn != null: interaction_component = TalkInteraction.new() interaction_component.name = character_data.yarn.resource_name interaction_component.yarn_script = character_data.yarn - interaction_component.connect("trigger_script", level, "trigger_script") inst.add_child(interaction_component) add_child(inst) diff --git a/jrpg/scripts/levels/test_coins.gd b/jrpg/scripts/levels/test_coins.gd index 6ab289b..1cda27f 100644 --- a/jrpg/scripts/levels/test_coins.gd +++ b/jrpg/scripts/levels/test_coins.gd @@ -1,14 +1,12 @@ extends Node -signal all_coins_picked_up - export var coin_scene : PackedScene export var all_coins_picked_up_script : Resource var coins := -1 -func spawn(level): +func spawn(): if coins < 0: # not spawned yet coins = 0 for spawn in get_children(): @@ -16,9 +14,8 @@ func spawn(level): coin.connect("picked_up", self, "on_coin_picked_up") coins += 1 spawn.add_child(coin) - connect("all_coins_picked_up", level, "trigger_script") func on_coin_picked_up(): coins -= 1 if coins == 0: - emit_signal("all_coins_picked_up", all_coins_picked_up_script) + EventDispatcher.emit_signal("trigger_script", all_coins_picked_up_script) diff --git a/jrpg/scripts/misc/controller.gd b/jrpg/scripts/misc/controller.gd index f8c1c57..62d4a9b 100644 --- a/jrpg/scripts/misc/controller.gd +++ b/jrpg/scripts/misc/controller.gd @@ -1,5 +1,6 @@ extends Node +var hud : HUD var speech_panel : SpeechPanel var player_infos := PlayerInfos.new() diff --git a/jrpg/scripts/misc/event_dispatcher.gd b/jrpg/scripts/misc/event_dispatcher.gd new file mode 100644 index 0000000..c692ca5 --- /dev/null +++ b/jrpg/scripts/misc/event_dispatcher.gd @@ -0,0 +1,3 @@ +extends Node + +signal trigger_script diff --git a/jrpg/scripts/misc/test_level.gd b/jrpg/scripts/misc/test_level.gd index c204134..3b38ad0 100644 --- a/jrpg/scripts/misc/test_level.gd +++ b/jrpg/scripts/misc/test_level.gd @@ -9,11 +9,13 @@ func _ready(): yarnRunner.add_command("EnableTrigger", funcref(self, "enable_trigger")) yarnRunner.add_command("Scene", funcref(self, "scene")) - for trigger in $Triggers.get_children(): - trigger.connect("trigger_script", self, "trigger_script") + EventDispatcher.connect("trigger_script", self, "trigger_script") - trigger_script(init_yarn_script) + Controller.hud.show() + Controller.player_infos.reset() + trigger_script(init_yarn_script) + func spawn(args): yield(get_tree(), "idle_frame") @@ -23,7 +25,7 @@ func spawn(args): var spawner = get_node("Spawners/" + args[0]) if spawner != null and spawner.has_method("spawn"): - spawner.spawn(self) + spawner.spawn() else: print("spawner " + args[0] + " not found or not compatible") @@ -65,3 +67,7 @@ func scene(args): print("Request new scene : " + args[0]) emit_signal("request_new_scene", args[0]) + +func _exit_tree(): + Controller.hud.hide() + Controller.speech_panel.hide() diff --git a/jrpg/scripts/misc/test_main.gd b/jrpg/scripts/misc/test_main.gd index f6fcc62..297940c 100644 --- a/jrpg/scripts/misc/test_main.gd +++ b/jrpg/scripts/misc/test_main.gd @@ -16,10 +16,6 @@ func load_scene(scene_key): var scene = scenes[scene_key].instance() scene.connect("request_new_scene", self, "load_scene") $SceneContainer.add_child(scene) - if scene_key == "TestGameOver": - $CanvasLayer/UI.hide() - else: - $CanvasLayer/UI.show() func wait_signal(args): yield(self, "end") diff --git a/jrpg/scripts/ui/test_hud.gd b/jrpg/scripts/ui/test_hud.gd index 3f380eb..11add1e 100644 --- a/jrpg/scripts/ui/test_hud.gd +++ b/jrpg/scripts/ui/test_hud.gd @@ -1,5 +1,7 @@ extends Control +class_name HUD + export var healthBar_path : NodePath onready var healthBar = get_node(healthBar_path) export var goldText_path : NodePath @@ -27,3 +29,6 @@ func fetch_components(): healthBar = get_node("HealthBar") if goldText == null: goldText = get_node("GoldText") + +func _enter_tree(): + Controller.hud = self diff --git a/project.godot b/project.godot index f9b7886..df5dc41 100644 --- a/project.godot +++ b/project.godot @@ -29,6 +29,11 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://jrpg/scripts/ui/choices_box.gd" }, { +"base": "Control", +"class": "HUD", +"language": "GDScript", +"path": "res://jrpg/scripts/ui/test_hud.gd" +}, { "base": "KinematicBody", "class": "Player", "language": "GDScript", @@ -84,6 +89,7 @@ _global_script_class_icons={ "BasisInteraction": "", "CharacterData": "", "ChoicesBox": "", +"HUD": "", "Player": "", "PlayerInfos": "", "SpeechPanel": "", @@ -105,6 +111,7 @@ config/icon="res://icon.png" [autoload] Controller="*res://jrpg/scripts/misc/controller.gd" +EventDispatcher="*res://jrpg/scripts/misc/event_dispatcher.gd" [editor_plugins]