🚧 saving of field parameters as json implemented
This commit is contained in:
+9
@@ -0,0 +1,9 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="GdSdk" type="GdScript">
|
||||||
|
<CLASSES />
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES>
|
||||||
|
<root url="file://$APPLICATION_PLUGINS_DIR$/GdScript/extracted/Master" />
|
||||||
|
</SOURCES>
|
||||||
|
</library>
|
||||||
|
</component>
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="GdSdk Master" type="GdScript">
|
|
||||||
<properties path="$USER_HOME$/.cache/JetBrains/Rider2025.1/projects/.idea.babushka.a4de4632/sdk/GdSdk Master" version="Master" date="2024-06-01T15:14:16.000+02:00" />
|
|
||||||
<CLASSES />
|
|
||||||
<JAVADOC />
|
|
||||||
<SOURCES>
|
|
||||||
<root url="file://$USER_HOME$/.cache/JetBrains/Rider2025.1/projects/.idea.babushka.a4de4632/sdk/GdSdk Master" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
||||||
@@ -38,11 +38,15 @@ z_index = 1
|
|||||||
scale = Vector2(1.3499999, 1.5)
|
scale = Vector2(1.3499999, 1.5)
|
||||||
texture = ExtResource("9_wx561")
|
texture = ExtResource("9_wx561")
|
||||||
|
|
||||||
[node name="FieldBehaviour" type="Sprite2D" parent="." node_paths=PackedStringArray("_fieldSprite", "_maskSprite", "_outlineSprite", "PlantingInteraction", "PlantingPlaceholder", "FieldInteractionArea", "_fieldIndex", "_wateringParticles")]
|
[node name="FieldBehaviour" type="Sprite2D" parent="." node_paths=PackedStringArray("_fieldIndex", "_fieldSprite", "_maskSprite", "_outlineSprite", "PlantingInteraction", "FieldInteractionArea", "PlantingPlaceholder", "_wateringParticles")]
|
||||||
visible = false
|
visible = false
|
||||||
z_index = -1
|
z_index = -1
|
||||||
scale = Vector2(0.9, 1)
|
scale = Vector2(0.9, 1)
|
||||||
script = ExtResource("1_qa01x")
|
script = ExtResource("1_qa01x")
|
||||||
|
SaveId = "field"
|
||||||
|
_fieldIndex = NodePath("..")
|
||||||
|
_sceneKeyProvider = ExtResource("11_cjahb")
|
||||||
|
FieldState = 0
|
||||||
_fieldSprite = NodePath("MaskedField/FieldTexture")
|
_fieldSprite = NodePath("MaskedField/FieldTexture")
|
||||||
_maskSprite = NodePath("MaskedField")
|
_maskSprite = NodePath("MaskedField")
|
||||||
_outlineSprite = NodePath("../OutlineSprite")
|
_outlineSprite = NodePath("../OutlineSprite")
|
||||||
@@ -50,13 +54,10 @@ _maskOutlineTextures = Array[Texture2D]([ExtResource("9_wx561"), ExtResource("3_
|
|||||||
_maskTexture = Array[Texture2D]([ExtResource("2_w8caw"), ExtResource("3_c014y"), ExtResource("4_teirr")])
|
_maskTexture = Array[Texture2D]([ExtResource("2_w8caw"), ExtResource("3_c014y"), ExtResource("4_teirr")])
|
||||||
Tilled = ExtResource("5_wx561")
|
Tilled = ExtResource("5_wx561")
|
||||||
Watered = ExtResource("6_7m4xq")
|
Watered = ExtResource("6_7m4xq")
|
||||||
FieldState = 0
|
|
||||||
PlantingInteraction = NodePath("InteractionArea")
|
PlantingInteraction = NodePath("InteractionArea")
|
||||||
|
FieldInteractionArea = NodePath("InteractionArea")
|
||||||
PlantingPlaceholder = NodePath("PlantPlaceholder")
|
PlantingPlaceholder = NodePath("PlantPlaceholder")
|
||||||
ItemRepository = ExtResource("7_w8caw")
|
ItemRepository = ExtResource("7_w8caw")
|
||||||
FieldInteractionArea = NodePath("InteractionArea")
|
|
||||||
_sceneKeyProvider = ExtResource("11_cjahb")
|
|
||||||
_fieldIndex = NodePath("..")
|
|
||||||
_wateringParticles = NodePath("../pouring water vfx")
|
_wateringParticles = NodePath("../pouring water vfx")
|
||||||
_wateringEvent = ExtResource("14_57jmp")
|
_wateringEvent = ExtResource("14_57jmp")
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ resource_local_to_scene = true
|
|||||||
radius = 300.0
|
radius = 300.0
|
||||||
|
|
||||||
[node name="Beet" instance=ExtResource("1_2u3jr")]
|
[node name="Beet" instance=ExtResource("1_2u3jr")]
|
||||||
|
_prefabPath = "res://prefabs/farm/plants/beet_plant.tscn"
|
||||||
|
|
||||||
[node name="Seed1" parent="Seeds" index="0"]
|
[node name="Seed1" parent="Seeds" index="0"]
|
||||||
texture = ExtResource("2_agmuy")
|
texture = ExtResource("2_agmuy")
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ resource_local_to_scene = true
|
|||||||
radius = 300.0
|
radius = 300.0
|
||||||
|
|
||||||
[node name="TomatoPlant" instance=ExtResource("1_ooshk")]
|
[node name="TomatoPlant" instance=ExtResource("1_ooshk")]
|
||||||
|
_prefabPath = "res://prefabs/farm/plants/tomato_plant.tscn"
|
||||||
|
|
||||||
[node name="Seed1" parent="Seeds" index="0"]
|
[node name="Seed1" parent="Seeds" index="0"]
|
||||||
texture = ExtResource("2_gdicx")
|
texture = ExtResource("2_gdicx")
|
||||||
|
|||||||
@@ -214,6 +214,7 @@ folder_colors={
|
|||||||
"res://logos/": "blue",
|
"res://logos/": "blue",
|
||||||
"res://prefabs/": "purple",
|
"res://prefabs/": "purple",
|
||||||
"res://resources/": "purple",
|
"res://resources/": "purple",
|
||||||
|
"res://savegame/": "purple",
|
||||||
"res://scenes/": "purple",
|
"res://scenes/": "purple",
|
||||||
"res://scripts/": "pink",
|
"res://scripts/": "pink",
|
||||||
"res://shader/": "pink"
|
"res://shader/": "pink"
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"beetRootScene_field0": "{\n\t\"field_state\": 1,\n\t\"plant_data\": {\n\t\t\"plant_days_growing\": 0,\n\t\t\"plant_state\": 3,\n\t\t\"prefab_path\": \"res://prefabs/farm/plants/beet_plant.tscn\"\n\t}\n}",
|
||||||
|
"beetRootScene_field1": "{\n\t\"field_state\": 1,\n\t\"plant_data\": {\n\t\t\"plant_days_growing\": 0,\n\t\t\"plant_state\": 3,\n\t\t\"prefab_path\": \"res://prefabs/farm/plants/beet_plant.tscn\"\n\t}\n}",
|
||||||
|
"beetRootScene_field2": "{\n\t\"field_state\": 1,\n\t\"plant_data\": {\n\t\t\"plant_days_growing\": 0,\n\t\t\"plant_state\": 3,\n\t\t\"prefab_path\": \"res://prefabs/farm/plants/beet_plant.tscn\"\n\t}\n}",
|
||||||
|
"beetRootScene_field3": "{\n\t\"field_state\": 1,\n\t\"plant_data\": {\n\t\t\"plant_days_growing\": 0,\n\t\t\"plant_state\": 3,\n\t\t\"prefab_path\": \"res://prefabs/farm/plants/beet_plant.tscn\"\n\t}\n}",
|
||||||
|
"beetRootScene_field4": "{\n\t\"field_state\": 1,\n\t\"plant_data\": {\n\t\t\"plant_days_growing\": 0,\n\t\t\"plant_state\": 3,\n\t\t\"prefab_path\": \"res://prefabs/farm/plants/beet_plant.tscn\"\n\t}\n}",
|
||||||
|
"beetRootScene_field5": "{\n\t\"field_state\": 1,\n\t\"plant_data\": {\n\t\t\"plant_days_growing\": 0,\n\t\t\"plant_state\": 2,\n\t\t\"prefab_path\": \"res://prefabs/farm/plants/beet_plant.tscn\"\n\t}\n}",
|
||||||
|
"beetRootScene_field6": "{\n\t\"field_state\": 1,\n\t\"plant_data\": {\n\t\t\"plant_days_growing\": 0,\n\t\t\"plant_state\": 3,\n\t\t\"prefab_path\": \"res://prefabs/farm/plants/beet_plant.tscn\"\n\t}\n}",
|
||||||
|
"beetRootScene_field7": "{\n\t\"field_state\": 1,\n\t\"plant_data\": {\n\t\t\"plant_days_growing\": 0,\n\t\t\"plant_state\": 3,\n\t\t\"prefab_path\": \"res://prefabs/farm/plants/beet_plant.tscn\"\n\t}\n}",
|
||||||
|
"beetRootScene_field8": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field0": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field1": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field10": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field11": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field12": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field13": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field14": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field15": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field16": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field17": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field18": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field19": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field2": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field20": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field21": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field22": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field23": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field24": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field25": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field3": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field4": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field5": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field6": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field7": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field8": "{\n\t\"field_state\": 0\n}",
|
||||||
|
"farmOutside_field9": "{\n\t\"field_state\": 0\n}"
|
||||||
|
}
|
||||||
@@ -1757,7 +1757,7 @@ visible = true
|
|||||||
_state = 2
|
_state = 2
|
||||||
_field = NodePath("../..")
|
_field = NodePath("../..")
|
||||||
|
|
||||||
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField" index="8"]
|
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField" index="7"]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField/FieldActivator/InteractionArea/Area2D" index="0"]
|
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField/FieldActivator/InteractionArea/Area2D" index="0"]
|
||||||
@@ -1775,7 +1775,7 @@ visible = true
|
|||||||
_state = 2
|
_state = 2
|
||||||
_field = NodePath("../..")
|
_field = NodePath("../..")
|
||||||
|
|
||||||
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField2" index="8"]
|
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField2" index="7"]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField2/FieldActivator/InteractionArea/Area2D" index="0"]
|
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField2/FieldActivator/InteractionArea/Area2D" index="0"]
|
||||||
@@ -1793,7 +1793,7 @@ visible = true
|
|||||||
_state = 2
|
_state = 2
|
||||||
_field = NodePath("../..")
|
_field = NodePath("../..")
|
||||||
|
|
||||||
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField3" index="8"]
|
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField3" index="7"]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField3/FieldActivator/InteractionArea/Area2D" index="0"]
|
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField3/FieldActivator/InteractionArea/Area2D" index="0"]
|
||||||
@@ -1812,7 +1812,7 @@ FieldState = 3
|
|||||||
_state = 2
|
_state = 2
|
||||||
_field = NodePath("../..")
|
_field = NodePath("../..")
|
||||||
|
|
||||||
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField4" index="8"]
|
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField4" index="7"]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField4/FieldActivator/InteractionArea/Area2D" index="0"]
|
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField4/FieldActivator/InteractionArea/Area2D" index="0"]
|
||||||
@@ -1831,7 +1831,7 @@ FieldState = 3
|
|||||||
_state = 2
|
_state = 2
|
||||||
_field = NodePath("../..")
|
_field = NodePath("../..")
|
||||||
|
|
||||||
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField5" index="8"]
|
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField5" index="7"]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField5/FieldActivator/InteractionArea/Area2D" index="0"]
|
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField5/FieldActivator/InteractionArea/Area2D" index="0"]
|
||||||
@@ -1850,7 +1850,7 @@ FieldState = 3
|
|||||||
_state = 1
|
_state = 1
|
||||||
_field = NodePath("../..")
|
_field = NodePath("../..")
|
||||||
|
|
||||||
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField6" index="8"]
|
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField6" index="7"]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField6/FieldActivator/InteractionArea/Area2D" index="0"]
|
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField6/FieldActivator/InteractionArea/Area2D" index="0"]
|
||||||
@@ -1869,7 +1869,7 @@ FieldState = 3
|
|||||||
_state = 2
|
_state = 2
|
||||||
_field = NodePath("../..")
|
_field = NodePath("../..")
|
||||||
|
|
||||||
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField7" index="8"]
|
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField7" index="7"]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField7/FieldActivator/InteractionArea/Area2D" index="0"]
|
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField7/FieldActivator/InteractionArea/Area2D" index="0"]
|
||||||
@@ -1888,7 +1888,7 @@ FieldState = 3
|
|||||||
_state = 2
|
_state = 2
|
||||||
_field = NodePath("../..")
|
_field = NodePath("../..")
|
||||||
|
|
||||||
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField8" index="8"]
|
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField8" index="7"]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField8/FieldActivator/InteractionArea/Area2D" index="0"]
|
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField8/FieldActivator/InteractionArea/Area2D" index="0"]
|
||||||
@@ -1902,7 +1902,7 @@ Payload = 8
|
|||||||
[node name="FieldBehaviour" parent="YSorted/Farm visuals/FieldParent/BaseField9" index="1"]
|
[node name="FieldBehaviour" parent="YSorted/Farm visuals/FieldParent/BaseField9" index="1"]
|
||||||
visible = true
|
visible = true
|
||||||
|
|
||||||
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField9" index="8"]
|
[node name="FieldActivator" parent="YSorted/Farm visuals/FieldParent/BaseField9" index="7"]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField9/FieldActivator/InteractionArea/Area2D" index="0"]
|
[node name="CollisionShape3D" parent="YSorted/Farm visuals/FieldParent/BaseField9/FieldActivator/InteractionArea/Area2D" index="0"]
|
||||||
|
|||||||
@@ -1,15 +1,27 @@
|
|||||||
using System;
|
using System;
|
||||||
using Babushka.scripts.CSharp.Common.CharacterControls;
|
using Babushka.scripts.CSharp.Common.CharacterControls;
|
||||||
using Babushka.scripts.CSharp.Common.Inventory;
|
using Babushka.scripts.CSharp.Common.Inventory;
|
||||||
|
using Babushka.scripts.CSharp.Common.Savegame;
|
||||||
using Babushka.scripts.CSharp.Low_Code.Events;
|
using Babushka.scripts.CSharp.Low_Code.Events;
|
||||||
using Babushka.scripts.CSharp.Low_Code.Variables;
|
using Babushka.scripts.CSharp.Low_Code.Variables;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using Godot.Collections;
|
||||||
|
|
||||||
namespace Babushka.scripts.CSharp.Common.Farming;
|
namespace Babushka.scripts.CSharp.Common.Farming;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Defines the behaviour of the field, i.e. interactions, states and effects.
|
||||||
|
/// </summary>
|
||||||
[GlobalClass]
|
[GlobalClass]
|
||||||
public partial class FieldBehaviour2D : Sprite2D
|
public partial class FieldBehaviour2D : Sprite2D
|
||||||
{
|
{
|
||||||
|
[ExportGroup("Persistence")]
|
||||||
|
[Export] public string SaveId = "";
|
||||||
|
[Export] private VariableNode _fieldIndex;
|
||||||
|
[Export] public VariableResource _sceneKeyProvider;
|
||||||
|
[Export] public FieldState FieldState = FieldState.Tilled;
|
||||||
|
|
||||||
|
[ExportGroup("Field Visuals")]
|
||||||
[Export] private Sprite2D _fieldSprite;
|
[Export] private Sprite2D _fieldSprite;
|
||||||
[Export] private Sprite2D _maskSprite;
|
[Export] private Sprite2D _maskSprite;
|
||||||
[Export] private Sprite2D _outlineSprite;
|
[Export] private Sprite2D _outlineSprite;
|
||||||
@@ -17,25 +29,25 @@ public partial class FieldBehaviour2D : Sprite2D
|
|||||||
[Export] private Texture2D[] _maskTexture;
|
[Export] private Texture2D[] _maskTexture;
|
||||||
[Export] private Texture2D Tilled;
|
[Export] private Texture2D Tilled;
|
||||||
[Export] private Texture2D Watered;
|
[Export] private Texture2D Watered;
|
||||||
[Export] public FieldState FieldState = FieldState.Tilled;
|
|
||||||
|
[ExportGroup("Field Interactions")]
|
||||||
[Export] public InteractionArea2D PlantingInteraction;
|
[Export] public InteractionArea2D PlantingInteraction;
|
||||||
|
[Export] public InteractionArea2D FieldInteractionArea;
|
||||||
|
|
||||||
|
[ExportGroup("Configuration")]
|
||||||
[Export] public Node2D PlantingPlaceholder;
|
[Export] public Node2D PlantingPlaceholder;
|
||||||
[Export] public ItemRepository ItemRepository;
|
[Export] public ItemRepository ItemRepository;
|
||||||
[Export] public InteractionArea2D FieldInteractionArea;
|
|
||||||
[Export] public VariableResource _sceneKeyProvider;
|
|
||||||
[Export] private VariableNode _fieldIndex;
|
|
||||||
[Export] private CpuParticles2D _wateringParticles;
|
[Export] private CpuParticles2D _wateringParticles;
|
||||||
[Export] private EventResource _wateringEvent;
|
[Export] private EventResource _wateringEvent;
|
||||||
|
|
||||||
|
|
||||||
public Vector2 FieldPosition;
|
|
||||||
|
|
||||||
private bool _seedsActive;
|
private bool _seedsActive;
|
||||||
private bool _wateringCanActive;
|
private bool _wateringCanActive;
|
||||||
|
|
||||||
private bool _canPlant;
|
private bool _canPlant;
|
||||||
private bool _canWater;
|
private bool _canWater;
|
||||||
|
|
||||||
|
private PlantBehaviour2D? _currentPlant;
|
||||||
|
|
||||||
[Signal] public delegate void PlantedEventHandler();
|
[Signal] public delegate void PlantedEventHandler();
|
||||||
|
|
||||||
private void UpdateInteractionArea()
|
private void UpdateInteractionArea()
|
||||||
@@ -58,11 +70,16 @@ public partial class FieldBehaviour2D : Sprite2D
|
|||||||
_wateringCanActive = activated;
|
_wateringCanActive = activated;
|
||||||
UpdateInteractionArea();
|
UpdateInteractionArea();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if(PlantingPlaceholder.GetChildCount() > 0)
|
||||||
|
_currentPlant = PlantingPlaceholder.GetChild<PlantBehaviour2D>(0);
|
||||||
UpdateFieldState(FieldState);
|
UpdateFieldState(FieldState);
|
||||||
|
|
||||||
FieldService.Instance.TryAddEntry(_sceneKeyProvider.Payload.AsString(),_fieldIndex.Payload.AsInt32(), this);
|
FieldService.Instance.TryAddEntry(_sceneKeyProvider.Payload.AsString(),_fieldIndex.Payload.AsInt32(), this);
|
||||||
|
|
||||||
int randomIndex = new Random().Next(0, _maskTexture.Length);
|
int randomIndex = new Random().Next(0, _maskTexture.Length);
|
||||||
_maskSprite.Texture = _maskTexture[randomIndex];
|
_maskSprite.Texture = _maskTexture[randomIndex];
|
||||||
_outlineSprite.Texture = _maskOutlineTextures[randomIndex];
|
_outlineSprite.Texture = _maskOutlineTextures[randomIndex];
|
||||||
@@ -97,6 +114,7 @@ public partial class FieldBehaviour2D : Sprite2D
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
UpdateInteractionArea();
|
UpdateInteractionArea();
|
||||||
|
UpdateSaveData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -137,19 +155,19 @@ public partial class FieldBehaviour2D : Sprite2D
|
|||||||
if (item == null || PlantingPlaceholder.GetChildCount() > 0 || item.amount == 0)
|
if (item == null || PlantingPlaceholder.GetChildCount() > 0 || item.amount == 0)
|
||||||
return success;
|
return success;
|
||||||
|
|
||||||
string prefabPath = ItemRepository.TryGetPrefabPath(item.blueprint);
|
string plantPrefabPath = ItemRepository.TryGetPrefabPath(item.blueprint);
|
||||||
|
|
||||||
if (prefabPath != null)
|
if (!string.IsNullOrEmpty(plantPrefabPath))
|
||||||
{
|
{
|
||||||
PackedScene prefab = ResourceLoader.Load<PackedScene>(prefabPath, nameof(PackedScene));
|
PackedScene prefab = ResourceLoader.Load<PackedScene>(plantPrefabPath, nameof(PackedScene));
|
||||||
Node2D plant2d = prefab.Instantiate<Node2D>();
|
Node2D plant2d = prefab.Instantiate<Node2D>();
|
||||||
PlantingPlaceholder.AddChild(plant2d);
|
PlantingPlaceholder.AddChild(plant2d);
|
||||||
plant2d.GlobalPosition = PlantingPlaceholder.GlobalPosition;
|
plant2d.GlobalPosition = PlantingPlaceholder.GlobalPosition;
|
||||||
PlantBehaviour2D? plantBehaviour = plant2d as PlantBehaviour2D;
|
_currentPlant = plant2d as PlantBehaviour2D;
|
||||||
|
|
||||||
if (plantBehaviour != null)
|
if (_currentPlant != null)
|
||||||
{
|
{
|
||||||
plantBehaviour.Field = this;
|
_currentPlant.Field = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
InventoryManager.Instance.playerInventory.RemoveItem(currentSlotIndex);
|
InventoryManager.Instance.playerInventory.RemoveItem(currentSlotIndex);
|
||||||
@@ -158,6 +176,34 @@ public partial class FieldBehaviour2D : Sprite2D
|
|||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
public void UpdateSaveData()
|
||||||
|
{
|
||||||
|
var saveData = new SaveData();
|
||||||
|
|
||||||
|
saveData.SceneName = _sceneKeyProvider.Payload.AsString();
|
||||||
|
saveData.Id = SaveId + _fieldIndex.Payload.AsString();
|
||||||
|
var payloadData = new Dictionary<string, Variant>
|
||||||
|
{
|
||||||
|
{ "field_state", (int)FieldState }
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_currentPlant != null)
|
||||||
|
{
|
||||||
|
payloadData.Add(
|
||||||
|
"plant_data", new Dictionary<string, Variant>()
|
||||||
|
{
|
||||||
|
{ "prefab_path", _currentPlant.PrefabPath },
|
||||||
|
{ "plant_state", (int)_currentPlant.State },
|
||||||
|
{ "plant_days_growing", _currentPlant.DaysGrowing }
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
saveData.JsonPayload = Json.Stringify(payloadData, indent: "\t");
|
||||||
|
|
||||||
|
SavegameService.AppendSave(saveData);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Babushka.scripts.CSharp.Common.Services;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
|
||||||
namespace Babushka.scripts.CSharp.Common.Farming;
|
namespace Babushka.scripts.CSharp.Common.Farming;
|
||||||
@@ -40,10 +41,6 @@ public partial class FieldService : Node
|
|||||||
innerDict.fields.Add(fieldIndex, field);
|
innerDict.fields.Add(fieldIndex, field);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
GD.PrintErr("Duplicate field at: " + fieldIndex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ namespace Babushka.scripts.CSharp.Common.Farming;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class PlantBehaviour2D : Node2D
|
public partial class PlantBehaviour2D : Node2D
|
||||||
{
|
{
|
||||||
|
[Export] private string _prefabPath;
|
||||||
[Export] private Sprite2D[] _seeds;
|
[Export] private Sprite2D[] _seeds;
|
||||||
[Export] private Sprite2D[] _smallPlants;
|
[Export] private Sprite2D[] _smallPlants;
|
||||||
[Export] private Sprite2D[] _bigPlants;
|
[Export] private Sprite2D[] _bigPlants;
|
||||||
@@ -24,6 +25,12 @@ public partial class PlantBehaviour2D : Node2D
|
|||||||
private bool _magicWordSaid = false;
|
private bool _magicWordSaid = false;
|
||||||
private bool _calledOnReady = false;
|
private bool _calledOnReady = false;
|
||||||
|
|
||||||
|
public PlantState State => _state;
|
||||||
|
|
||||||
|
public int DaysGrowing { get; set; }
|
||||||
|
|
||||||
|
public string PrefabPath => _prefabPath;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// public accessor for the field reference
|
/// public accessor for the field reference
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -35,7 +42,6 @@ public partial class PlantBehaviour2D : Node2D
|
|||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
GD.Print($"Ready: {Name}");
|
|
||||||
if (_state == PlantState.None)
|
if (_state == PlantState.None)
|
||||||
{
|
{
|
||||||
_state = PlantState.Planted;
|
_state = PlantState.Planted;
|
||||||
@@ -44,7 +50,6 @@ public partial class PlantBehaviour2D : Node2D
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GD.Print("plant state not none.");
|
|
||||||
_calledOnReady = true;
|
_calledOnReady = true;
|
||||||
GrowPlant();
|
GrowPlant();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Babushka.scripts.CSharp.Common.Savegame;
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
public class SaveData
|
||||||
|
{
|
||||||
|
public string SceneName;
|
||||||
|
public string Id;
|
||||||
|
public string JsonPayload;
|
||||||
|
|
||||||
|
public string ToString()
|
||||||
|
{
|
||||||
|
return SceneName + " " + Id + " " + JsonPayload;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://bkftl5mj33eah
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using Godot;
|
||||||
|
using Godot.Collections;
|
||||||
|
using FileAccess = Godot.FileAccess;
|
||||||
|
|
||||||
|
namespace Babushka.scripts.CSharp.Common.Savegame;
|
||||||
|
|
||||||
|
public static class SavegameService
|
||||||
|
{
|
||||||
|
public static readonly string SavePath = "res://savegame/savegame.json";
|
||||||
|
|
||||||
|
public static Dictionary<string, Variant> SaveDatas = new ();
|
||||||
|
|
||||||
|
public static void AppendSave(SaveData saveData)
|
||||||
|
{
|
||||||
|
string key = string.Concat(saveData.SceneName, "_", saveData.Id);
|
||||||
|
|
||||||
|
if (SaveDatas.TryGetValue(key, out var value))
|
||||||
|
{
|
||||||
|
SaveDatas[key] = saveData.JsonPayload;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SaveDatas.Add(key, saveData.JsonPayload);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Save()
|
||||||
|
{
|
||||||
|
string json = Json.Stringify(SaveDatas, indent: "\t");
|
||||||
|
using var file = FileAccess.Open(SavePath, FileAccess.ModeFlags.Write);
|
||||||
|
file.StoreString(json);
|
||||||
|
GD.Print($"Game saved to {file}");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://rm23q50boqe5
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
|
using Babushka.scripts.CSharp.Common.Savegame;
|
||||||
using Babushka.scripts.CSharp.Common.SceneManagement;
|
using Babushka.scripts.CSharp.Common.SceneManagement;
|
||||||
|
using Babushka.scripts.CSharp.Common.Services;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
|
||||||
namespace Babushka.scripts.CSharp.Common;
|
namespace Babushka.scripts.CSharp.Common;
|
||||||
@@ -16,6 +18,7 @@ public partial class SceneTransition : Node
|
|||||||
|
|
||||||
public void LoadSceneAtIndex(int index)
|
public void LoadSceneAtIndex(int index)
|
||||||
{
|
{
|
||||||
|
SavegameService.Save();
|
||||||
string sceneName = _sceneNamesToLoad[index];
|
string sceneName = _sceneNamesToLoad[index];
|
||||||
SceneTransitionThreaded.Instance.ChangeSceneToFileThreaded(sceneName);
|
SceneTransitionThreaded.Instance.ChangeSceneToFileThreaded(sceneName);
|
||||||
UnloadAfterDelay();
|
UnloadAfterDelay();
|
||||||
|
|||||||
@@ -2,6 +2,9 @@ using Godot;
|
|||||||
|
|
||||||
namespace Babushka.scripts.CSharp.Low_Code.Variables;
|
namespace Babushka.scripts.CSharp.Low_Code.Variables;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A Node type that carries a Variant payload.
|
||||||
|
/// </summary>
|
||||||
public partial class VariableNode : Node
|
public partial class VariableNode : Node
|
||||||
{
|
{
|
||||||
[Export] public Variant Payload { get; set; }
|
[Export] public Variant Payload { get; set; }
|
||||||
|
|||||||
Reference in New Issue
Block a user