Implemented Loading function on fields and plants

This commit is contained in:
2025-11-15 22:15:02 +01:00
parent 3fcb34c04d
commit 6613e54658
11 changed files with 143 additions and 24 deletions
@@ -73,7 +73,7 @@ public partial class FieldBehaviour2D : Sprite2D
public override void _Ready()
{
LoadFromSaveData();
if(PlantingPlaceholder.GetChildCount() > 0)
_currentPlant = PlantingPlaceholder.GetChild<PlantBehaviour2D>(0);
UpdateFieldState(FieldState);
@@ -159,17 +159,7 @@ public partial class FieldBehaviour2D : Sprite2D
if (!string.IsNullOrEmpty(plantPrefabPath))
{
PackedScene prefab = ResourceLoader.Load<PackedScene>(plantPrefabPath, nameof(PackedScene));
Node2D plant2d = prefab.Instantiate<Node2D>();
PlantingPlaceholder.AddChild(plant2d);
plant2d.GlobalPosition = PlantingPlaceholder.GlobalPosition;
_currentPlant = plant2d as PlantBehaviour2D;
if (_currentPlant != null)
{
_currentPlant.Field = this;
}
PlantPrefab(plantPrefabPath);
InventoryManager.Instance.playerInventory.RemoveItem(currentSlotIndex);
success = true;
}
@@ -177,6 +167,21 @@ public partial class FieldBehaviour2D : Sprite2D
return success;
}
private void PlantPrefab(string prefabPath)
{
PackedScene prefab = ResourceLoader.Load<PackedScene>(prefabPath, nameof(PackedScene));
Node2D plant2d = prefab.Instantiate<Node2D>();
PlantingPlaceholder.AddChild(plant2d);
plant2d.GlobalPosition = PlantingPlaceholder.GlobalPosition;
_currentPlant = plant2d as PlantBehaviour2D;
if (_currentPlant != null)
{
_currentPlant.Field = this;
}
}
public void UpdateSaveData()
{
@@ -206,4 +211,54 @@ public partial class FieldBehaviour2D : Sprite2D
SavegameService.AppendSave(saveData);
}
public void LoadFromSaveData()
{
var sceneName = _sceneKeyProvider.Payload.AsString();
var id = SaveId + _fieldIndex.Payload.AsString();
string jsonPayload = SavegameService.GetSaveData(sceneName, id);
Dictionary<string, Variant> save = Json.ParseString(jsonPayload).AsGodotDictionary<string, Variant>();
if (save.Count > 0)
{
if (save.TryGetValue("field_state", out Variant fieldStateVar))
{
int fieldStateInt = fieldStateVar.AsInt32();
FieldState = (FieldState) fieldStateInt;
if (fieldStateInt != 0)
{
Visible = true;
UpdateFieldState(FieldState);
}
}
if (save.TryGetValue("plant_data", out Variant plantDataVar))
{
Dictionary<string, Variant> plantDataDict = plantDataVar.AsGodotDictionary<string, Variant>();
if (plantDataDict.TryGetValue("prefab_path", out Variant prefabPathVar))
{
PlantPrefab(prefabPathVar.AsString());
}
else
{
return;
}
if (plantDataDict.TryGetValue("plant_state", out Variant plantStateVar) && _currentPlant != null)
{
_currentPlant.State = (PlantState) plantStateVar.AsInt32();
_currentPlant.GrowPlant();
}
if (plantDataDict.TryGetValue("plant_days_growing", out Variant plantDaysGrowingVar) && _currentPlant != null)
{
_currentPlant.DaysGrowing = plantDaysGrowingVar.AsInt32();
}
}
}
}
}
@@ -1,5 +1,4 @@
using System.Collections.Generic;
using Babushka.scripts.CSharp.Common.Services;
using Godot;
namespace Babushka.scripts.CSharp.Common.Farming;
@@ -25,7 +25,11 @@ public partial class PlantBehaviour2D : Node2D
private bool _magicWordSaid = false;
private bool _calledOnReady = false;
public PlantState State => _state;
public PlantState State
{
get => _state;
set => _state = value;
}
public int DaysGrowing { get; set; }