From abc33fd06c6a1e065fbd672949d3a73f1997e9b7 Mon Sep 17 00:00:00 2001 From: cblech Date: Wed, 23 Jul 2025 20:48:56 +0200 Subject: [PATCH] Added first quests --- dialog/quests/ducks/quest1_ducks_end.dtl | 2 + dialog/quests/ducks/quest1_ducks_start.dtl | 2 + dialog/yeli_quest_select.dtl | 4 ++ dialog/yeli_quest_select.dtl.uid | 1 + prefabs/quests/quest_manager_autoload.tscn | 12 +++++ project.godot | 52 ++++++++++++++++++- resources/quests/demo/1_talk_yeli_1.tres | 10 ++++ resources/quests/demo/2_collect_ducks.tres | 10 ++++ resources/quests/demo/3_talk_yeli_2.tres | 10 ++++ scenes/Babushka_scene_farm_outside_2d.tscn | 23 +++++--- ..._scene_farm_outside_2d_ducksCollected.tscn | 6 --- scenes/Babushka_scene_indoor_common_room.tscn | 5 +- scenes/Babushka_scene_startMenu.tscn | 2 +- scripts/CSharp/Common/NPC/TalkingCharacter.cs | 5 +- scripts/CSharp/Common/Quest/QuestManager.cs | 20 ++++++- scripts/CSharp/Common/Quest/QuestStatus.cs | 8 +-- scripts/GdScript/dialogic_var_setter.gd | 4 ++ scripts/GdScript/dialogic_var_setter.gd.uid | 1 + 18 files changed, 151 insertions(+), 26 deletions(-) create mode 100644 dialog/yeli_quest_select.dtl create mode 100644 dialog/yeli_quest_select.dtl.uid create mode 100644 prefabs/quests/quest_manager_autoload.tscn create mode 100644 resources/quests/demo/1_talk_yeli_1.tres create mode 100644 resources/quests/demo/2_collect_ducks.tres create mode 100644 resources/quests/demo/3_talk_yeli_2.tres create mode 100644 scripts/GdScript/dialogic_var_setter.gd create mode 100644 scripts/GdScript/dialogic_var_setter.gd.uid diff --git a/dialog/quests/ducks/quest1_ducks_end.dtl b/dialog/quests/ducks/quest1_ducks_end.dtl index 2b0da70..a4bf76a 100644 --- a/dialog/quests/ducks/quest1_ducks_end.dtl +++ b/dialog/quests/ducks/quest1_ducks_end.dtl @@ -1,3 +1,5 @@ join vesna center +[quest_complete quest_resource="res://resources/quests/demo/2_collect_ducks.tres"] That’s the last one. I should get back to Yeli. +[quest_activate quest_resource="res://resources/quests/demo/3_talk_yeli_2.tres"] [end_timeline] diff --git a/dialog/quests/ducks/quest1_ducks_start.dtl b/dialog/quests/ducks/quest1_ducks_start.dtl index fd011b5..7c3238c 100644 --- a/dialog/quests/ducks/quest1_ducks_start.dtl +++ b/dialog/quests/ducks/quest1_ducks_start.dtl @@ -1,8 +1,10 @@ join Yeli right join vesna left +[quest_complete quest_resource="res://resources/quests/demo/1_talk_yeli_1.tres"] Yeli (_part_side): Come here, you little quacking beast! - What a mess! - How did you call me? Yeli (_part_side): Vesna, oh, thank goodness! Yeli (_part_side): Please could you get the runner ducks back into their coop? +[quest_activate quest_resource="res://resources/quests/demo/2_collect_ducks.tres"] [end_timeline] diff --git a/dialog/yeli_quest_select.dtl b/dialog/yeli_quest_select.dtl new file mode 100644 index 0000000..19a79cf --- /dev/null +++ b/dialog/yeli_quest_select.dtl @@ -0,0 +1,4 @@ +if {ACTIVEQUEST} == "1_talk_yeli_1": + jump quest1_ducks_start/ +else: + No Dialog for active quest {ACTIVEQUEST} diff --git a/dialog/yeli_quest_select.dtl.uid b/dialog/yeli_quest_select.dtl.uid new file mode 100644 index 0000000..6d7d60b --- /dev/null +++ b/dialog/yeli_quest_select.dtl.uid @@ -0,0 +1 @@ +uid://do3c5uofv5m7b diff --git a/prefabs/quests/quest_manager_autoload.tscn b/prefabs/quests/quest_manager_autoload.tscn new file mode 100644 index 0000000..203ab26 --- /dev/null +++ b/prefabs/quests/quest_manager_autoload.tscn @@ -0,0 +1,12 @@ +[gd_scene load_steps=3 format=3 uid="uid://bworek1jcmq0e"] + +[ext_resource type="Script" uid="uid://dl2uhq12p3qks" path="res://scripts/CSharp/Common/Quest/QuestManager.cs" id="1_anowe"] +[ext_resource type="Script" uid="uid://bukwr1h3hn8sx" path="res://scripts/GdScript/dialogic_var_setter.gd" id="4_v86gc"] + +[node name="QuestManager" type="Node"] +script = ExtResource("1_anowe") + +[node name="DialogicRelay" type="Node" parent="."] +script = ExtResource("4_v86gc") + +[connection signal="DialogicActiveQuest" from="." to="DialogicRelay" method="_SetActiveQuestVar"] diff --git a/project.godot b/project.godot index 605770d..b1097bf 100644 --- a/project.godot +++ b/project.godot @@ -29,9 +29,9 @@ SceneTransition="*res://scenes/SceneTransition.tscn" Dialogic="*res://addons/dialogic/Core/DialogicGameHandler.gd" InventoryManager="*res://scripts/CSharp/Common/Inventory/InventoryManager.cs" Signal_Debugger="*res://addons/SignalVisualizer/Debugger/SignalDebugger.gd" -QuestManager="*res://scripts/CSharp/Common/Quest/QuestManager.cs" FightManagerAutoload="*res://prefabs/fight/fight_manager_autoload.tscn" InputService="*res://scripts/CSharp/Common/Services/InputService.cs" +QuestManager="*res://prefabs/quests/quest_manager_autoload.tscn" [dialogic] @@ -67,6 +67,7 @@ directories/dtl_directory={ "yeli_intro_05": "res://dialog/Scene1_farm_outside/yeli_intro_05.dtl" } variables={ +"ACTIVEQUEST": "none", "MAGICWORD": "Hokus Pokus!s", "PLAYERMOOD": "Good", "SHOW": "IGF" @@ -106,6 +107,55 @@ translation/id_counter=22 translation/locales=["de", "en"] text/autopauses={} glossary/glossary_files=["res://dialog/farming_equipment_glossary.tres"] +directories/tres_directory={ +"1_talk_yeli_1": "res://resources/quests/demo/1_talk_yeli_1.tres", +"2_collect_ducks": "res://resources/quests/demo/2_collect_ducks.tres", +"3_talk_yeli_2": "res://resources/quests/demo/3_talk_yeli_2.tres", +"Babushka_NPC_Namebox_background": "res://dialog/Babushka_NPC_Namebox_background.tres", +"InputFieldsStyle": "res://addons/dialogic/Editor/Events/styles/InputFieldsStyle.tres", +"MainTheme": "res://addons/dialogic/Editor/Theme/MainTheme.tres", +"NPC_narrative": "res://dialog/NPC_narrative.tres", +"New_File": "res://addons/dialogic/New_File.tres", +"PickerTheme": "res://addons/dialogic/Editor/Theme/PickerTheme.tres", +"ResourceMenuHover": "res://addons/dialogic/Editor/Events/styles/ResourceMenuHover.tres", +"ResourceMenuNormal": "res://addons/dialogic/Editor/Events/styles/ResourceMenuNormal.tres", +"ResourceMenuPanelBackground": "res://addons/dialogic/Editor/Events/styles/ResourceMenuPanelBackground.tres", +"SectionPanel": "res://addons/dialogic/Editor/Events/styles/SectionPanel.tres", +"SimpleButtonHover": "res://addons/dialogic/Editor/Events/styles/SimpleButtonHover.tres", +"SimpleButtonNormal": "res://addons/dialogic/Editor/Events/styles/SimpleButtonNormal.tres", +"TextBackground": "res://addons/dialogic/Editor/Events/styles/TextBackground.tres", +"TitleBgStylebox": "res://addons/dialogic/Editor/Common/TitleBgStylebox.tres", +"beet": "res://resources/items/beet.tres", +"beetRoot": "res://resources/quests/beetRoot.tres", +"choice_panel_focus": "res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/choice_panel_focus.tres", +"choice_panel_hover": "res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/choice_panel_hover.tres", +"choice_panel_normal": "res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/choice_panel_normal.tres", +"default_bus_layout": "res://audio/default_bus_layout.tres", +"default_stylebox": "res://addons/dialogic/Modules/DefaultLayoutParts/Layer_SpeakerPortraitTextbox/default_stylebox.tres", +"default_vn_style": "res://addons/dialogic/Modules/DefaultLayoutParts/Style_VN_Default/default_vn_style.tres", +"farming_equipment_glossary": "res://dialog/farming_equipment_glossary.tres", +"hoe": "res://resources/items/hoe.tres", +"preview_character": "res://addons/dialogic/Modules/Character/preview_character.tres", +"rake": "res://resources/items/rake.tres", +"scythe": "res://resources/items/scythe.tres", +"selected_styleboxflat": "res://addons/dialogic/Editor/Events/styles/selected_styleboxflat.tres", +"shovel": "res://resources/items/shovel.tres", +"simple_fade": "res://addons/dialogic/Modules/Background/Transitions/Defaults/simple_fade.tres", +"simple_swipe_gradient": "res://addons/dialogic/Modules/Background/Transitions/simple_swipe_gradient.tres", +"speaker_textbox_style": "res://addons/dialogic/Modules/DefaultLayoutParts/Style_SpeakerTextbox/speaker_textbox_style.tres", +"speechbubble": "res://dialog/speechbubble.tres", +"test": "res://resources/items/test.tres", +"test_01": "res://resources/quests/test_01.tres", +"test_02": "res://resources/quests/test_02.tres", +"test_03": "res://resources/quests/test_03.tres", +"textbubble_style": "res://addons/dialogic/Modules/DefaultLayoutParts/Style_TextBubbles/textbubble_style.tres", +"tomato": "res://resources/items/tomato.tres", +"tomato_seed": "res://resources/items/tomato_seed.tres", +"unselected_stylebox": "res://addons/dialogic/Editor/Events/styles/unselected_stylebox.tres", +"vn_textbox_default_panel": "res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/vn_textbox_default_panel.tres", +"vn_textbox_name_label_panel": "res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/vn_textbox_name_label_panel.tres", +"wateringcan": "res://resources/items/wateringcan.tres" +} [display] diff --git a/resources/quests/demo/1_talk_yeli_1.tres b/resources/quests/demo/1_talk_yeli_1.tres new file mode 100644 index 0000000..acfe1e2 --- /dev/null +++ b/resources/quests/demo/1_talk_yeli_1.tres @@ -0,0 +1,10 @@ +[gd_resource type="Resource" script_class="QuestResource" load_steps=2 format=3 uid="uid://cm8kftow8br00"] + +[ext_resource type="Script" uid="uid://vji5lp4qc8pp" path="res://scripts/CSharp/Common/Quest/QuestResource.cs" id="1_xjwrv"] + +[resource] +script = ExtResource("1_xjwrv") +id = "1_talk_yeli_1" +title = "Talk to Yeli" +description = "" +metadata/_custom_type_script = "uid://vji5lp4qc8pp" diff --git a/resources/quests/demo/2_collect_ducks.tres b/resources/quests/demo/2_collect_ducks.tres new file mode 100644 index 0000000..dd4dde0 --- /dev/null +++ b/resources/quests/demo/2_collect_ducks.tres @@ -0,0 +1,10 @@ +[gd_resource type="Resource" script_class="QuestResource" load_steps=2 format=3 uid="uid://cy0na3ukvpoou"] + +[ext_resource type="Script" uid="uid://vji5lp4qc8pp" path="res://scripts/CSharp/Common/Quest/QuestResource.cs" id="1_wactd"] + +[resource] +script = ExtResource("1_wactd") +id = "2_collect_ducks" +title = "Collect the Ducks" +description = "Collect all 6 ducks running around the farm by aporaching them and pressing [E]" +metadata/_custom_type_script = "uid://vji5lp4qc8pp" diff --git a/resources/quests/demo/3_talk_yeli_2.tres b/resources/quests/demo/3_talk_yeli_2.tres new file mode 100644 index 0000000..fa8fead --- /dev/null +++ b/resources/quests/demo/3_talk_yeli_2.tres @@ -0,0 +1,10 @@ +[gd_resource type="Resource" script_class="QuestResource" load_steps=2 format=3 uid="uid://mf0rdejw8fuk"] + +[ext_resource type="Script" uid="uid://vji5lp4qc8pp" path="res://scripts/CSharp/Common/Quest/QuestResource.cs" id="1_70pjl"] + +[resource] +script = ExtResource("1_70pjl") +id = "3_talk_yeil_2" +title = "Talk to Yeli again" +description = "All ducks are collected. Head back to yeli." +metadata/_custom_type_script = "uid://vji5lp4qc8pp" diff --git a/scenes/Babushka_scene_farm_outside_2d.tscn b/scenes/Babushka_scene_farm_outside_2d.tscn index e9e8db8..03ab03d 100644 --- a/scenes/Babushka_scene_farm_outside_2d.tscn +++ b/scenes/Babushka_scene_farm_outside_2d.tscn @@ -67,6 +67,8 @@ [ext_resource type="Script" uid="uid://d2486x6upmwqq" path="res://scripts/GdScript/dialogic_starter.gd" id="52_lwk6t"] [ext_resource type="PackedScene" uid="uid://sbf12hin4kes" path="res://prefabs/Interactables/trash_object.tscn" id="53_ycj14"] [ext_resource type="PackedScene" uid="uid://muuxxgvx33fp" path="res://prefabs/farm/duck.tscn" id="62_i36hd"] +[ext_resource type="Script" uid="uid://cldtt4atgymm5" path="res://scripts/CSharp/Common/Quest/QuestTrigger.cs" id="66_2065p"] +[ext_resource type="Resource" uid="uid://cm8kftow8br00" path="res://resources/quests/demo/1_talk_yeli_1.tres" id="67_tm0yg"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_wtdui"] shader = ExtResource("13_7p0hq") @@ -1021,7 +1023,8 @@ y_sort_enabled = true [node name="Yeli" parent="YSorted" instance=ExtResource("24_wtdui")] position = Vector2(6403, 3362) -_timelinesToPlay = PackedStringArray("quest1_ducks_start", "quest2_tomatoes_start", "quest2_tomatoes_interim", "quest2_tomatoes_end") +_timelinesToPlay = PackedStringArray("yeli_quest_select") +_retriggerSameTimeline = true [node name="Vesna" parent="YSorted" node_paths=PackedStringArray("_fieldParent") instance=ExtResource("1_7wfwe")] z_index = 1 @@ -2309,6 +2312,9 @@ offset_top = 0.228533 offset_right = -456.339 offset_bottom = 30.2285 +[node name="Control" parent="CanvasLayer" index="3"] +visible = true + [node name="Audio" type="Node" parent="."] [node name="Background Music Ramp up" type="AudioStreamPlayer2D" parent="Audio"] @@ -2350,6 +2356,14 @@ max_distance = 2e+07 playback_type = 2 script = ExtResource("40_w3jkj") +[node name="QuestInstantStart" type="Node" parent="."] + +[node name="QuestTrigger" type="Node" parent="QuestInstantStart"] +script = ExtResource("66_2065p") +questResource = ExtResource("67_tm0yg") +toStatus = 1 +makeCurrent = true + [connection signal="FilledWateringCan" from="YSorted/Vesna" to="Audio/SFX/FillWater SFX2" method="PlayOneShot"] [connection signal="WateringField" from="YSorted/Vesna/FarmingControls" to="Audio/SFX/Watering SFX" method="PlayOneShot"] [connection signal="InteractedTool" from="YSorted/Brünnen/InteractionArea" to="YSorted/Vesna" method="TryFillWateringCan"] @@ -2359,14 +2373,9 @@ script = ExtResource("40_w3jkj") [connection signal="FieldCreated" from="YSorted/Farm visuals/FieldParent" to="Audio/SFX/Farming SFX" method="PlayOneShot"] [connection signal="input_event" from="YSorted/Farm visuals/FieldParent/Area2D" to="YSorted/Vesna/FarmingControls" method="InputEventPressedOn"] [connection signal="GoalReached" from="YSorted/ducks" to="YSorted/ducks/DialogicToggle" method="ToggleDialogue"] -[connection signal="DuckCollected" from="YSorted/ducks/Duck2" to="YSorted/ducks" method="Increment"] -[connection signal="DuckCollected" from="YSorted/ducks/Duck3" to="YSorted/ducks" method="Increment"] -[connection signal="DuckCollected" from="YSorted/ducks/Duck4" to="YSorted/ducks" method="Increment"] -[connection signal="DuckCollected" from="YSorted/ducks/Duck5" to="YSorted/ducks" method="Increment"] -[connection signal="DuckCollected" from="YSorted/ducks/Duck6" to="YSorted/ducks" method="Increment"] -[connection signal="DuckCollected" from="YSorted/ducks/Duck7" to="YSorted/ducks" method="Increment"] [connection signal="Dialogue" from="YSorted/ducks/DialogicToggle" to="YSorted/ducks/dialogic starter" method="open"] [connection signal="finished" from="Audio/Background Music Ramp up" to="Audio/Background Music loop" method="PlayFromOffset"] +[connection signal="ready" from="QuestInstantStart" to="QuestInstantStart/QuestTrigger" method="Trigger"] [editable path="YSorted/Vesna"] [editable path="YSorted/Brünnen/InteractionArea"] diff --git a/scenes/Babushka_scene_farm_outside_2d_ducksCollected.tscn b/scenes/Babushka_scene_farm_outside_2d_ducksCollected.tscn index a7e1dbc..02836e9 100644 --- a/scenes/Babushka_scene_farm_outside_2d_ducksCollected.tscn +++ b/scenes/Babushka_scene_farm_outside_2d_ducksCollected.tscn @@ -2256,12 +2256,6 @@ script = ExtResource("59_0knno") [connection signal="FieldCreated" from="YSorted/Farm visuals/FieldParent" to="Audio/SFX/Farming SFX" method="PlayOneShot"] [connection signal="input_event" from="YSorted/Farm visuals/FieldParent/Area2D" to="YSorted/Vesna/FarmingControls" method="InputEventPressedOn"] [connection signal="GoalReached" from="YSorted/ducks" to="YSorted/ducks/DialogicToggle" method="ToggleDialogue"] -[connection signal="DuckCollected" from="YSorted/ducks/Duck2" to="YSorted/ducks" method="Increment"] -[connection signal="DuckCollected" from="YSorted/ducks/Duck3" to="YSorted/ducks" method="Increment"] -[connection signal="DuckCollected" from="YSorted/ducks/Duck4" to="YSorted/ducks" method="Increment"] -[connection signal="DuckCollected" from="YSorted/ducks/Duck5" to="YSorted/ducks" method="Increment"] -[connection signal="DuckCollected" from="YSorted/ducks/Duck6" to="YSorted/ducks" method="Increment"] -[connection signal="DuckCollected" from="YSorted/ducks/Duck7" to="YSorted/ducks" method="Increment"] [connection signal="Dialogue" from="YSorted/ducks/DialogicToggle" to="YSorted/ducks/dialogic starter" method="open"] [connection signal="finished" from="Audio/Background Music Ramp up" to="Audio/Background Music loop" method="PlayFromOffset"] diff --git a/scenes/Babushka_scene_indoor_common_room.tscn b/scenes/Babushka_scene_indoor_common_room.tscn index fe20862..82617e5 100644 --- a/scenes/Babushka_scene_indoor_common_room.tscn +++ b/scenes/Babushka_scene_indoor_common_room.tscn @@ -22,7 +22,7 @@ [ext_resource type="AudioStream" uid="uid://cohyenfo1rtxh" path="res://audio/sfx/Animals/SFX_Cat_Meow_01.wav" id="16_d7yky"] [ext_resource type="PackedScene" uid="uid://dfvgp1my5rydh" path="res://prefabs/characters/Yeli.tscn" id="16_dhsxs"] [ext_resource type="AudioStream" uid="uid://b2cmf5ie7cwka" path="res://audio/sfx/Animals/SFX_Cat_Meow_02.wav" id="17_7a68a"] -[ext_resource type="Script" uid="uid://cvkw4qd2hxksi" path="res://scripts/GdScript/dialogic_toggle.gd" id="17_k0k8c"] +[ext_resource type="Script" path="res://scripts/GdScript/dialogic_toggle.gd" id="17_k0k8c"] [ext_resource type="AudioStream" uid="uid://cttisejnt2l8f" path="res://audio/sfx/Animals/SFX_Cat_Meow_03.wav" id="18_dhsxs"] [ext_resource type="Script" uid="uid://bqomwxclsbhd3" path="res://scripts/CSharp/Common/Camera/CameraController.cs" id="18_dw4nn"] [ext_resource type="AudioStream" uid="uid://cbmagiou0n0t3" path="res://audio/sfx/Animals/SFX_Cat_Meow_04.wav" id="19_k0k8c"] @@ -30,7 +30,7 @@ [ext_resource type="Script" uid="uid://cldtt4atgymm5" path="res://scripts/CSharp/Common/Quest/QuestTrigger.cs" id="21_blyw3"] [ext_resource type="AudioStream" uid="uid://r2f6xmjvyyjv" path="res://audio/sfx/Animals/SFX_Cat_Purr_01.wav" id="21_ytap8"] [ext_resource type="Script" uid="uid://cfnrd5k1k0gxw" path="res://scripts/CSharp/Common/AudioPlayer.cs" id="22_tggq2"] -[ext_resource type="Resource" uid="uid://cbpurnewhyefa" path="res://resources/quests/beetRoot.tres" id="22_yd2gv"] +[ext_resource type="Resource" path="res://resources/quests/beetRoot.tres" id="22_yd2gv"] [ext_resource type="PackedScene" uid="uid://cgjc4wurbgimy" path="res://prefabs/UI/Inventory/Inventory.tscn" id="24_yd2gv"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_a2ood"] @@ -558,7 +558,6 @@ position = Vector2(-565, 464) [node name="dialogic_toggle" type="Node2D" parent="Yeli"] script = ExtResource("17_k0k8c") -metadata/_custom_type_script = "uid://cvkw4qd2hxksi" [node name="Beetroot Quest trigger" type="Node2D" parent="Yeli"] script = ExtResource("21_blyw3") diff --git a/scenes/Babushka_scene_startMenu.tscn b/scenes/Babushka_scene_startMenu.tscn index f4ea948..262a257 100644 --- a/scenes/Babushka_scene_startMenu.tscn +++ b/scenes/Babushka_scene_startMenu.tscn @@ -6,7 +6,7 @@ [node name="BabushkaSceneStartMenu" type="Node2D"] script = ExtResource("1_fj2fh") -_sceneNamesToLoad = PackedStringArray("res://scenes/Babushka_scene_disclaimer.tscn") +_sceneNamesToLoad = PackedStringArray("res://scenes/Babushka_scene_farm_outside_2d.tscn") [node name="CanvasLayer" type="CanvasLayer" parent="."] diff --git a/scripts/CSharp/Common/NPC/TalkingCharacter.cs b/scripts/CSharp/Common/NPC/TalkingCharacter.cs index 7a12e36..96c5fc5 100644 --- a/scripts/CSharp/Common/NPC/TalkingCharacter.cs +++ b/scripts/CSharp/Common/NPC/TalkingCharacter.cs @@ -6,7 +6,7 @@ public partial class TalkingCharacter : Node2D { [Export] private AnimatedSprite2D? _sprite; [Export] private string[] _timelinesToPlay; - + [Export] private bool _retriggerSameTimeline = false; private bool _isTalking = true; private int _timelineIndex = 0; @@ -32,7 +32,8 @@ public partial class TalkingCharacter : Node2D _sprite.Animation = "talk"; _isTalking = true; EmitSignal(SignalName.Talking, _timelinesToPlay[_timelineIndex]); - _timelineIndex++; + if (!_retriggerSameTimeline) + _timelineIndex++; } if (_sprite != null) _sprite.Play(); diff --git a/scripts/CSharp/Common/Quest/QuestManager.cs b/scripts/CSharp/Common/Quest/QuestManager.cs index e6d5a1b..bde1b93 100644 --- a/scripts/CSharp/Common/Quest/QuestManager.cs +++ b/scripts/CSharp/Common/Quest/QuestManager.cs @@ -16,13 +16,19 @@ public partial class QuestManager : Node [Signal] public delegate void QuestsChangedEventHandler(); + [Signal] + public delegate void DialogicActiveQuestEventHandler(string value); + + [Export(PropertyHint.ArrayType)] + public QuestResource[] questsAccessibleFromDialogic; + public override void _EnterTree() { Instance = this; } private Godot.Collections.Dictionary _questStatus = new(); - + private QuestResource? _followQuest; @@ -37,6 +43,7 @@ public partial class QuestManager : Node value.status = newStatus; EmitSignalQuestsChanged(); + EmitSignalDialogicActiveQuest(_followQuest?.id ?? "none"); if (newStatus == QuestStatus.Status.Active) { @@ -57,7 +64,7 @@ public partial class QuestManager : Node { if (_questStatus.TryGetValue(questResource, out var status)) return status; - + status = new QuestStatus(); _questStatus.Add(questResource, status); return status; @@ -72,5 +79,14 @@ public partial class QuestManager : Node { _followQuest = questResource; EmitSignalQuestsChanged(); + EmitSignalDialogicActiveQuest(_followQuest?.id ?? "none"); + } + + // functions to call from Dialogic + public void DlSetQuestActiveAndFollow(string questId) + { + var resource = questsAccessibleFromDialogic.First(qr => qr.id == questId); + ChangeQuestStatus(resource, QuestStatus.Status.Active); + SetFollowQuest(resource); } } diff --git a/scripts/CSharp/Common/Quest/QuestStatus.cs b/scripts/CSharp/Common/Quest/QuestStatus.cs index dbb943f..43f57b2 100644 --- a/scripts/CSharp/Common/Quest/QuestStatus.cs +++ b/scripts/CSharp/Common/Quest/QuestStatus.cs @@ -6,10 +6,10 @@ public partial class QuestStatus : GodotObject { public enum Status { - Hidden, - Active, - Done, - Canceled, + Hidden = 0, + Active = 1, + Done = 2, + Canceled = 3, } public Status status = Status.Hidden; diff --git a/scripts/GdScript/dialogic_var_setter.gd b/scripts/GdScript/dialogic_var_setter.gd new file mode 100644 index 0000000..7d1b50f --- /dev/null +++ b/scripts/GdScript/dialogic_var_setter.gd @@ -0,0 +1,4 @@ +extends Node + +func _SetActiveQuestVar(value:String): + Dialogic.VAR.ACTIVEQUEST = value diff --git a/scripts/GdScript/dialogic_var_setter.gd.uid b/scripts/GdScript/dialogic_var_setter.gd.uid new file mode 100644 index 0000000..9eb6355 --- /dev/null +++ b/scripts/GdScript/dialogic_var_setter.gd.uid @@ -0,0 +1 @@ +uid://bukwr1h3hn8sx