From c4f5404211ef654944d5615e9055c714441f8234 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 9 Nov 2025 20:16:40 -0300 Subject: desgosto MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Este commit marca minha desistência oficial do projeto. Minha preocupação em seguir um tutorial, adicionando minhas próprias features sem se importar com o design da aplicação como um todo resultou em um código maior que o necessário e difícil de manter. Toda vez que eu me forço a trabalhar no jogo, me sinto extremamente desmotivado e enojado. Os próximos commits serão para terminar o jogo para a apresentação. Eu planejo fazer um novo roguelike durante minhas férias da faculade, sem prazos, sem a limitação de usar todos os pilares da programação orientada a objetos e com planejamento minimamente decente. O projeto como um todo não foi um desperdício de tempo. Não só me ensinou o que não fazer, como também será um ótimo alimento para o copilot e outros LLMs. - Matheus Ferreira Guedes. --- scripts/Map/DungeonGenerator.cs | 62 ++++++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 16 deletions(-) (limited to 'scripts/Map/DungeonGenerator.cs') diff --git a/scripts/Map/DungeonGenerator.cs b/scripts/Map/DungeonGenerator.cs index 779675f..7f57353 100644 --- a/scripts/Map/DungeonGenerator.cs +++ b/scripts/Map/DungeonGenerator.cs @@ -3,6 +3,9 @@ using TheLegendOfGustav.Entities.Actors; using TheLegendOfGustav.Entities; using TheLegendOfGustav.Entities.Items; using System; +using Godot.Collections; +using System.Diagnostics.Metrics; +using System.Numerics; namespace TheLegendOfGustav.Map; @@ -14,6 +17,27 @@ public partial class DungeonGenerator : Node { #region Fields /// + /// Chave: Andar mínimo + /// Valor: Número de máximo de monstros por sala + /// + private static readonly Dictionary maxMonstersByFloor = new() + { + {1, 2}, + {4, 3}, + {6, 4}, + {10, 8} + }; + /// + /// Chave: Andar mínimo + /// Valor: Número de máximo de itens por sala + /// + private static readonly Dictionary maxItemsByFloor = new() + { + {1, 1}, + {4, 2}, + {6, 3}, + }; + /// /// Coleção de todos os inimigos que o gerador tem acesso. /// private static readonly Godot.Collections.Array enemies = [ @@ -47,24 +71,30 @@ public partial class DungeonGenerator : Node /// [ExportCategory("RNG")] private RandomNumberGenerator rng = new(); - - /// - /// Quantidade máxima de inimigos por sala. - /// - [ExportCategory("Monster RNG")] - [Export] - private int maxMonstersPerRoom = 2; - - /// - /// Quantidade máxima de itens por sala. - /// - [ExportCategory("Loot RNG")] - [Export] - private int maxItemsPerRoom = 2; #endregion #region Methods + private int GetMaxIValueForFloor(Dictionary valueTable, int currentFloor) { + int currentValue = 0; + + int? key = null; + + foreach (int theKey in valueTable.Keys) { + if (theKey > currentFloor) { + break; + } else { + key = theKey; + } + } + + if (key.HasValue) { + currentValue = valueTable[key.Value]; + } + + return currentValue; + } + /// /// Gera um andar da masmorra. /// Inimigos são colocados conforme configurações. @@ -229,9 +259,9 @@ public partial class DungeonGenerator : Node private void PlaceEntities(MapData data, Rect2I room) { // Define quantos monstros serão colocados na sala - int monsterAmount = rng.RandiRange(0, maxMonstersPerRoom); + int monsterAmount = rng.RandiRange(0, GetMaxIValueForFloor(maxMonstersByFloor, data.CurrentFloor)); // Define quantos itens serão colocados na sala. - int itemAmount = rng.RandiRange(0, maxItemsPerRoom); + int itemAmount = rng.RandiRange(0, GetMaxIValueForFloor(maxItemsByFloor, data.CurrentFloor)); for (int i = 0; i < monsterAmount; i++) { -- cgit v1.2.3