From 4be0092cfbcb72b88075f730f443e6158be9331b 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 | 24 ++++++------ .../Common/Fight/FightRoomSceneSetup.cs | 38 ++++++++++++++----- scripts/CSharp/Common/Fight/FightWorld.cs | 17 +++++++-- 4 files changed, 57 insertions(+), 26 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 6396ece..f1d91bf 100644 --- a/scenes/Babushka_scene_fight_world_room.tscn +++ b/scenes/Babushka_scene_fight_world_room.tscn @@ -25,7 +25,6 @@ [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/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"] [ext_resource type="Texture2D" uid="uid://dgavbfci8x178" path="res://art/nature/grass/grass-1.png" id="28_ejigw"] [ext_resource type="Texture2D" uid="uid://h2b5aufaaw7w" path="res://art/nature/grass/grass-2.png" id="29_pjemw"] @@ -41,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") @@ -64,9 +64,9 @@ colors = PackedColorArray(0.348791, 0.400092, 0.435264, 1, 0.219333, 0.251087, 0 [sub_resource type="FastNoiseLite" id="FastNoiseLite_d5x6a"] [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_d53cn"] -seamless = true -color_ramp = SubResource("Gradient_663j1") noise = SubResource("FastNoiseLite_d5x6a") +color_ramp = SubResource("Gradient_663j1") +seamless = true [sub_resource type="ShaderMaterial" id="ShaderMaterial_k0jkw"] shader = ExtResource("23_2ouqg") @@ -84,9 +84,9 @@ fractal_gain = 0.795 domain_warp_enabled = true [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_pjpt5"] -seamless = true -color_ramp = SubResource("Gradient_eryax") noise = SubResource("FastNoiseLite_wgikv") +color_ramp = SubResource("Gradient_eryax") +seamless = true [sub_resource type="ShaderMaterial" id="ShaderMaterial_yvxfs"] shader = ExtResource("27_txtka") @@ -765,7 +765,6 @@ y_sort_enabled = true [node name="Vesna" parent="YSorted" instance=ExtResource("24_ffcio")] position = Vector2(8202, 1950) _hoe = ExtResource("25_3h260") -_wateringCan = ExtResource("26_1bhpp") [node name="CharacterBody2D" parent="YSorted/Vesna" index="0"] y_sort_enabled = true @@ -776,11 +775,9 @@ y_sort_enabled = true [node name="Animated Sprites" parent="YSorted/Vesna/CharacterBody2D/visuals" index="0"] y_sort_enabled = true animation = &"diagonal item" +frame = 0 frame_progress = 0.0 -[node name="WateringCanUI" parent="YSorted/Vesna/CharacterBody2D" index="2" node_paths=PackedStringArray("_stages")] -_stages = [null, null, null, null, null, null] - [node name="ForestVisuals" type="Node2D" parent="YSorted"] y_sort_enabled = true position = Vector2(-60, -250) @@ -864,10 +861,10 @@ region_rect = Rect2(1699, 76, 280, 230) [node name="bush4" type="Sprite2D" parent="YSorted/ForestVisuals/Static/greenery/left side"] modulate = Color(0.8428, 0.8771, 0.98, 1) material = SubResource("ShaderMaterial_yvxfs") -position = Vector2(16878, 2099) +position = Vector2(16884, 1943) scale = Vector2(2, 2) texture = ExtResource("19_edja8") -offset = Vector2(0, -172) +offset = Vector2(-3, -94) region_enabled = true region_rect = Rect2(0, 604, 248, 228) @@ -1232,10 +1229,10 @@ region_rect = Rect2(130, 0, 201, 278) modulate = Color(0.8428, 0.8771, 0.98, 1) y_sort_enabled = true material = SubResource("ShaderMaterial_yvxfs") -position = Vector2(3348, 2074) +position = Vector2(3346.379, 1926.0276) scale = Vector2(-2.40318, 3.59175) texture = ExtResource("19_edja8") -offset = Vector2(0, -172) +offset = Vector2(-0.67456055, -130.80212) region_enabled = true region_rect = Rect2(130, 0, 201, 278) @@ -2156,6 +2153,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++)