Compare commits
5 Commits
41b30a4274
...
c288af296c
| Author | SHA1 | Date | |
|---|---|---|---|
| c288af296c | |||
| e65330786e | |||
| c7a4aea70b | |||
| b6caf4dbed | |||
| 51a145a994 |
@@ -138,6 +138,7 @@ shape = SubResource("CircleShape2D_vjw4j")
|
||||
[node name="ReadyPlantInventoryItem" parent="." instance=ExtResource("6_gdrin")]
|
||||
position = Vector2(0, 2.3)
|
||||
IsActive = false
|
||||
_saveToDisk = false
|
||||
|
||||
[node name="SpawnWithItem" parent="ReadyPlantInventoryItem" index="0"]
|
||||
_blueprint = ExtResource("7_vjw4j")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=118 format=3 uid="uid://gigb28qk8t12"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Player2D.tscn" id="1_7wfwe"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Vesna.tscn" id="1_7wfwe"]
|
||||
[ext_resource type="Texture2D" uid="uid://8sr11ex30n0m" path="res://art/mockups/Kenney_Backgrounds/Samples/uncolored_hills.png" id="2_7b2ri"]
|
||||
[ext_resource type="Script" uid="uid://bqomwxclsbhd3" path="res://scripts/CSharp/Common/Camera/CameraController.cs" id="3_p4qqi"]
|
||||
[ext_resource type="Texture2D" uid="uid://be1nofeo7an0" path="res://art/mockups/Kenney_Backgrounds/PNG/cloud2.png" id="3_r34wi"]
|
||||
@@ -1061,6 +1061,7 @@ position = Vector2(145.5, -224)
|
||||
shape = SubResource("RectangleShape2D_0sfl7")
|
||||
|
||||
[node name="InteractionArea" parent="YSorted/Well" instance=ExtResource("27_klb81")]
|
||||
_id = 1
|
||||
metadata/SaveID = "b8f7b7fe-e057-4974-ba12-9134722998de"
|
||||
|
||||
[node name="CollisionShape3D" parent="YSorted/Well/InteractionArea/Area2D" index="0"]
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
[ext_resource type="Shader" uid="uid://xnky830dtfsn" path="res://shader/repeat_texture.gdshader" id="24_1bax8"]
|
||||
[ext_resource type="Texture2D" uid="uid://btea6eyucsyxj" path="res://art/farm/farming/farmobjekte/zaun/tilable fence middle part.png" id="25_ox3k7"]
|
||||
[ext_resource type="Texture2D" uid="uid://3ed3dgq3irn2" path="res://art/farm/farming/farmobjekte/zaun/tilable fence end part2.png" id="26_rnkrk"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Player2D.tscn" id="28_d4s66"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Vesna.tscn" id="28_d4s66"]
|
||||
[ext_resource type="Resource" uid="uid://dlcmqfjvgphqu" path="res://resources/items/rake.tres" id="29_36k8l"]
|
||||
[ext_resource type="Resource" uid="uid://cndd64batns31" path="res://resources/items/wateringcan.tres" id="30_te7n5"]
|
||||
[ext_resource type="Texture2D" uid="uid://dg7rlugnq0t45" path="res://art/farm/farming/farmobjekte/brünnen.png" id="31_h1k77"]
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://bmjjfd5ngptxe" path="res://art/nature/baum märz 2025/backtreebois team kennedy.png" id="21_mlqvj"]
|
||||
[ext_resource type="Texture2D" uid="uid://bcw6oeovkmiup" path="res://art/nature/baum märz 2025/sonnenblumeseamless.png" id="22_22c4u"]
|
||||
[ext_resource type="Shader" uid="uid://xnky830dtfsn" path="res://shader/repeat_texture.gdshader" id="23_2ouqg"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Player2D.tscn" id="24_ffcio"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Vesna.tscn" id="24_ffcio"]
|
||||
[ext_resource type="Resource" uid="uid://dlcmqfjvgphqu" path="res://resources/items/rake.tres" id="25_3h260"]
|
||||
[ext_resource type="Resource" uid="uid://cndd64batns31" path="res://resources/items/wateringcan.tres" id="26_1bhpp"]
|
||||
[ext_resource type="Shader" uid="uid://braevmqauoek7" path="res://shader/swaying_plant.gdshader" id="27_txtka"]
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
[ext_resource type="Script" uid="uid://di0xxwfw43m0i" path="res://scripts/CSharp/Common/FightOld/FightStarter.cs" id="26_gg38r"]
|
||||
[ext_resource type="PackedScene" uid="uid://hk8ahyp6dgl6" path="res://prefabs/fightOld/fight_base_scene.tscn" id="27_55b52"]
|
||||
[ext_resource type="PackedScene" uid="uid://bp64p6y72j71w" path="res://prefabs/fightOld/fighters/enemy_blob_fighter.tscn" id="27_hfhye"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Player2D.tscn" id="29_3jjxs"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Vesna.tscn" id="29_3jjxs"]
|
||||
[ext_resource type="PackedScene" uid="uid://ddpl8cbck7e6s" path="res://prefabs/characters/Chugar.tscn" id="29_26tkn"]
|
||||
[ext_resource type="PackedScene" uid="uid://cr66tpdr5rma5" path="res://prefabs/fightOld/fighters/enemy_mavkha_fighter.tscn" id="29_hfhye"]
|
||||
[ext_resource type="Resource" uid="uid://dlcmqfjvgphqu" path="res://resources/items/rake.tres" id="30_l10vl"]
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://cop1vjvhwlsec" path="res://art/indoor/room export/Room_01_shelf.png" id="12_bu2a1"]
|
||||
[ext_resource type="Texture2D" uid="uid://404glx32r1w8" path="res://art/indoor/room export/Room_01_bench.png" id="13_rongr"]
|
||||
[ext_resource type="Texture2D" uid="uid://ckvytnpi8gcxq" path="res://art/eyes_atlas.png" id="14_d7yky"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Player2D.tscn" id="15_7a68a"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Vesna.tscn" id="15_7a68a"]
|
||||
[ext_resource type="Script" uid="uid://31p67cdowuw4" path="res://scripts/CSharp/Common/Animation/AnimationStarter.cs" id="15_27bwy"]
|
||||
[ext_resource type="Texture2D" uid="uid://c4q12jiligcl7" path="res://art/animals/katze.png" id="15_sndxu"]
|
||||
[ext_resource type="AudioStream" uid="uid://cohyenfo1rtxh" path="res://audio/sfx/Animals/SFX_Cat_Meow_01.wav" id="16_d7yky"]
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
[ext_resource type="Resource" uid="uid://csj15gnlx1jmx" path="res://resources/quests/demo/8_goto_bed.tres" id="9_heyef"]
|
||||
[ext_resource type="Script" uid="uid://puw74w6lmcvl" path="res://scripts/CSharp/Common/Fight/NightStarter.cs" id="10_j25a2"]
|
||||
[ext_resource type="Texture2D" uid="uid://cop1vjvhwlsec" path="res://art/indoor/room export/Room_01_shelf.png" id="13_11fdt"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Player2D.tscn" id="18_3gevq"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Vesna.tscn" id="18_3gevq"]
|
||||
[ext_resource type="Script" uid="uid://bqomwxclsbhd3" path="res://scripts/CSharp/Common/Camera/CameraController.cs" id="23_408bg"]
|
||||
[ext_resource type="PackedScene" uid="uid://cgjc4wurbgimy" path="res://prefabs/UI/Inventory/Inventory.tscn" id="24_xwo8y"]
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
[ext_resource type="Shader" uid="uid://xnky830dtfsn" path="res://shader/repeat_texture.gdshader" id="24_anpd4"]
|
||||
[ext_resource type="Texture2D" uid="uid://btea6eyucsyxj" path="res://art/farm/farming/farmobjekte/zaun/tilable fence middle part.png" id="25_8mej4"]
|
||||
[ext_resource type="Texture2D" uid="uid://3ed3dgq3irn2" path="res://art/farm/farming/farmobjekte/zaun/tilable fence end part2.png" id="26_bwvai"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Player2D.tscn" id="27_qtaxr"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Vesna.tscn" id="27_qtaxr"]
|
||||
[ext_resource type="Resource" uid="uid://dlcmqfjvgphqu" path="res://resources/items/rake.tres" id="28_le48k"]
|
||||
[ext_resource type="Resource" uid="uid://cndd64batns31" path="res://resources/items/wateringcan.tres" id="30_dr6bm"]
|
||||
[ext_resource type="Texture2D" uid="uid://dg7rlugnq0t45" path="res://art/farm/farming/farmobjekte/brünnen.png" id="30_lgb3w"]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://chvc0e4441o2k"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://ejq7h5pgxl84" path="res://art/indoor/küchenraum.png" id="2_ttdge"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Player2D.tscn" id="3_oibke"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Vesna.tscn" id="3_oibke"]
|
||||
|
||||
[node name="IndoorTest" type="Node2D"]
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://bradm5u7vjjxq" path="res://art/mockups/trees/darktree8.png" id="9_viosu"]
|
||||
[ext_resource type="Texture2D" uid="uid://bryqg0hb4f0ry" path="res://art/mockups/trees/darktree9.png" id="10_clutx"]
|
||||
[ext_resource type="Texture2D" uid="uid://c1iyeflkwaqxf" path="res://art/testingground/mushroom1.png" id="11_ovtse"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Player2D.tscn" id="12_k41x3"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25udixd5m6l0" path="res://prefabs/characters/Vesna.tscn" id="12_k41x3"]
|
||||
|
||||
[node name="AbandonedStreet" type="Node2D"]
|
||||
|
||||
|
||||
@@ -18,12 +18,17 @@ public partial class VesnaAnimations : Node
|
||||
/// Emits the last look direction of the player to other scripts.
|
||||
/// </summary>
|
||||
[Signal] public delegate void LookDirectionEventHandler(Vector2 direction);
|
||||
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
InventoryManager.Instance.playerInventory.InventoryContentsChanged += HandleNewItemInInventory;
|
||||
}
|
||||
|
||||
public override void _ExitTree()
|
||||
{
|
||||
InventoryManager.Instance.playerInventory.InventoryContentsChanged -= HandleNewItemInInventory;
|
||||
}
|
||||
|
||||
private void HandleNewItemInInventory()
|
||||
{
|
||||
// for future Kathi: this does not, in fact, check if an item has been added only, but triggers on every content change!
|
||||
|
||||
@@ -59,6 +59,7 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
|
||||
_canPlant = (FieldState == FieldState.Tilled || FieldState == FieldState.Watered) && _seedsActive;
|
||||
// fieldstate == tilled && watering can ausgewählt
|
||||
_canWater = (FieldState == FieldState.Tilled || FieldState == FieldState.Planted) && _wateringCanActive;
|
||||
|
||||
FieldInteractionArea.IsActive = _canPlant || _canWater;
|
||||
}
|
||||
|
||||
@@ -74,9 +75,13 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
|
||||
UpdateInteractionArea();
|
||||
}
|
||||
|
||||
public override void _Ready()
|
||||
public override void _EnterTree()
|
||||
{
|
||||
LoadFromSaveData();
|
||||
}
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
if(PlantingPlaceholder.GetChildCount() > 0)
|
||||
_currentPlant = PlantingPlaceholder.GetChild<PlantBehaviour2D>(0);
|
||||
UpdateFieldState(FieldState);
|
||||
@@ -87,7 +92,7 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
|
||||
base._Ready();
|
||||
}
|
||||
|
||||
public void UpdateFieldState(FieldState state)
|
||||
public void UpdateFieldState(FieldState state, bool updateSaveAfter = true)
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
@@ -115,18 +120,25 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
|
||||
break;
|
||||
}
|
||||
UpdateInteractionArea();
|
||||
UpdateSaveData();
|
||||
if(updateSaveAfter)
|
||||
UpdateSaveData();
|
||||
}
|
||||
|
||||
|
||||
public void Water()
|
||||
{
|
||||
if (WateringCanState.GetFillState() > 0)
|
||||
if (WateringCanState.GetFillState() > 0 && FieldState != FieldState.Watered)
|
||||
{
|
||||
UpdateFieldState(FieldState.Watered);
|
||||
_wateringParticles.Emitting = true;
|
||||
WateringCanState.Water();
|
||||
_wateringEvent.Raise();
|
||||
|
||||
if (_currentPlant != null)
|
||||
{
|
||||
_currentPlant.DaysWatered++;
|
||||
UpdateSaveData();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,6 +181,16 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
|
||||
}
|
||||
|
||||
private void PlantPrefab(string prefabPath)
|
||||
{
|
||||
InstantiatePlant(prefabPath);
|
||||
|
||||
if (_currentPlant != null)
|
||||
{
|
||||
_currentPlant.DayPlanted = _currentDay;
|
||||
}
|
||||
}
|
||||
|
||||
private void InstantiatePlant(string prefabPath)
|
||||
{
|
||||
PackedScene prefab = ResourceLoader.Load<PackedScene>(prefabPath, nameof(PackedScene));
|
||||
Node2D plant2d = prefab.Instantiate<Node2D>();
|
||||
@@ -179,12 +201,14 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
|
||||
if (_currentPlant != null)
|
||||
{
|
||||
_currentPlant.Field = this;
|
||||
_currentPlant.DayPlanted = _currentDay;
|
||||
}
|
||||
}
|
||||
|
||||
#region SAVE AND LOAD
|
||||
|
||||
/// <summary>
|
||||
/// Update save data as prep for scene transition (when data is saved and loaded from disk).
|
||||
/// </summary>
|
||||
public void UpdateSaveData()
|
||||
{
|
||||
var payloadData = new Dictionary<string, Variant>
|
||||
@@ -198,7 +222,8 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
|
||||
"plant_data", new Dictionary<string, Variant>()
|
||||
{
|
||||
{ "prefab_path", _currentPlant.PrefabPath },
|
||||
{ "plant_start_day", _currentPlant.DayPlanted }
|
||||
{ "plant_start_day", _currentPlant.DayPlanted },
|
||||
{ "plant_watered_days", _currentPlant.DaysWatered }
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -207,6 +232,9 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
|
||||
SavegameService.AppendDataToSave(id, payloadData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads on scene enter.
|
||||
/// </summary>
|
||||
public void LoadFromSaveData()
|
||||
{
|
||||
// Get field and plant data
|
||||
@@ -216,33 +244,55 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
// get plant first because it's also relevant for the field state
|
||||
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());
|
||||
InstantiatePlant(prefabPathVar.AsString());
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (plantDataDict.TryGetValue("plant_start_day", out Variant plantDaysGrowingVar) && _currentPlant != null)
|
||||
if (plantDataDict.TryGetValue("plant_start_day", out Variant plantStartDay) && _currentPlant != null)
|
||||
{
|
||||
_currentPlant.DayPlanted = plantDaysGrowingVar.AsInt32();
|
||||
_currentPlant.DayPlanted = plantStartDay.AsInt32();
|
||||
}
|
||||
if (plantDataDict.TryGetValue("plant_watered_days", out Variant plantDaysWatered) && _currentPlant != null)
|
||||
{
|
||||
_currentPlant.DaysWatered = plantDaysWatered.AsInt32();
|
||||
}
|
||||
|
||||
// get field state
|
||||
if (save.TryGetValue("field_state", out Variant fieldStateVar))
|
||||
{
|
||||
int fieldStateInt = fieldStateVar.AsInt32();
|
||||
|
||||
|
||||
// if the field has been unlocked, make it visible.
|
||||
if (fieldStateInt != 0)
|
||||
{
|
||||
Visible = true;
|
||||
|
||||
// if the field was watered the day before, set it to tilled or planted.
|
||||
if (fieldStateInt == 3)
|
||||
{
|
||||
if (_currentPlant != null)
|
||||
{
|
||||
fieldStateInt = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
fieldStateInt = 1;
|
||||
}
|
||||
}
|
||||
|
||||
FieldState = (FieldState) fieldStateInt;
|
||||
UpdateFieldState(FieldState, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -254,8 +304,10 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
|
||||
if (dayCountSave.TryGetValue("payload", out Variant dayCountVar))
|
||||
{
|
||||
_currentDay = dayCountVar.AsInt32();
|
||||
if(_currentPlant != null)
|
||||
_currentPlant.CurrentDayInCalendar = dayCountVar.AsInt32();
|
||||
if (_currentPlant != null)
|
||||
{
|
||||
_currentPlant.CurrentDayInCalendar = _currentDay;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ public partial class PlantBehaviour2D : Node2D
|
||||
private bool _calledOnReady = false;
|
||||
private int _dayPlanted;
|
||||
private int _currentDay;
|
||||
private int _daysWatered;
|
||||
|
||||
public PlantState State
|
||||
{
|
||||
@@ -44,7 +45,11 @@ public partial class PlantBehaviour2D : Node2D
|
||||
/// <summary>
|
||||
/// The day count at the day this plant was planted.
|
||||
/// </summary>
|
||||
public int DayPlanted { get; set; }
|
||||
public int DayPlanted
|
||||
{
|
||||
get => _dayPlanted;
|
||||
set => _dayPlanted = value;
|
||||
}
|
||||
|
||||
public int CurrentDayInCalendar
|
||||
{
|
||||
@@ -62,27 +67,6 @@ public partial class PlantBehaviour2D : Node2D
|
||||
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.None,
|
||||
1 => PlantState.Planted,
|
||||
2 => PlantState.SmallPlant,
|
||||
_ => PlantState.BigPlant
|
||||
};
|
||||
|
||||
_calledOnReady = true;
|
||||
Grow();
|
||||
}
|
||||
|
||||
public string PrefabPath => _prefabPath;
|
||||
|
||||
/// <summary>
|
||||
@@ -94,6 +78,15 @@ public partial class PlantBehaviour2D : Node2D
|
||||
set => _field = value;
|
||||
}
|
||||
|
||||
public int DaysWatered
|
||||
{
|
||||
get => _daysWatered;
|
||||
set
|
||||
{
|
||||
_daysWatered = value;
|
||||
}
|
||||
}
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
if (_state == PlantState.None)
|
||||
@@ -108,13 +101,32 @@ public partial class PlantBehaviour2D : Node2D
|
||||
GrowPlant();
|
||||
}
|
||||
}
|
||||
|
||||
private void DaysGrowingChanged()
|
||||
{
|
||||
int lifecycle = _lifecycle.Payload.AsInt32();
|
||||
Debug.Assert(lifecycle > 0);
|
||||
|
||||
float growth = (float)_daysWatered / lifecycle;
|
||||
int growthFloor = Mathf.FloorToInt(growth);
|
||||
|
||||
_state = growthFloor switch
|
||||
{
|
||||
0 => PlantState.None,
|
||||
1 => PlantState.Planted,
|
||||
2 => PlantState.SmallPlant,
|
||||
_ => PlantState.BigPlant
|
||||
};
|
||||
|
||||
_calledOnReady = true;
|
||||
Grow();
|
||||
}
|
||||
|
||||
public void Grow()
|
||||
{
|
||||
GrowPlant();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Transitions the plant to its next growth stage.
|
||||
/// </summary>
|
||||
|
||||
@@ -50,12 +50,14 @@ public partial class InventoryInstance : Node, ISaveable
|
||||
LoadFromSaveData();
|
||||
InventoryContentsChanged += UpdateSaveData;
|
||||
SlotAmountChanged += UpdateSaveData;
|
||||
SavegameService.OnSaveGameReset += SaveGameReset;
|
||||
}
|
||||
|
||||
|
||||
public override void _ExitTree()
|
||||
{
|
||||
InventoryContentsChanged -= UpdateSaveData;
|
||||
SlotAmountChanged -= UpdateSaveData;
|
||||
SavegameService.OnSaveGameReset -= SaveGameReset;
|
||||
}
|
||||
|
||||
public InventoryActionResult AddItem(ItemInstance newItem)
|
||||
@@ -216,5 +218,17 @@ public partial class InventoryInstance : Node, ISaveable
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when a new save is created.
|
||||
/// Needs to do a runtime check because the InventoryInstance is already in existence at the beginning of the first scene.
|
||||
/// </summary>
|
||||
private void SaveGameReset()
|
||||
{
|
||||
foreach (var slot in _slots)
|
||||
{
|
||||
slot.itemInstance = null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ public partial class InventoryUi : Control
|
||||
|
||||
public override void _ExitTree()
|
||||
{
|
||||
InventoryManager.Instance.playerInventory.InventoryContentsChanged -= SetSlotContent;
|
||||
UnsubscribeSlots();
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ public partial class ItemOnGround2D : Node, ISaveable
|
||||
[Export] public bool IsActive = true;
|
||||
[Export] private bool _infiniteSupply = false;
|
||||
[Export] private int _finiteSupply = 1;
|
||||
[Export] private bool _saveToDisk = true;
|
||||
|
||||
private int pickUpCounter = 0;
|
||||
|
||||
@@ -96,6 +97,9 @@ public partial class ItemOnGround2D : Node, ISaveable
|
||||
// todo: What do we do with instances that are created at runtime?
|
||||
public void UpdateSaveData()
|
||||
{
|
||||
if (!_saveToDisk)
|
||||
return;
|
||||
|
||||
var payloadData = new Dictionary<string, Variant>
|
||||
{
|
||||
{"pickupCounter", pickUpCounter}
|
||||
@@ -107,6 +111,9 @@ public partial class ItemOnGround2D : Node, ISaveable
|
||||
|
||||
public void LoadFromSaveData()
|
||||
{
|
||||
if (!_saveToDisk)
|
||||
return;
|
||||
|
||||
if (_infiniteSupply)
|
||||
return;
|
||||
|
||||
|
||||
@@ -18,6 +18,9 @@ public static class SavegameService
|
||||
public static Dictionary<string, string> SaveDatas = new ();
|
||||
|
||||
public static bool _loaded = false;
|
||||
|
||||
public delegate void SaveGameDelegate();
|
||||
public static event SaveGameDelegate OnSaveGameReset = delegate {};
|
||||
|
||||
|
||||
public static void AppendDataToSave( string id, Dictionary<string, Variant> payload)
|
||||
@@ -130,5 +133,6 @@ public static class SavegameService
|
||||
{
|
||||
SaveDatas = new ();
|
||||
Save();
|
||||
OnSaveGameReset();
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
using Babushka.scripts.CSharp.Common.Inventory;
|
||||
using Babushka.scripts.CSharp.Common.Savegame;
|
||||
using Godot;
|
||||
using Godot.Collections;
|
||||
@@ -6,15 +7,25 @@ namespace Babushka.scripts.CSharp.Low_Code.Variables;
|
||||
|
||||
public partial class SaveableVariableNode : VariableNode, ISaveable
|
||||
{
|
||||
public override void _Ready()
|
||||
[Export] private bool _debug;
|
||||
|
||||
public override void _EnterTree()
|
||||
{
|
||||
LoadFromSaveData();
|
||||
ValueChanged += UpdateSaveData;
|
||||
SavegameService.OnSaveGameReset += SaveGameReset;
|
||||
}
|
||||
|
||||
private void SaveGameReset()
|
||||
{
|
||||
Payload = default;
|
||||
GD.Print($"Saveable Variable reset to {Payload}");
|
||||
}
|
||||
|
||||
public override void _ExitTree()
|
||||
{
|
||||
ValueChanged -= UpdateSaveData;
|
||||
SavegameService.OnSaveGameReset -= SaveGameReset;
|
||||
}
|
||||
|
||||
public void UpdateSaveData()
|
||||
@@ -43,6 +54,11 @@ public partial class SaveableVariableNode : VariableNode, ISaveable
|
||||
{
|
||||
Payload = save["payload"];
|
||||
}
|
||||
|
||||
if (_debug)
|
||||
{
|
||||
GD.Print($"SaveableVariable {Name} loaded payload: {Payload}.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user