From f42c2c86b11252cce0d8320ef84a343d75f6800d Mon Sep 17 00:00:00 2001 From: jonathan Date: Thu, 11 Dec 2025 15:09:28 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Defeated=20enemygroups=20now=20drop?= =?UTF-8?q?=20a=20beet=5Fseed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prefabs/fight/fight_world_autoload.tscn | 4 +- scenes/Babushka_scene_fight_world_room.tscn | 2 + .../Common/Fight/FightRoomSceneSetup.cs | 38 ++++++++++++++----- scripts/CSharp/Common/Fight/FightWorld.cs | 17 +++++++-- 4 files changed, 48 insertions(+), 13 deletions(-) diff --git a/prefabs/fight/fight_world_autoload.tscn b/prefabs/fight/fight_world_autoload.tscn index 1692884..1dbbe33 100644 --- a/prefabs/fight/fight_world_autoload.tscn +++ b/prefabs/fight/fight_world_autoload.tscn @@ -1,6 +1,8 @@ -[gd_scene load_steps=2 format=3 uid="uid://n5cj71bxxjkk"] +[gd_scene load_steps=3 format=3 uid="uid://n5cj71bxxjkk"] [ext_resource type="Script" uid="uid://dqe1i2qmpttwf" path="res://scripts/CSharp/Common/Fight/FightWorld.cs" id="1_tnyce"] +[ext_resource type="Resource" uid="uid://duq7tshxv6uhp" path="res://resources/items/beet_seed.tres" id="2_lxs0o"] [node name="FightWorldAutoload" type="Node2D"] script = ExtResource("1_tnyce") +_itemToDropByEnemyGroup = ExtResource("2_lxs0o") diff --git a/scenes/Babushka_scene_fight_world_room.tscn b/scenes/Babushka_scene_fight_world_room.tscn index ba3a569..ce9ae55 100644 --- a/scenes/Babushka_scene_fight_world_room.tscn +++ b/scenes/Babushka_scene_fight_world_room.tscn @@ -40,6 +40,7 @@ [ext_resource type="Script" uid="uid://dbu8afaiohpdh" path="res://scripts/CSharp/Common/Fight/FightRoomSceneSetup.cs" id="40_cvg1r"] [ext_resource type="PackedScene" uid="uid://bcld43daavmrn" path="res://prefabs/fight/fight_scene_switcher.tscn" id="40_elhbh"] [ext_resource type="PackedScene" uid="uid://qfdiudt3vpai" path="res://prefabs/fight/roaming_enemy_group.tscn" id="41_cvg1r"] +[ext_resource type="PackedScene" uid="uid://dpbbroif2tnil" path="res://prefabs/interactions/generic_item_on_ground_2d.tscn" id="41_x3yi1"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_ruj2u"] shader = ExtResource("16_0fard") @@ -2175,6 +2176,7 @@ _sceneRoot = NodePath("..") script = ExtResource("40_cvg1r") _enemyGroupSpawns = [NodePath("../YSorted/EnemyGroupSpawns/Spawn1"), NodePath("../YSorted/EnemyGroupSpawns/Spawn2"), NodePath("../YSorted/EnemyGroupSpawns/Spawn3"), NodePath("../YSorted/EnemyGroupSpawns/Spawn4")] _roamingEnemyGroupPrefab = ExtResource("41_cvg1r") +_itemOnGroundPrefab = ExtResource("41_x3yi1") _fightSceneSwitcher = NodePath("../FightSceneSwitcher") [editable path="YSorted/Vesna"] diff --git a/scripts/CSharp/Common/Fight/FightRoomSceneSetup.cs b/scripts/CSharp/Common/Fight/FightRoomSceneSetup.cs index de19a5c..4ffe14c 100644 --- a/scripts/CSharp/Common/Fight/FightRoomSceneSetup.cs +++ b/scripts/CSharp/Common/Fight/FightRoomSceneSetup.cs @@ -1,15 +1,16 @@ using System.Collections.Generic; using System.Linq; -using Babushka.scripts.CSharp.Common.Util; +using Babushka.scripts.CSharp.Common.Inventory; using Godot; namespace Babushka.scripts.CSharp.Common.Fight; public partial class FightRoomSceneSetup : Node { - [Export(PropertyHint.ArrayType)] private Node2D[] _enemyGroupSpawns; - [Export] private PackedScene _roamingEnemyGroupPrefab; - [Export] private FightSceneSwitcher _fightSceneSwitcher; + [Export(PropertyHint.ArrayType)] private Node2D[] _enemyGroupSpawns = null!; + [Export] private PackedScene _roamingEnemyGroupPrefab = null!; + [Export] private PackedScene _itemOnGroundPrefab = null!; + [Export] private FightSceneSwitcher _fightSceneSwitcher = null!; public override void _Ready() @@ -19,11 +20,30 @@ public partial class FightRoomSceneSetup : Node foreach (var (parent, group) in _enemyGroupSpawns.Zip(room.enemyGroups)) { if (group.AreAllDead()) - continue; - - var roamingEnemyGroup = _roamingEnemyGroupPrefab.Instantiate(); - roamingEnemyGroup.Initialize(group, _fightSceneSwitcher); - parent.AddChild(roamingEnemyGroup); + { + SpawnLoot(group, parent); + } + else + { + SpawnEnemies(group, parent); + } } } + + private void SpawnEnemies(FightWorld.FighterGroup group, Node2D parent) + { + var roamingEnemyGroup = _roamingEnemyGroupPrefab.Instantiate(); + roamingEnemyGroup.Initialize(group, _fightSceneSwitcher); + parent.AddChild(roamingEnemyGroup); + } + + private void SpawnLoot(FightWorld.FighterGroup group, Node2D parent) + { + if (group.lootToDrop == null) + return; + + var onGroundInstance = _itemOnGroundPrefab.Instantiate(); + onGroundInstance.itemInstance = group.lootToDrop; + parent.AddChild(onGroundInstance); + } } \ No newline at end of file diff --git a/scripts/CSharp/Common/Fight/FightWorld.cs b/scripts/CSharp/Common/Fight/FightWorld.cs index 083b60f..96245bc 100644 --- a/scripts/CSharp/Common/Fight/FightWorld.cs +++ b/scripts/CSharp/Common/Fight/FightWorld.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using Babushka.scripts.CSharp.Common.Fight.Actions; +using Babushka.scripts.CSharp.Common.Inventory; using Babushka.scripts.CSharp.Common.Util; using Godot; @@ -19,6 +20,7 @@ public partial class FightWorld : Node None, EndOfNight } + public required Dictionary paths; public required List enemyGroups; public Special specialRoom = Special.None; @@ -27,6 +29,7 @@ public partial class FightWorld : Node public class FighterGroup { public required List fighters; + public ItemInstance? lootToDrop = null; } public class FightHappeningData @@ -81,6 +84,9 @@ public partial class FightWorld : Node public FightHappeningData? fightHappeningData = null; public AllyFighters allyFighters = new(); + // settings + [Export] private ItemResource? _itemToDropByEnemyGroup; + public void ResetFightWorld() { Generate(); @@ -89,10 +95,10 @@ public partial class FightWorld : Node public void Generate() { - world = new Generator().GenerateWorld(); + world = new Generator(this).GenerateWorld(); } - private class Generator + private class Generator(FightWorld fightWorld) { public World GenerateWorld() { @@ -113,7 +119,7 @@ public partial class FightWorld : Node { rooms.Add(GenerateDisconnectedRoom()); } - + rooms.Add(new Room { paths = [], @@ -162,6 +168,11 @@ public partial class FightWorld : Node fighters = [] }; + if (fightWorld._itemToDropByEnemyGroup != null) + { + enemyGroup.lootToDrop = new ItemInstance { blueprint = fightWorld._itemToDropByEnemyGroup }; + } + var enemyCount = GD.RandRange(2, 3); for (var i = 0; i < enemyCount; i++)