🚧 WIP binding the plant growth to the day count in the savefile

This commit is contained in:
2025-11-26 20:12:27 +01:00
parent 67d5b67c21
commit a1fb71119f
4 changed files with 70 additions and 9 deletions
@@ -1,6 +1,9 @@
using System;
using System.Diagnostics;
using Babushka.scripts.CSharp.Common.Inventory;
using Babushka.scripts.CSharp.Low_Code.Variables;
using Godot;
using Godot.Collections;
namespace Babushka.scripts.CSharp.Common.Farming;
@@ -9,7 +12,8 @@ namespace Babushka.scripts.CSharp.Common.Farming;
/// </summary>
public partial class PlantBehaviour2D : Node2D
{
[Export] private string _prefabPath;
[ExportGroup("Plant State")]
[Export] private Sprite2D[] _seeds;
[Export] private Sprite2D[] _smallPlants;
[Export] private Sprite2D[] _bigPlants;
@@ -19,11 +23,17 @@ public partial class PlantBehaviour2D : Node2D
[Export] private ItemOnGround2D _harvestablePlant;
[Export] private CpuParticles2D _magicEffect;
[Export] private bool _magicWordNeeded = true;
[ExportGroup("PlantConfig")]
[Export] private string _prefabPath;
[Export] private VariableNode _lifecycle;
private string _magicWordDialogicEventName = "MagicWord";
private Sprite2D? _currentPlantSprite = null;
private bool _magicWordSaid = false;
private bool _calledOnReady = false;
private int _dayPlanted;
private int _currentDay;
public PlantState State
{
@@ -31,8 +41,45 @@ public partial class PlantBehaviour2D : Node2D
set => _state = value;
}
public int DaysGrowing { get; set; }
public int DayPlanted { get; set; }
public int CurrentDayInCalendar
{
get => _currentDay;
set
{
if (_currentDay == value) return;
_currentDay = value;
DaysGrowingChanged();
}
}
public void IncrementDaysGrowing()
{
DayPlanted++;
}
private void DaysGrowingChanged()
{
int _daysGrowing = _currentDay - _dayPlanted;
int lifecycle = _lifecycle.Payload.AsInt32();
Debug.Assert(lifecycle > 0);
float growth = (float)_daysGrowing / lifecycle;
int growthFloor = Mathf.FloorToInt(growth);
_state = growthFloor switch
{
0 => PlantState.Planted,
1 => PlantState.SmallPlant,
2 => PlantState.BigPlant,
_ => PlantState.Ready
};
_calledOnReady = true;
Grow();
}
public string PrefabPath => _prefabPath;
/// <summary>