diff --git a/project.godot b/project.godot index bea9e10..f145cf9 100644 --- a/project.godot +++ b/project.godot @@ -116,6 +116,7 @@ directories/tres_directory={ "4_collect_tools": "res://resources/quests/demo/4_collect_tools.tres", "5_talk_yeli_3": "res://resources/quests/demo/5_talk_yeli_3.tres", "6_till_and_water": "res://resources/quests/demo/6_till_and_water.tres", +"7_talk_yeli_inside_1": "res://resources/quests/demo/7_talk_yeli_inside_1.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", diff --git a/resources/quests/demo/7_talk_yeli_inside_1.tres b/resources/quests/demo/7_talk_yeli_inside_1.tres new file mode 100644 index 0000000..295fc36 --- /dev/null +++ b/resources/quests/demo/7_talk_yeli_inside_1.tres @@ -0,0 +1,10 @@ +[gd_resource type="Resource" script_class="QuestResource" load_steps=2 format=3 uid="uid://byjqeukpibkvi"] + +[ext_resource type="Script" uid="uid://vji5lp4qc8pp" path="res://scripts/CSharp/Common/Quest/QuestResource.cs" id="1_f2jsb"] + +[resource] +script = ExtResource("1_f2jsb") +id = "7_talk_yeli_inside_1" +title = "Talk to Yeli in the house" +description = "Go inside the house and find yeli again" +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 d3824b4..050d83d 100644 --- a/scenes/Babushka_scene_farm_outside_2d.tscn +++ b/scenes/Babushka_scene_farm_outside_2d.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=113 format=3 uid="uid://gigb28qk8t12"] +[gd_scene load_steps=119 format=3 uid="uid://gigb28qk8t12"] [ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Player2D.tscn" id="1_7wfwe"] [ext_resource type="Texture2D" uid="uid://8sr11ex30n0m" path="res://art/mockups/Kenney_Backgrounds/Samples/uncolored_hills.png" id="2_7b2ri"] @@ -73,6 +73,10 @@ [ext_resource type="Resource" uid="uid://d2swjixbnqkbw" path="res://resources/quests/demo/4_collect_tools.tres" id="68_lbnqo"] [ext_resource type="Script" uid="uid://be54lnb6gg81f" path="res://scripts/CSharp/Common/Inventory/ItemInstance.cs" id="69_4rgbr"] [ext_resource type="Resource" uid="uid://5t8g0firdif0" path="res://resources/quests/demo/5_talk_yeli_3.tres" id="69_l4wxt"] +[ext_resource type="Script" uid="uid://bhbldab74vmhy" path="res://scripts/CSharp/Common/QuestBehaviour/DetectFieldWork.cs" id="74_fv1t2"] +[ext_resource type="Resource" uid="uid://h05jgxqtq37m" path="res://resources/quests/demo/6_till_and_water.tres" id="75_l7ekk"] +[ext_resource type="Resource" uid="uid://byjqeukpibkvi" path="res://resources/quests/demo/7_talk_yeli_inside_1.tres" id="76_xcwle"] +[ext_resource type="Script" uid="uid://dih1b0opgc3f7" path="res://scripts/GdScript/dialogic_start_specific.gd" id="77_l7ekk"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_wtdui"] shader = ExtResource("13_7p0hq") @@ -2388,6 +2392,15 @@ _itemsToContain = Array[Resource]([SubResource("Resource_y820s"), SubResource("R _onActiveQuest = ExtResource("68_lbnqo") _toNextQuest = ExtResource("69_l4wxt") +[node name="FieldWorkTrigger" type="Node" parent="SpeicialQuestTrigger"] +script = ExtResource("74_fv1t2") +_onActiveQuest = ExtResource("75_l7ekk") +_toNextQuest = ExtResource("76_xcwle") + +[node name="StartDialog" type="Node" parent="SpeicialQuestTrigger/FieldWorkTrigger"] +script = ExtResource("77_l7ekk") +timeline = "quest2_tomatoes_end" + [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"] @@ -2406,6 +2419,7 @@ _toNextQuest = ExtResource("69_l4wxt") [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="SpeicialQuestTrigger/QuestInstantStart" to="SpeicialQuestTrigger/QuestInstantStart/QuestTrigger" method="Trigger"] +[connection signal="OnFulfilled" from="SpeicialQuestTrigger/FieldWorkTrigger" to="SpeicialQuestTrigger/FieldWorkTrigger/StartDialog" method="start"] [editable path="YSorted/Vesna"] [editable path="YSorted/BrĂ¼nnen/InteractionArea"] diff --git a/scripts/CSharp/Common/Farming/WateringCanState.cs b/scripts/CSharp/Common/Farming/WateringCanState.cs index 333a44d..cc6bdaf 100644 --- a/scripts/CSharp/Common/Farming/WateringCanState.cs +++ b/scripts/CSharp/Common/Farming/WateringCanState.cs @@ -1,3 +1,5 @@ +using System; + namespace Babushka.scripts.CSharp.Common.Farming; /// @@ -26,6 +28,7 @@ public static class WateringCanState public delegate void WateringCanDelegate(bool state); public static event WateringCanDelegate WateringCanActiveStateChanged; + public static event Action? OnWater; @@ -43,7 +46,10 @@ public static class WateringCanState public static void Water() { if(_fillstate > 0) + { _fillstate--; + OnWater?.Invoke(); + } } /// diff --git a/scripts/CSharp/Common/QuestBehaviour/DetectFieldWork.cs b/scripts/CSharp/Common/QuestBehaviour/DetectFieldWork.cs new file mode 100644 index 0000000..2e89bdb --- /dev/null +++ b/scripts/CSharp/Common/QuestBehaviour/DetectFieldWork.cs @@ -0,0 +1,37 @@ +using Godot; +using System; +using Babushka.scripts.CSharp.Common.Farming; +using Babushka.scripts.CSharp.Common.Quest; + +public partial class DetectFieldWork : QuestFulfillmentBase +{ + private int wateredCounter = 0; + + [Export] private int _wateringNeeded = 5; + + public override void _EnterTree() + { + WateringCanState.OnWater += CountWater; + QuestManager.Instance!.QuestsChanged += CheckFieldWork; + } + + public override void _ExitTree() + { + WateringCanState.OnWater -= CountWater; + QuestManager.Instance!.QuestsChanged -= CheckFieldWork; + } + + public void CountWater() + { + wateredCounter++; + CheckFieldWork(); + } + + public void CheckFieldWork() + { + if (IsQuestActive() && wateredCounter >= _wateringNeeded) + { + Fulfill(); + } + } +} diff --git a/scripts/CSharp/Common/QuestBehaviour/DetectFieldWork.cs.uid b/scripts/CSharp/Common/QuestBehaviour/DetectFieldWork.cs.uid new file mode 100644 index 0000000..5faeb37 --- /dev/null +++ b/scripts/CSharp/Common/QuestBehaviour/DetectFieldWork.cs.uid @@ -0,0 +1 @@ +uid://bhbldab74vmhy diff --git a/scripts/CSharp/Common/QuestBehaviour/DetectToolCollection.cs b/scripts/CSharp/Common/QuestBehaviour/DetectToolCollection.cs deleted file mode 100644 index e9a7c1c..0000000 --- a/scripts/CSharp/Common/QuestBehaviour/DetectToolCollection.cs +++ /dev/null @@ -1,6 +0,0 @@ -using Godot; -using System; - -public partial class DetectToolCollection : Node -{ -} diff --git a/scripts/CSharp/Common/QuestBehaviour/DetectToolCollection.cs.uid b/scripts/CSharp/Common/QuestBehaviour/DetectToolCollection.cs.uid deleted file mode 100644 index 0ed4b39..0000000 --- a/scripts/CSharp/Common/QuestBehaviour/DetectToolCollection.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://caohn76m3n3nm diff --git a/scripts/CSharp/Common/QuestBehaviour/QuestFulfillmentBase.cs b/scripts/CSharp/Common/QuestBehaviour/QuestFulfillmentBase.cs index 8b551a6..17f840a 100644 --- a/scripts/CSharp/Common/QuestBehaviour/QuestFulfillmentBase.cs +++ b/scripts/CSharp/Common/QuestBehaviour/QuestFulfillmentBase.cs @@ -3,6 +3,12 @@ using System; using System.Linq; using Babushka.scripts.CSharp.Common.Quest; +/// +/// Acts as a base for scripts to check for conditions to complete quests. +/// +/// The derived Class is responsible for triggering the Check. +/// It is recommended to always check on QuestManager.Instance!.QuestsChanged +/// public abstract partial class QuestFulfillmentBase : Node { [Export] private QuestResource _onActiveQuest; @@ -12,6 +18,8 @@ public abstract partial class QuestFulfillmentBase : Node [Export] private bool _whenFulfilledSetNextQuestToActive = true; [Export] private bool _whenFulfilledSetNextQuestToFollow = true; + [Signal] private delegate void OnFulfilledEventHandler(); + protected void Fulfill() { if (_whenFulfilledSetActiveQuestToDone) @@ -26,6 +34,8 @@ public abstract partial class QuestFulfillmentBase : Node { QuestManager.Instance!.SetFollowQuest(_toNextQuest); } + + EmitSignalOnFulfilled(); } protected bool IsQuestActive() diff --git a/scripts/CSharp/Common/SceneTransition.cs b/scripts/CSharp/Common/SceneTransition.cs index e6c5426..7649041 100644 --- a/scripts/CSharp/Common/SceneTransition.cs +++ b/scripts/CSharp/Common/SceneTransition.cs @@ -17,7 +17,7 @@ public partial class SceneTransition : Node public void LoadSceneAtIndex(int index) { string sceneName = _sceneNamesToLoad[index]; - SceneTransitionThreaded.Instance.ChangeSceneToFileThreaded(sceneName); + SceneTransitionThreaded.Instance.ChangeSceneToFile(sceneName); UnloadAfterDelay(); } diff --git a/scripts/GdScript/dialogic_start_specific.gd b/scripts/GdScript/dialogic_start_specific.gd new file mode 100644 index 0000000..380197e --- /dev/null +++ b/scripts/GdScript/dialogic_start_specific.gd @@ -0,0 +1,7 @@ +extends Node +class_name DialogicStartSpecific + +@export var timeline : String + +func start(): + Dialogic.start(timeline) diff --git a/scripts/GdScript/dialogic_start_specific.gd.uid b/scripts/GdScript/dialogic_start_specific.gd.uid new file mode 100644 index 0000000..fe5ba74 --- /dev/null +++ b/scripts/GdScript/dialogic_start_specific.gd.uid @@ -0,0 +1 @@ +uid://dih1b0opgc3f7