diff --git a/prefabs/farm/base_field.tscn b/prefabs/farm/base_field.tscn index f000cf4..55ee78b 100644 --- a/prefabs/farm/base_field.tscn +++ b/prefabs/farm/base_field.tscn @@ -28,7 +28,7 @@ resource_local_to_scene = true radius = 325.2599 -[node name="BaseField" type="Node2D"] +[node name="BaseField" type="Node2D" groups=["Saveable"]] script = ExtResource("1_4mg73") Payload = 0 @@ -38,13 +38,13 @@ z_index = 1 scale = Vector2(1.3499999, 1.5) texture = ExtResource("9_wx561") -[node name="FieldBehaviour" type="Sprite2D" parent="." node_paths=PackedStringArray("_fieldIndex", "_fieldSprite", "_maskSprite", "_outlineSprite", "PlantingInteraction", "FieldInteractionArea", "PlantingPlaceholder", "_wateringParticles")] +[node name="FieldBehaviour" type="Sprite2D" parent="." node_paths=PackedStringArray("_fieldIndex", "_saveIdHolder", "_fieldSprite", "_maskSprite", "_outlineSprite", "PlantingInteraction", "FieldInteractionArea", "PlantingPlaceholder", "_wateringParticles")] visible = false z_index = -1 scale = Vector2(0.9, 1) script = ExtResource("1_qa01x") -SaveId = "field" _fieldIndex = NodePath("..") +_saveIdHolder = NodePath("..") _sceneKeyProvider = ExtResource("11_cjahb") FieldState = 0 _fieldSprite = NodePath("MaskedField/FieldTexture") diff --git a/project.godot b/project.godot index 7d188a7..a88b31e 100644 --- a/project.godot +++ b/project.godot @@ -32,7 +32,6 @@ InputService="*res://scripts/CSharp/Common/Services/InputService.cs" QuestManager="*res://prefabs/quests/quest_manager_autoload.tscn" Signal_Debugger="*res://addons/SignalVisualizer/Debugger/SignalDebugger.gd" FightWorldAutoload="*res://prefabs/fight/fight_world_autoload.tscn" -FieldService="*res://scripts/CSharp/Common/Farming/FieldService.cs" SaveGameManager="*res://scripts/CSharp/Common/Savegame/SaveGameManager.cs" SettingsSaveController="*res://scripts/CSharp/Common/Savegame/SettingsSaveController.cs" diff --git a/scenes/Babushka_scene_farm_outside_2d.tscn b/scenes/Babushka_scene_farm_outside_2d.tscn index 91f359e..9a09b1e 100644 --- a/scenes/Babushka_scene_farm_outside_2d.tscn +++ b/scenes/Babushka_scene_farm_outside_2d.tscn @@ -1142,58 +1142,72 @@ position = Vector2(0, -200) [node name="BaseField" parent="YSorted/FieldParent/right" instance=ExtResource("78_xcwle")] position = Vector2(8807, 3061) +metadata/SaveID = "533e356b-386b-49c9-beb1-4484f2a5164f" [node name="BaseField2" parent="YSorted/FieldParent/right" instance=ExtResource("78_xcwle")] position = Vector2(9335, 3562) Payload = 1 +metadata/SaveID = "79084490-9e12-4153-9ae8-6162b5348c37" [node name="BaseField3" parent="YSorted/FieldParent/right" instance=ExtResource("78_xcwle")] position = Vector2(9854, 3071) Payload = 2 +metadata/SaveID = "7332aadf-2583-468b-889c-ccbad96137f8" [node name="BaseField4" parent="YSorted/FieldParent/right" instance=ExtResource("78_xcwle")] position = Vector2(10361, 3536) Payload = 3 +metadata/SaveID = "493f7b1f-3d01-4d66-b668-6014ef9b3c15" [node name="BaseField5" parent="YSorted/FieldParent/right" instance=ExtResource("78_xcwle")] position = Vector2(10948, 3025) Payload = 4 +metadata/SaveID = "ba9d21eb-7c31-4459-bd90-ae23e9a09eb1" [node name="BaseField6" parent="YSorted/FieldParent/right" instance=ExtResource("78_xcwle")] position = Vector2(11296, 3607) Payload = 5 +metadata/SaveID = "e6a3367e-afe1-4c5d-abd9-153cc365dce0" [node name="BaseField7" parent="YSorted/FieldParent/right" instance=ExtResource("78_xcwle")] position = Vector2(11869, 3026) Payload = 6 +metadata/SaveID = "08de526f-e22f-42a4-a3f9-549d2dc15b5d" [node name="BaseField8" parent="YSorted/FieldParent/right" instance=ExtResource("78_xcwle")] position = Vector2(12353, 3554) Payload = 7 +metadata/SaveID = "9fd46633-8028-48e6-9176-ffe8c7a26a2e" [node name="BaseField9" parent="YSorted/FieldParent/right" instance=ExtResource("78_xcwle")] position = Vector2(12828, 2999) Payload = 8 +metadata/SaveID = "82e139eb-47f4-4ce4-962f-f72d22f9fe45" [node name="BaseField10" parent="YSorted/FieldParent/right" instance=ExtResource("78_xcwle")] position = Vector2(13285, 3536) Payload = 9 +metadata/SaveID = "03ff923a-614a-4fc9-8865-f5290ec16169" [node name="BaseField11" parent="YSorted/FieldParent/right" instance=ExtResource("78_xcwle")] position = Vector2(13733, 2990) Payload = 10 +metadata/SaveID = "1347c031-e8c0-44f9-9d42-80084ae9bc29" [node name="BaseField12" parent="YSorted/FieldParent/right" instance=ExtResource("78_xcwle")] position = Vector2(14261, 3474) Payload = 11 +metadata/SaveID = "c0b02859-bd5c-4780-8ca7-80b4234ee1d7" [node name="BaseField13" parent="YSorted/FieldParent/right" instance=ExtResource("78_xcwle")] position = Vector2(14753, 2982) Payload = 12 +metadata/SaveID = "bee82b2a-a437-4d3a-b003-dac55dfd24aa" [node name="BaseField14" parent="YSorted/FieldParent/right" instance=ExtResource("78_xcwle")] position = Vector2(15201, 3519) Payload = 13 +metadata/SaveID = "4750a191-6902-46d4-9b2e-964c1aa0a29c" [node name="left" type="Node2D" parent="YSorted/FieldParent"] position = Vector2(-8661, -143) @@ -1201,50 +1215,62 @@ position = Vector2(-8661, -143) [node name="BaseField" parent="YSorted/FieldParent/left" instance=ExtResource("78_xcwle")] position = Vector2(8807, 3061) Payload = 14 +metadata/SaveID = "b44ef2e7-898a-40d0-975b-ba75d7df4601" [node name="BaseField2" parent="YSorted/FieldParent/left" instance=ExtResource("78_xcwle")] position = Vector2(9227, 3562) Payload = 15 +metadata/SaveID = "5705ba02-f444-4f2b-b527-b95578132b87" [node name="BaseField3" parent="YSorted/FieldParent/left" instance=ExtResource("78_xcwle")] position = Vector2(9756, 3111) Payload = 16 +metadata/SaveID = "bca9073b-0b2f-4371-a645-a37aa04f4e23" [node name="BaseField4" parent="YSorted/FieldParent/left" instance=ExtResource("78_xcwle")] position = Vector2(10322, 3536) Payload = 17 +metadata/SaveID = "f636a1ef-016d-4361-9b6e-1d59262a8c04" [node name="BaseField5" parent="YSorted/FieldParent/left" instance=ExtResource("78_xcwle")] position = Vector2(10810, 3055) Payload = 18 +metadata/SaveID = "d074a30d-3f52-4788-879a-4ea8c5818c32" [node name="BaseField6" parent="YSorted/FieldParent/left" instance=ExtResource("78_xcwle")] position = Vector2(11266, 3607) Payload = 19 +metadata/SaveID = "8296a15c-be4a-4127-b0f7-8a330dd2a843" [node name="BaseField7" parent="YSorted/FieldParent/left" instance=ExtResource("78_xcwle")] position = Vector2(11741, 3026) Payload = 20 +metadata/SaveID = "02468d9f-0120-42ff-806d-0aaa351f055c" [node name="BaseField8" parent="YSorted/FieldParent/left" instance=ExtResource("78_xcwle")] position = Vector2(12255, 3593) Payload = 21 +metadata/SaveID = "803f7df5-23a8-424a-8389-08371ea80101" [node name="BaseField9" parent="YSorted/FieldParent/left" instance=ExtResource("78_xcwle")] position = Vector2(12690, 3019) Payload = 22 +metadata/SaveID = "88efb617-5e57-4b16-8ceb-c45c56463690" [node name="BaseField10" parent="YSorted/FieldParent/left" instance=ExtResource("78_xcwle")] position = Vector2(13216, 3556) Payload = 23 +metadata/SaveID = "ca6c1e3d-2c4e-4977-a89e-55d265f65faf" [node name="BaseField11" parent="YSorted/FieldParent/left" instance=ExtResource("78_xcwle")] position = Vector2(13684, 3000) Payload = 24 +metadata/SaveID = "262fbec5-597d-432e-8dd0-50d53fd51b59" [node name="BaseField12" parent="YSorted/FieldParent/left" instance=ExtResource("78_xcwle")] position = Vector2(14143, 3523) Payload = 25 +metadata/SaveID = "05389ea3-d19b-42fc-8bf0-b0755437ec10" [node name="Farm visuals" type="Node2D" parent="YSorted"] position = Vector2(-60, 122) @@ -2542,10 +2568,12 @@ script = ExtResource("76_l7ekk") _variableResource = ExtResource("77_xcwle") _payloadToSet = "farmOutside" -[node name="SaveGameCheat" type="Node" parent="."] +[node name="SaveSystem" type="Node" parent="."] + +[node name="SaveGameCheat" type="Node" parent="SaveSystem"] script = ExtResource("79_065st") -[node name="SaveIDProvider" type="Node" parent="."] +[node name="SaveIDProvider" type="Node" parent="SaveSystem"] script = ExtResource("80_w1kgo") [connection signal="FilledWateringCan" from="YSorted/Vesna" to="Audio/SFX/FillWater SFX2" method="PlayOneShot"] diff --git a/scenes/Babushka_scene_outside_beets.tscn b/scenes/Babushka_scene_outside_beets.tscn index a259778..cb7f0da 100644 --- a/scenes/Babushka_scene_outside_beets.tscn +++ b/scenes/Babushka_scene_outside_beets.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=96 format=3 uid="uid://b3ibx4resa1f3"] +[gd_scene load_steps=98 format=3 uid="uid://b3ibx4resa1f3"] [ext_resource type="Script" uid="uid://cssdu8viimwm6" path="res://scripts/CSharp/Common/SceneTransition.cs" id="1_6krrk"] [ext_resource type="Script" uid="uid://bqomwxclsbhd3" path="res://scripts/CSharp/Common/Camera/CameraController.cs" id="2_4ktoi"] @@ -52,7 +52,9 @@ [ext_resource type="AudioStream" uid="uid://bxh5m04vdo0sr" path="res://audio/sfx/Farming/SFX_Harke_04_Solo.wav" id="57_euap5"] [ext_resource type="Resource" uid="uid://tt3d166mntmi" path="res://resources/low code/farming/var_sceneNameProvider.tres" id="57_hpgl7"] [ext_resource type="Script" uid="uid://cfnrd5k1k0gxw" path="res://scripts/CSharp/Common/AudioPlayer2D.cs" id="58_m3hs4"] +[ext_resource type="Script" uid="uid://iquhbkr7pqeg" path="res://scripts/CSharp/Common/Savegame/SaveCheats.cs" id="58_qavgq"] [ext_resource type="AudioStream" uid="uid://dapsknn486aee" path="res://audio/sfx/Farming/SFX_WateringPlants_01.wav" id="59_km2vg"] +[ext_resource type="Script" uid="uid://ca4s0algeij1h" path="res://scripts/CSharp/Common/Savegame/SaveIDProviderTool.cs" id="59_njxly"] [ext_resource type="AudioStream" uid="uid://dnyne8wov50so" path="res://audio/sfx/Farming/SFX_WateringPlants_02.wav" id="60_qi2gu"] [ext_resource type="AudioStream" uid="uid://fsiypqhql67w" path="res://audio/sfx/Farming/SFX_GettingWater_01.wav" id="61_wy1mx"] [ext_resource type="AudioStream" uid="uid://foyw26hq1qp5" path="res://audio/sfx/Farming/SFX_GettingWater_02.wav" id="62_kmjnt"] @@ -1749,9 +1751,11 @@ scale = Vector2(1, 0.993819) [node name="BaseField" parent="YSorted/Farm visuals/FieldParent" instance=ExtResource("40_efblm")] position = Vector2(651, 2630.26) scale = Vector2(1, 1.00622) +metadata/SaveID = "b3b47e69-6115-4405-8da6-508b783823d2" [node name="FieldBehaviour" parent="YSorted/Farm visuals/FieldParent/BaseField" index="1"] visible = true +metadata/SaveID = "7a8210bf-479d-4b4c-9758-98d23e59d5d7" [node name="Beet2" parent="YSorted/Farm visuals/FieldParent/BaseField/FieldBehaviour/PlantPlaceholder" index="0" node_paths=PackedStringArray("_field") instance=ExtResource("41_vyqmy")] _state = 2 @@ -1767,9 +1771,11 @@ shape = SubResource("CircleShape2D_qavgq") position = Vector2(1226, 3098.15) scale = Vector2(1, 1.00622) Payload = 1 +metadata/SaveID = "f536efd3-3da8-4ef5-a520-570220e6c19f" [node name="FieldBehaviour" parent="YSorted/Farm visuals/FieldParent/BaseField2" index="1"] visible = true +metadata/SaveID = "a1d8a0a2-c51c-4410-83c3-0edb31cbf2de" [node name="Beet2" parent="YSorted/Farm visuals/FieldParent/BaseField2/FieldBehaviour/PlantPlaceholder" index="0" node_paths=PackedStringArray("_field") instance=ExtResource("41_vyqmy")] _state = 2 @@ -1785,9 +1791,11 @@ shape = SubResource("CircleShape2D_njxly") position = Vector2(1782, 2606.11) scale = Vector2(1, 1.00622) Payload = 2 +metadata/SaveID = "14ce64d5-8a4d-43b9-a8ff-3a57725c4dc8" [node name="FieldBehaviour" parent="YSorted/Farm visuals/FieldParent/BaseField3" index="1"] visible = true +metadata/SaveID = "79a65532-cb2b-4268-8eb0-8c41a3935cbb" [node name="Beet2" parent="YSorted/Farm visuals/FieldParent/BaseField3/FieldBehaviour/PlantPlaceholder" index="0" node_paths=PackedStringArray("_field") instance=ExtResource("41_vyqmy")] _state = 2 @@ -1803,10 +1811,12 @@ shape = SubResource("CircleShape2D_54ty3") position = Vector2(2559, 2624.22) scale = Vector2(1, 1.00622) Payload = 3 +metadata/SaveID = "6872ce5d-6f42-47d7-97e2-a7214ff3b08c" [node name="FieldBehaviour" parent="YSorted/Farm visuals/FieldParent/BaseField4" index="1"] visible = true FieldState = 3 +metadata/SaveID = "13fa64a3-01dc-4fd8-822e-0839c0da3163" [node name="Beet2" parent="YSorted/Farm visuals/FieldParent/BaseField4/FieldBehaviour/PlantPlaceholder" index="0" node_paths=PackedStringArray("_field") instance=ExtResource("41_vyqmy")] _state = 2 @@ -1822,10 +1832,12 @@ shape = SubResource("CircleShape2D_gbxtf") position = Vector2(3305, 2624.22) scale = Vector2(1, 1.00622) Payload = 4 +metadata/SaveID = "f163c38d-9ee0-4844-9def-479833febb4e" [node name="FieldBehaviour" parent="YSorted/Farm visuals/FieldParent/BaseField5" index="1"] visible = true FieldState = 3 +metadata/SaveID = "414ecdb9-f3c4-4fb9-81bd-6ca575784f78" [node name="Beet2" parent="YSorted/Farm visuals/FieldParent/BaseField5/FieldBehaviour/PlantPlaceholder" index="0" node_paths=PackedStringArray("_field") instance=ExtResource("41_vyqmy")] _state = 2 @@ -1841,10 +1853,12 @@ shape = SubResource("CircleShape2D_6krrk") position = Vector2(4033, 2618.18) scale = Vector2(1, 1.00622) Payload = 5 +metadata/SaveID = "da691381-ee82-4f86-abf3-dda2c9f19337" [node name="FieldBehaviour" parent="YSorted/Farm visuals/FieldParent/BaseField6" index="1"] visible = true FieldState = 3 +metadata/SaveID = "b235febb-b231-4f8c-94e9-1f9d9f115b08" [node name="Beet2" parent="YSorted/Farm visuals/FieldParent/BaseField6/FieldBehaviour/PlantPlaceholder" index="0" node_paths=PackedStringArray("_field") instance=ExtResource("41_vyqmy")] _state = 1 @@ -1860,10 +1874,12 @@ shape = SubResource("CircleShape2D_4ktoi") position = Vector2(4755, 2630.26) scale = Vector2(1, 1.00622) Payload = 6 +metadata/SaveID = "8116fa8b-b164-4d39-a1ed-6cd476d18f94" [node name="FieldBehaviour" parent="YSorted/Farm visuals/FieldParent/BaseField7" index="1"] visible = true FieldState = 3 +metadata/SaveID = "9ccdba91-812a-4c13-9ee0-12472e174fc9" [node name="Beet2" parent="YSorted/Farm visuals/FieldParent/BaseField7/FieldBehaviour/PlantPlaceholder" index="0" node_paths=PackedStringArray("_field") instance=ExtResource("41_vyqmy")] _state = 2 @@ -1879,10 +1895,12 @@ shape = SubResource("CircleShape2D_aaup4") position = Vector2(4418, 3226.95) scale = Vector2(1, 1.00622) Payload = 7 +metadata/SaveID = "5298f423-4c3b-45b5-94fb-d4aef36bac21" [node name="FieldBehaviour" parent="YSorted/Farm visuals/FieldParent/BaseField8" index="1"] visible = true FieldState = 3 +metadata/SaveID = "da44e54a-0b76-4888-ad8b-782a9d146fa3" [node name="Beet2" parent="YSorted/Farm visuals/FieldParent/BaseField8/FieldBehaviour/PlantPlaceholder" index="0" node_paths=PackedStringArray("_field") instance=ExtResource("41_vyqmy")] _state = 2 @@ -1898,9 +1916,11 @@ shape = SubResource("CircleShape2D_v10dc") position = Vector2(5317, 3208.83) scale = Vector2(1, 1.00622) Payload = 8 +metadata/SaveID = "0de8dc13-5851-4471-be35-309cd6687ebc" [node name="FieldBehaviour" parent="YSorted/Farm visuals/FieldParent/BaseField9" index="1"] visible = true +metadata/SaveID = "9919b294-04a1-4a16-9783-38c8aa0e291c" [node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField9" index="7"] visible = false @@ -2031,6 +2051,14 @@ script = ExtResource("56_34r5t") _variableResource = ExtResource("57_hpgl7") _payloadToSet = "beetRootScene" +[node name="SaveSystem" type="Node" parent="."] + +[node name="SaveGameCheat" type="Node" parent="SaveSystem"] +script = ExtResource("58_qavgq") + +[node name="SaveIDProvider" type="Node" parent="SaveSystem"] +script = ExtResource("59_njxly") + [connection signal="FilledWateringCan" from="YSorted/Vesna" to="Audio/SFX/FillWater SFX2" method="PlayOneShot"] [connection signal="InteractedTool" from="YSorted/BrĂ¼nnen/InteractionArea" to="YSorted/Vesna" method="TryFillWateringCan"] [connection signal="InteractedTool" from="YSorted/Blocker/BackToFarm" to="." method="LoadSceneAtIndex"] diff --git a/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs b/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs index 78e575a..52b02a5 100644 --- a/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs +++ b/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs @@ -16,8 +16,8 @@ namespace Babushka.scripts.CSharp.Common.Farming; public partial class FieldBehaviour2D : Sprite2D, ISaveable { [ExportGroup("Persistence")] - [Export] public string SaveId = ""; [Export] private VariableNode _fieldIndex; + [Export] private Node _saveIdHolder; [Export] public VariableResource _sceneKeyProvider; [Export] public FieldState FieldState = FieldState.Tilled; @@ -78,8 +78,6 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable _currentPlant = PlantingPlaceholder.GetChild(0); UpdateFieldState(FieldState); - FieldService.Instance.TryAddEntry(_sceneKeyProvider.Payload.AsString(),_fieldIndex.Payload.AsInt32(), this); - int randomIndex = new Random().Next(0, _maskTexture.Length); _maskSprite.Texture = _maskTexture[randomIndex]; _outlineSprite.Texture = _maskOutlineTextures[randomIndex]; @@ -202,12 +200,13 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable ); } - SavegameService.AppendDataToSave(SaveId + _fieldIndex.Payload.AsString(), payloadData); + string id = _saveIdHolder.GetMeta("SaveID").AsString(); + SavegameService.AppendDataToSave(id, payloadData); } public void LoadFromSaveData() { - var id = SaveId + _fieldIndex.Payload.AsString(); + string id = _saveIdHolder.GetMeta("SaveID").AsString(); Dictionary save = SavegameService.GetSaveData(id); diff --git a/scripts/CSharp/Common/Farming/FieldService.cs b/scripts/CSharp/Common/Farming/FieldService.cs deleted file mode 100644 index 197e7c9..0000000 --- a/scripts/CSharp/Common/Farming/FieldService.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System.Collections.Generic; -using Godot; - -namespace Babushka.scripts.CSharp.Common.Farming; - -public partial class FieldService : Node -{ - private Dictionary? _outerDict = null!; - public static FieldService Instance { get; private set; } = null!; - - public override void _EnterTree() - { - Instance = this; - _outerDict = new Dictionary(); - } - - public override void _ExitTree() - { - Instance = null; - _outerDict = null; - } - - - //Create - public bool TryAddEntry(string sceneName, int fieldIndex, FieldBehaviour2D field) - { - if (_outerDict != null ) - { - FieldsInScene innerDict; - bool outerDictEntryExists = _outerDict.TryGetValue(sceneName, out innerDict); - - if (!outerDictEntryExists) - { - innerDict = new FieldsInScene(); - _outerDict.Add(sceneName, innerDict); - } - - if (!innerDict.fields.ContainsKey(fieldIndex)) - { - innerDict.fields.Add(fieldIndex, field); - return true; - } - } - return false; - } - - // Read - public FieldBehaviour2D? TryGet(string key, int fieldIndex) - { - if (_outerDict != null && _outerDict.TryGetValue(key, out FieldsInScene? field)) - { - if (field.fields.TryGetValue(fieldIndex, out FieldBehaviour2D? fieldInstance)) - { - return fieldInstance; - } - } - return null; - } - - - //Update - public void UpdateEntry(string key, int fieldIndex, FieldBehaviour2D state) - { - if (_outerDict != null && _outerDict.TryGetValue(key, out FieldsInScene? field)) - { - if (field.fields.ContainsKey(fieldIndex)) - { - field.fields[fieldIndex] = state; - } - else - { - TryAddEntry(key, fieldIndex, state); - } - } - } - - //Delete - public void RemoveEntry(string key, int fieldIndex) - { - if (_outerDict != null && _outerDict.TryGetValue(key, out FieldsInScene? field)) - { - if (field.fields.ContainsKey(fieldIndex)) - { - field.fields.Remove(fieldIndex); - } - } - } -} - -internal class FieldsInScene -{ - public Dictionary fields; - - public FieldsInScene() - { - fields = new Dictionary(); - } -} - - diff --git a/scripts/CSharp/Common/Farming/FieldService.cs.uid b/scripts/CSharp/Common/Farming/FieldService.cs.uid deleted file mode 100644 index 42d3b36..0000000 --- a/scripts/CSharp/Common/Farming/FieldService.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://slo0uydmmvnu