🚧 WIP binding the plant growth to the day count in the savefile
This commit is contained in:
@@ -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="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"]
|
[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://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="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="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"]
|
[ext_resource type="Texture2D" uid="uid://bleimj6jr1jka" path="res://art/general/rectangle.png" id="9_vjw4j"]
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_u4cty"]
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_u4cty"]
|
||||||
@@ -28,7 +29,7 @@ radius = 300.0
|
|||||||
resource_local_to_scene = true
|
resource_local_to_scene = true
|
||||||
radius = 300.0
|
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
|
z_index = 1
|
||||||
y_sort_enabled = true
|
y_sort_enabled = true
|
||||||
script = ExtResource("1_66p1c")
|
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")]
|
_readyPlants = [NodePath("ReadyPlantInventoryItem/ReadyPlant/01"), NodePath("ReadyPlantInventoryItem/ReadyPlant/02"), NodePath("ReadyPlantInventoryItem/ReadyPlant/03")]
|
||||||
_harvestablePlant = NodePath("ReadyPlantInventoryItem")
|
_harvestablePlant = NodePath("ReadyPlantInventoryItem")
|
||||||
_magicEffect = NodePath("magic vfx")
|
_magicEffect = NodePath("magic vfx")
|
||||||
|
_lifecycle = NodePath("LifeCycle")
|
||||||
|
|
||||||
[node name="Seeds" type="Node2D" parent="."]
|
[node name="Seeds" type="Node2D" parent="."]
|
||||||
position = Vector2(0, 0.5)
|
position = Vector2(0, 0.5)
|
||||||
@@ -206,6 +208,10 @@ scale_amount_max = 0.1
|
|||||||
color = Color(0.400601, 0.62444, 0.791217, 1)
|
color = Color(0.400601, 0.62444, 0.791217, 1)
|
||||||
hue_variation_max = 0.4
|
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="Interacted" from="GrowingInteractionArea" to="." method="Grow"]
|
||||||
[connection signal="SuccessfulPickUp" from="ReadyPlantInventoryItem" to="." method="queue_free"]
|
[connection signal="SuccessfulPickUp" from="ReadyPlantInventoryItem" to="." method="queue_free"]
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ public partial class CalendarController : Node
|
|||||||
int days = _dayCounter.Payload.AsInt32();
|
int days = _dayCounter.Payload.AsInt32();
|
||||||
days++;
|
days++;
|
||||||
_dayCounter.Payload = days;
|
_dayCounter.Payload = days;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -195,7 +195,7 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
|
|||||||
{
|
{
|
||||||
{ "prefab_path", _currentPlant.PrefabPath },
|
{ "prefab_path", _currentPlant.PrefabPath },
|
||||||
{ "plant_state", (int)_currentPlant.State },
|
{ "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();
|
_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;
|
||||||
|
using System.Diagnostics;
|
||||||
using Babushka.scripts.CSharp.Common.Inventory;
|
using Babushka.scripts.CSharp.Common.Inventory;
|
||||||
|
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;
|
||||||
|
|
||||||
@@ -9,7 +12,8 @@ namespace Babushka.scripts.CSharp.Common.Farming;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class PlantBehaviour2D : Node2D
|
public partial class PlantBehaviour2D : Node2D
|
||||||
{
|
{
|
||||||
[Export] private string _prefabPath;
|
|
||||||
|
[ExportGroup("Plant State")]
|
||||||
[Export] private Sprite2D[] _seeds;
|
[Export] private Sprite2D[] _seeds;
|
||||||
[Export] private Sprite2D[] _smallPlants;
|
[Export] private Sprite2D[] _smallPlants;
|
||||||
[Export] private Sprite2D[] _bigPlants;
|
[Export] private Sprite2D[] _bigPlants;
|
||||||
@@ -19,11 +23,17 @@ public partial class PlantBehaviour2D : Node2D
|
|||||||
[Export] private ItemOnGround2D _harvestablePlant;
|
[Export] private ItemOnGround2D _harvestablePlant;
|
||||||
[Export] private CpuParticles2D _magicEffect;
|
[Export] private CpuParticles2D _magicEffect;
|
||||||
[Export] private bool _magicWordNeeded = true;
|
[Export] private bool _magicWordNeeded = true;
|
||||||
|
|
||||||
|
[ExportGroup("PlantConfig")]
|
||||||
|
[Export] private string _prefabPath;
|
||||||
|
[Export] private VariableNode _lifecycle;
|
||||||
|
|
||||||
private string _magicWordDialogicEventName = "MagicWord";
|
private string _magicWordDialogicEventName = "MagicWord";
|
||||||
private Sprite2D? _currentPlantSprite = null;
|
private Sprite2D? _currentPlantSprite = null;
|
||||||
private bool _magicWordSaid = false;
|
private bool _magicWordSaid = false;
|
||||||
private bool _calledOnReady = false;
|
private bool _calledOnReady = false;
|
||||||
|
private int _dayPlanted;
|
||||||
|
private int _currentDay;
|
||||||
|
|
||||||
public PlantState State
|
public PlantState State
|
||||||
{
|
{
|
||||||
@@ -31,8 +41,45 @@ public partial class PlantBehaviour2D : Node2D
|
|||||||
set => _state = value;
|
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;
|
public string PrefabPath => _prefabPath;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user