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

pull/34/head
kziolkowski 2 months ago
parent 67d5b67c21
commit a1fb71119f

@ -1,4 +1,4 @@
[gd_scene load_steps=11 format=3 uid="uid://gishbn0a8eke"]
[gd_scene load_steps=12 format=3 uid="uid://gishbn0a8eke"]
[ext_resource type="Script" uid="uid://cms357f23fmfy" path="res://scripts/CSharp/Common/Farming/PlantBehaviour2D.cs" id="1_66p1c"]
[ext_resource type="Texture2D" uid="uid://mrnc81ukugh6" path="res://art/farm/farming/farmobjekte/plant_template.png" id="2_oyl0t"]
@ -6,6 +6,7 @@
[ext_resource type="PackedScene" uid="uid://cqc72e4hq6bcd" path="res://prefabs/interactions/interaction_area_2d.tscn" id="5_3j24b"]
[ext_resource type="PackedScene" uid="uid://dpbbroif2tnil" path="res://prefabs/interactions/generic_item_on_ground_2d.tscn" id="6_gdrin"]
[ext_resource type="Resource" uid="uid://blr8tine5m0ma" path="res://resources/items/tomato.tres" id="7_vjw4j"]
[ext_resource type="Script" uid="uid://j2mhvb45egej" path="res://scripts/CSharp/Low Code/Variables/VariableNode.cs" id="8_3og52"]
[ext_resource type="Texture2D" uid="uid://bleimj6jr1jka" path="res://art/general/rectangle.png" id="9_vjw4j"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_u4cty"]
@ -28,7 +29,7 @@ radius = 300.0
resource_local_to_scene = true
radius = 300.0
[node name="BasePlant" type="Node2D" node_paths=PackedStringArray("_seeds", "_smallPlants", "_bigPlants", "_readyPlants", "_harvestablePlant", "_magicEffect")]
[node name="BasePlant" type="Node2D" node_paths=PackedStringArray("_seeds", "_smallPlants", "_bigPlants", "_readyPlants", "_harvestablePlant", "_magicEffect", "_lifecycle")]
z_index = 1
y_sort_enabled = true
script = ExtResource("1_66p1c")
@ -38,6 +39,7 @@ _bigPlants = [NodePath("BigPlant/01"), NodePath("BigPlant/02"), NodePath("BigPla
_readyPlants = [NodePath("ReadyPlantInventoryItem/ReadyPlant/01"), NodePath("ReadyPlantInventoryItem/ReadyPlant/02"), NodePath("ReadyPlantInventoryItem/ReadyPlant/03")]
_harvestablePlant = NodePath("ReadyPlantInventoryItem")
_magicEffect = NodePath("magic vfx")
_lifecycle = NodePath("LifeCycle")
[node name="Seeds" type="Node2D" parent="."]
position = Vector2(0, 0.5)
@ -206,6 +208,10 @@ scale_amount_max = 0.1
color = Color(0.400601, 0.62444, 0.791217, 1)
hue_variation_max = 0.4
[node name="LifeCycle" type="Node" parent="."]
script = ExtResource("8_3og52")
Payload = 3
[connection signal="Interacted" from="GrowingInteractionArea" to="." method="Grow"]
[connection signal="SuccessfulPickUp" from="ReadyPlantInventoryItem" to="." method="queue_free"]

@ -14,6 +14,7 @@ public partial class CalendarController : Node
int days = _dayCounter.Payload.AsInt32();
days++;
_dayCounter.Payload = days;
}
}
}

@ -195,7 +195,7 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
{
{ "prefab_path", _currentPlant.PrefabPath },
{ "plant_state", (int)_currentPlant.State },
{ "plant_days_growing", _currentPlant.DaysGrowing }
{ "plant_start_day", _currentPlant.DayPlanted }
}
);
}
@ -243,11 +243,18 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
_currentPlant.GrowPlant();
}
if (plantDataDict.TryGetValue("plant_days_growing", out Variant plantDaysGrowingVar) && _currentPlant != null)
if (plantDataDict.TryGetValue("plant_start_day", out Variant plantDaysGrowingVar) && _currentPlant != null)
{
_currentPlant.DaysGrowing = plantDaysGrowingVar.AsInt32();
_currentPlant.DayPlanted = plantDaysGrowingVar.AsInt32();
}
if (_currentPlant != null)
{
//todo: find out how to load the current day from save and provide it to the plant script
_currentPlant.CurrentDayInCalendar = GD.RandRange(0, 12);
GD.Print($"Set current Day in calendar for plant {_currentPlant.Name} to {_currentPlant.CurrentDayInCalendar}");
}
}
}
}

@ -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>

Loading…
Cancel
Save