diff --git a/prefabs/characters/Player2D.tscn b/prefabs/characters/Player2D.tscn index d184d94..d3beff3 100644 --- a/prefabs/characters/Player2D.tscn +++ b/prefabs/characters/Player2D.tscn @@ -1,7 +1,9 @@ -[gd_scene load_steps=480 format=3 uid="uid://c25udixd5m6l0"] +[gd_scene load_steps=482 format=3 uid="uid://c25udixd5m6l0"] [ext_resource type="Script" uid="uid://b05uyj001ehwi" path="res://scripts/CSharp/Common/Farming/VesnaBehaviour2D.cs" id="1_yd5ep"] [ext_resource type="Script" uid="uid://cjbclkxesh3hc" path="res://scripts/CSharp/Common/CharacterControls/PlayerMovement.cs" id="2_1vqmv"] +[ext_resource type="Resource" uid="uid://c5yg3lx756v4v" path="res://resources/items/hoe.tres" id="2_dnm27"] +[ext_resource type="Resource" uid="uid://cndd64batns31" path="res://resources/items/wateringcan.tres" id="3_e04c3"] [ext_resource type="Script" uid="uid://n7oihifvqp23" path="res://scripts/CSharp/Common/Animation/VesnaAnimations.cs" id="3_f6xmn"] [ext_resource type="Texture2D" uid="uid://7jrac5ii3ah3" path="res://art/animation/Vesna2D/Vesna Anims Sequences/B01-Idle/0001.png" id="3_tb2wl"] [ext_resource type="Texture2D" uid="uid://c06b551t2qlo6" path="res://art/animation/Vesna2D/Vesna Anims Sequences/B01-Idle/0002.png" id="4_dy5kt"] @@ -2079,6 +2081,8 @@ script = ExtResource("1_yd5ep") _farmingControls = NodePath("FarmingControls") _player2d = NodePath("CharacterBody2D") _vesnaAnimations = NodePath("CharacterBody2D/visuals") +_hoe = ExtResource("2_dnm27") +_wateringCan = ExtResource("3_e04c3") [node name="CharacterBody2D" type="CharacterBody2D" parent="." groups=["PlantGrowing"]] position = Vector2(0, 374) diff --git a/prefabs/farm/tomato_plant.tscn b/prefabs/farm/tomato_plant.tscn index a342358..438467c 100644 --- a/prefabs/farm/tomato_plant.tscn +++ b/prefabs/farm/tomato_plant.tscn @@ -40,6 +40,7 @@ _bigPlants = [NodePath("BigPlant/01"), NodePath("BigPlant/02"), NodePath("BigPla _readyPlants = [NodePath("ReadyPlantInventoryItem/ReadyPlant/01"), NodePath("ReadyPlantInventoryItem/ReadyPlant/02"), NodePath("ReadyPlantInventoryItem/ReadyPlant/03"), NodePath("ReadyPlantInventoryItem/ReadyPlant/04")] _harvestablePlant = NodePath("ReadyPlantInventoryItem") _magicEffect = NodePath("magic vfx") +_magicWordNeeded = false [node name="Seeds" type="Node2D" parent="."] position = Vector2(0, 0.5) @@ -225,6 +226,7 @@ color = Color(0.400601, 0.62444, 0.791217, 1) hue_variation_max = 0.4 [connection signal="Interacted" from="GrowingInteractionArea" to="." method="Grow"] +[connection signal="SuccessfulPickUp" from="ReadyPlantInventoryItem" to="." method="queue_free"] [editable path="GrowingInteractionArea"] [editable path="ReadyPlantInventoryItem"] diff --git a/prefabs/seed_repository.tscn b/prefabs/seed_repository.tscn deleted file mode 100644 index 8207b2a..0000000 --- a/prefabs/seed_repository.tscn +++ /dev/null @@ -1,11 +0,0 @@ -[gd_scene load_steps=4 format=3 uid="uid://bqjx3luofm6yi"] - -[ext_resource type="Script" uid="uid://coqch6yjvjuc0" path="res://scripts/CSharp/Common/Farming/SeedRepository.cs" id="1_i7nvs"] -[ext_resource type="Resource" uid="uid://d1uuxp1lp4aro" path="res://resources/items/tomato_seed.tres" id="2_jetk1"] -[ext_resource type="PackedScene" uid="uid://gishbn0a8eke" path="res://prefabs/farm/tomato_plant.tscn" id="3_ulp3m"] - -[node name="SeedRepository" type="Node2D"] -script = ExtResource("1_i7nvs") -seedToPlantRepository = Dictionary[Object, Node]({ -ExtResource("2_jetk1"): ExtResource("3_ulp3m") -}) diff --git a/project.godot b/project.godot index 263172f..e89fd3e 100644 --- a/project.godot +++ b/project.godot @@ -28,11 +28,10 @@ buses/default_bus_layout="uid://b6dwkmkyb0axk" SceneTransition="*res://scenes/SceneTransition.tscn" Dialogic="*res://addons/dialogic/Core/DialogicGameHandler.gd" InventoryManager="*res://scripts/CSharp/Common/Inventory/InventoryManager.cs" -Signal_Debugger="*res://addons/SignalVisualizer/Debugger/SignalDebugger.gd" QuestManager="*res://prefabs/quests/quest_manager_autoload.tscn" FightManagerAutoload="*res://prefabs/fight/fight_manager_autoload.tscn" InputService="*res://scripts/CSharp/Common/Services/InputService.cs" -SeedRepository="*res://prefabs/seed_repository.tscn" +Signal_Debugger="*res://addons/SignalVisualizer/Debugger/SignalDebugger.gd" [dialogic] diff --git a/resources/items/tomato_seed.tres b/resources/items/tomato_seed.tres index e778349..6d039fa 100644 --- a/resources/items/tomato_seed.tres +++ b/resources/items/tomato_seed.tres @@ -1,7 +1,8 @@ -[gd_resource type="Resource" script_class="ItemResource" load_steps=3 format=3 uid="uid://d1uuxp1lp4aro"] +[gd_resource type="Resource" script_class="ItemResource" load_steps=4 format=3 uid="uid://d1uuxp1lp4aro"] [ext_resource type="Script" uid="uid://cbskymrxs6ksu" path="res://scripts/CSharp/Common/Inventory/ItemResource.cs" id="1_dustj"] [ext_resource type="Texture2D" uid="uid://ce04nexh36uwe" path="res://art/ui/UI/icons/icon-seed-tomatoe.png" id="1_u15c2"] +[ext_resource type="PackedScene" uid="uid://gishbn0a8eke" path="res://prefabs/farm/tomato_plant.tscn" id="2_xhgqu"] [resource] script = ExtResource("1_dustj") @@ -9,4 +10,5 @@ name = "Tomato Seed" color = Color(0.135039, 0.307214, 0.333128, 1) icon = ExtResource("1_u15c2") maxStack = 20 +itemPrefab = ExtResource("2_xhgqu") metadata/_custom_type_script = "uid://cbskymrxs6ksu" diff --git a/scenes/Babushka_scene_farm_outside_2d.tscn b/scenes/Babushka_scene_farm_outside_2d.tscn index 09477cf..70a1635 100644 --- a/scenes/Babushka_scene_farm_outside_2d.tscn +++ b/scenes/Babushka_scene_farm_outside_2d.tscn @@ -1036,7 +1036,6 @@ z_index = 1 position = Vector2(9322, 2018) _fieldParent = NodePath("../Farm visuals/FieldParent") _hoe = ExtResource("28_6b2nr") -_wateringCan = ExtResource("28_ipqaa") [node name="FarmingControls" parent="YSorted/Vesna" index="1" node_paths=PackedStringArray("_camera")] _camera = NodePath("../../../Camera2D") diff --git a/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs b/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs index 06ec445..6b109aa 100644 --- a/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs +++ b/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs @@ -15,7 +15,7 @@ public partial class FieldBehaviour2D : Sprite2D [Export] private Texture2D Watered; [Export] public FieldState FieldState = FieldState.Tilled; [Export] public InteractionArea2D PlantingInteraction; - [Export] public Node PlantingPlaceholder; + [Export] public Node2D PlantingPlaceholder; public Vector2 FieldPosition; @@ -48,6 +48,7 @@ public partial class FieldBehaviour2D : Sprite2D break; case FieldState.Planted: FieldState = FieldState.Planted; + _fieldSprite.Texture = Tilled; PlantingInteraction.IsActive = false; break; default: @@ -82,10 +83,10 @@ public partial class FieldBehaviour2D : Sprite2D int currentSlotIndex = InventoryManager.Instance.CurrentSelectedSlotIndex; ItemInstance? item = InventoryManager.Instance.playerInventory.Slots[currentSlotIndex].itemInstance; - if (item == null) + if (item == null || PlantingPlaceholder.GetChildCount() > 0) return success; - - PackedScene? plantPrefab = SeedRepository.Instance.GetPlant(item.blueprint); + + PackedScene? plantPrefab = item.blueprint.itemPrefab; if (plantPrefab != null) { @@ -93,6 +94,15 @@ public partial class FieldBehaviour2D : Sprite2D if (plantInstance is Node2D plant2d) { PlantingPlaceholder.AddChild(plant2d); + plant2d.GlobalPosition = PlantingPlaceholder.GlobalPosition; + PlantBehaviour2D? plantBehaviour = plant2d as PlantBehaviour2D; + + if (plantBehaviour != null) + { + plantBehaviour.Field = this; + plantBehaviour.Grow(); + } + success = true; } } diff --git a/scripts/CSharp/Common/Farming/PlantBehaviour2D.cs b/scripts/CSharp/Common/Farming/PlantBehaviour2D.cs index d73b292..345f2a9 100644 --- a/scripts/CSharp/Common/Farming/PlantBehaviour2D.cs +++ b/scripts/CSharp/Common/Farming/PlantBehaviour2D.cs @@ -1,4 +1,5 @@ using System; +using Babushka.scripts.CSharp.Common.Animation; using Babushka.scripts.CSharp.Common.Inventory; using Godot; @@ -24,6 +25,15 @@ public partial class PlantBehaviour2D : Node2D private string _magicWordDialogicEventName = "MagicWord"; private Sprite2D _currentPlantSprite = null; private bool _magicWordSaid = false; + + /// + /// public accessor for the field reference + /// + public FieldBehaviour2D Field + { + get => _field; + set => _field = value; + } /// @@ -34,7 +44,7 @@ public partial class PlantBehaviour2D : Node2D if (_field.FieldState != FieldState.Watered || _magicWordSaid != _magicWordNeeded) return; - //GetTree().CallGroup("PlantGrowing", PlayerMovement.MethodName.PlayFarmingAnimation); + GetTree().CallGroup("PlantGrowing", VesnaAnimations.MethodName.PlayFarmingAnimation); // todo: // find out why the last plant stage is being skipped the second time around switch (_state) diff --git a/scripts/CSharp/Common/Farming/SeedRepository.cs b/scripts/CSharp/Common/Farming/SeedRepository.cs deleted file mode 100644 index ecd8475..0000000 --- a/scripts/CSharp/Common/Farming/SeedRepository.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Babushka.scripts.CSharp.Common.Inventory; -using Godot; -using Godot.Collections; - -namespace Babushka.scripts.CSharp.Common.Farming; - -public partial class SeedRepository : Node -{ - public static SeedRepository Instance { get; private set; } = null!; - - // todo: Find out how to not use PackedScene here because it does not inherit from Node - [Export] private Dictionary seedToPlantRepository; - - public override void _EnterTree() - { - Instance = this; - } - - public PackedScene? GetPlant(ItemResource resource) - { - if (seedToPlantRepository.ContainsKey(resource)) - { - return seedToPlantRepository[resource]; - } - - return null; - } - -} \ No newline at end of file diff --git a/scripts/CSharp/Common/Farming/SeedRepository.cs.uid b/scripts/CSharp/Common/Farming/SeedRepository.cs.uid deleted file mode 100644 index e1d400b..0000000 --- a/scripts/CSharp/Common/Farming/SeedRepository.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://coqch6yjvjuc0 diff --git a/scripts/CSharp/Common/Inventory/ItemResource.cs b/scripts/CSharp/Common/Inventory/ItemResource.cs index 0e0ed89..6fc0616 100644 --- a/scripts/CSharp/Common/Inventory/ItemResource.cs +++ b/scripts/CSharp/Common/Inventory/ItemResource.cs @@ -15,11 +15,15 @@ public partial class ItemResource : Resource [Export] public int maxStack; + + [Export] + public PackedScene? itemPrefab; public ItemResource() { name = ""; color = Colors.Red; maxStack = 1; + itemPrefab = null; } }