From 17543caff808df2383e52be8a74e5b6c09bcc431 Mon Sep 17 00:00:00 2001 From: Leonardo Cruz Date: Wed, 8 Jan 2025 13:35:00 -0300 Subject: [PATCH 1/5] wip: adicionado drtiledata e tiles manager iniciais --- Modules/GameManagers/Scripts/TilesManager.cs | 53 +++++++++++++++++++ .../GameManagers/Scripts/TilesManager.cs.uid | 1 + Modules/Tiles/Scripts/DRTileData.cs | 20 +++++++ Modules/Tiles/Scripts/DRTileData.cs.uid | 1 + Shared/Scripts/TilesConstants.cs | 6 +++ Shared/Scripts/TilesConstants.cs.uid | 1 + 6 files changed, 82 insertions(+) create mode 100644 Modules/GameManagers/Scripts/TilesManager.cs create mode 100644 Modules/GameManagers/Scripts/TilesManager.cs.uid create mode 100644 Modules/Tiles/Scripts/DRTileData.cs create mode 100644 Modules/Tiles/Scripts/DRTileData.cs.uid create mode 100644 Shared/Scripts/TilesConstants.cs create mode 100644 Shared/Scripts/TilesConstants.cs.uid diff --git a/Modules/GameManagers/Scripts/TilesManager.cs b/Modules/GameManagers/Scripts/TilesManager.cs new file mode 100644 index 0000000..26f38ac --- /dev/null +++ b/Modules/GameManagers/Scripts/TilesManager.cs @@ -0,0 +1,53 @@ +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; +using DungeonRoyale.Modules.Tiles.Scripts; + +namespace DungeonRoyale.Modules.GameManagers.Scripts; + +public partial class TilesManager : Node2D +{ + public DRTileData[,] Tiles { get; private set; } = new DRTileData[0, 0]; + + private int _width; + private int _height; + + public void SetUpTiles(int width, int height) + { + _width = width; + _height = height; + + Tiles = new DRTileData[_width, _height]; + + for (int x = 0; x < _width; x++) + { + for (int y = 0; y < _height; y++) + { + Tiles[x, y] = new DRTileData(x, y, true); + } + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private bool IsOutOfMapBounds(int x, int y) => + x < 0 || x >= _width || y < 0 || y >= _height; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public DRTileData? GetTileAt(int x, int y) => + IsOutOfMapBounds(x, y) ? null : Tiles[x, y]; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryGetTileAt(int x, int y, [NotNullWhen(returnValue: true)] out DRTileData? tileData) => + (tileData = GetTileAt(x, y)) is not null; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryGetTileAt((int x, int y) position, [NotNullWhen(returnValue: true)] out DRTileData? tileData) => + TryGetTileAt(position.x, position.y, out tileData); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryGetTileAt(Vector2I position, [NotNullWhen(returnValue: true)] out DRTileData? tileData) => + TryGetTileAt(position.X, position.Y, out tileData); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryGetTileAtGlobalCoords(Vector2 position, [NotNullWhen(returnValue: true)] out DRTileData? tileData) => + (tileData = GetTileAt((int) position.X / TileConstants.TILE_SIZE, (int) position.Y / TileConstants.TILE_SIZE)) is not null; +} diff --git a/Modules/GameManagers/Scripts/TilesManager.cs.uid b/Modules/GameManagers/Scripts/TilesManager.cs.uid new file mode 100644 index 0000000..527df15 --- /dev/null +++ b/Modules/GameManagers/Scripts/TilesManager.cs.uid @@ -0,0 +1 @@ +uid://bmr66sr26pdab diff --git a/Modules/Tiles/Scripts/DRTileData.cs b/Modules/Tiles/Scripts/DRTileData.cs new file mode 100644 index 0000000..27ce5a2 --- /dev/null +++ b/Modules/Tiles/Scripts/DRTileData.cs @@ -0,0 +1,20 @@ +namespace DungeonRoyale.Modules.Tiles.Scripts; + +public partial class DRTileData +{ + public int X { get; private set; } + public int Y { get; private set; } + + public bool IsWalkable { get; private set; } + + public DRTileData() + { + } + + public DRTileData(int x, int y, bool isWalkable) + { + X = x; + Y = y; + IsWalkable = isWalkable; + } +} diff --git a/Modules/Tiles/Scripts/DRTileData.cs.uid b/Modules/Tiles/Scripts/DRTileData.cs.uid new file mode 100644 index 0000000..9f6e9d4 --- /dev/null +++ b/Modules/Tiles/Scripts/DRTileData.cs.uid @@ -0,0 +1 @@ +uid://d0s8c7afp4vgy diff --git a/Shared/Scripts/TilesConstants.cs b/Shared/Scripts/TilesConstants.cs new file mode 100644 index 0000000..42bab0a --- /dev/null +++ b/Shared/Scripts/TilesConstants.cs @@ -0,0 +1,6 @@ +namespace DungeonRoyale.Shared.Scripts; + +public static class TileConstants +{ + public const int TILE_SIZE = 16; +} \ No newline at end of file diff --git a/Shared/Scripts/TilesConstants.cs.uid b/Shared/Scripts/TilesConstants.cs.uid new file mode 100644 index 0000000..e5bb904 --- /dev/null +++ b/Shared/Scripts/TilesConstants.cs.uid @@ -0,0 +1 @@ +uid://1v5312025i62 From 9984d2e17a56f6379059dfb52dd0bbcabbe9fc69 Mon Sep 17 00:00:00 2001 From: Leonardo Cruz Date: Wed, 8 Jan 2025 13:35:57 -0300 Subject: [PATCH 2/5] fix: corrigido caminhos para as texturas do player quebrado --- Modules/Player/Scenes/player.tscn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/Player/Scenes/player.tscn b/Modules/Player/Scenes/player.tscn index f9de617..267cdc6 100644 --- a/Modules/Player/Scenes/player.tscn +++ b/Modules/Player/Scenes/player.tscn @@ -2,10 +2,10 @@ [ext_resource type="Script" uid="uid://de61d5m60vonw" path="res://Modules/Player/Scripts/Player.cs" id="1_d6hpj"] [ext_resource type="Texture2D" uid="uid://brmg31ce6noqj" path="res://Modules/Player/Textures/d_idle.png" id="2_4itp8"] -[ext_resource type="Texture2D" uid="uid://du7cgbk1wqk0g" path="res://Modules/Player/Textures/Idle.png" id="2_eeunm"] +[ext_resource type="Texture2D" uid="uid://jf1knh77qpy2" path="res://Modules/Player/Textures/u_idle.png" id="2_eeunm"] [ext_resource type="Texture2D" uid="uid://bu3wecbmouixt" path="res://Modules/Player/Textures/d_walk.png" id="2_i873j"] [ext_resource type="Texture2D" uid="uid://c31cs04ddln8k" path="res://Modules/Player/Textures/s_walk.png" id="3_bxhrv"] -[ext_resource type="Texture2D" uid="uid://dpu3tffj8in05" path="res://Modules/Player/Textures/walk.png" id="3_umw3d"] +[ext_resource type="Texture2D" uid="uid://bu8810dpn686q" path="res://Modules/Player/Textures/u_walk.png" id="3_umw3d"] [ext_resource type="Texture2D" uid="uid://dyoql8jmirecv" path="res://Modules/Player/Textures/s_idle.png" id="4_5c0ey"] [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_d6hpj"] From 16526eca60ac97b78a89749f3649b6833e30ea43 Mon Sep 17 00:00:00 2001 From: Leonardo Cruz Date: Wed, 8 Jan 2025 14:19:56 -0300 Subject: [PATCH 3/5] feat: foi adicionado isspawnpoint aos dados do bloco --- Modules/GameManagers/Scripts/TilesManager.cs | 2 +- Modules/Tiles/Scripts/DRTileData.cs | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Modules/GameManagers/Scripts/TilesManager.cs b/Modules/GameManagers/Scripts/TilesManager.cs index 26f38ac..a080766 100644 --- a/Modules/GameManagers/Scripts/TilesManager.cs +++ b/Modules/GameManagers/Scripts/TilesManager.cs @@ -22,7 +22,7 @@ public void SetUpTiles(int width, int height) { for (int y = 0; y < _height; y++) { - Tiles[x, y] = new DRTileData(x, y, true); + Tiles[x, y] = new DRTileData(x, y, true, false); } } } diff --git a/Modules/Tiles/Scripts/DRTileData.cs b/Modules/Tiles/Scripts/DRTileData.cs index 27ce5a2..e2d03bc 100644 --- a/Modules/Tiles/Scripts/DRTileData.cs +++ b/Modules/Tiles/Scripts/DRTileData.cs @@ -7,14 +7,17 @@ public partial class DRTileData public bool IsWalkable { get; private set; } + public bool IsSpawnPoint { get; private set; } + public DRTileData() { } - public DRTileData(int x, int y, bool isWalkable) + public DRTileData(int x, int y, bool isWalkable, bool isSpawnPoint) { X = x; Y = y; IsWalkable = isWalkable; + IsSpawnPoint = isSpawnPoint; } } From cb8980c635a10aa95cbceedd1c7c51983e4a87f5 Mon Sep 17 00:00:00 2001 From: Leonardo Cruz Date: Thu, 9 Jan 2025 17:18:15 -0300 Subject: [PATCH 4/5] feat: tiles manager foi adaptado para se tornar um singleton e tambem foi adicionado a lista de scripts auto carregaveis da godot --- Modules/GameManagers/Scripts/TilesManager.cs | 15 +++++++++++++++ project.godot | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/Modules/GameManagers/Scripts/TilesManager.cs b/Modules/GameManagers/Scripts/TilesManager.cs index a080766..cb1e690 100644 --- a/Modules/GameManagers/Scripts/TilesManager.cs +++ b/Modules/GameManagers/Scripts/TilesManager.cs @@ -6,11 +6,26 @@ namespace DungeonRoyale.Modules.GameManagers.Scripts; public partial class TilesManager : Node2D { + public static TilesManager? Instance { get; private set; } + public DRTileData[,] Tiles { get; private set; } = new DRTileData[0, 0]; private int _width; private int _height; + public override void _Ready() + { + if (Instance is null) + { + Instance = this; + } + else + { + GD.PrintErr("There is already an instance of TilesManager in the scene."); + } + } + + public void SetUpTiles(int width, int height) { _width = width; diff --git a/project.godot b/project.godot index 04c2472..0625996 100644 --- a/project.godot +++ b/project.godot @@ -15,6 +15,10 @@ run/main_scene="res://Modules/Game/Scenes/Game.tscn" config/features=PackedStringArray("4.4", "C#", "GL Compatibility") config/icon="res://icon.svg" +[autoload] + +TilesManager="*res://Modules/GameManagers/Scripts/TilesManager.cs" + [dotnet] project/assembly_name="DungeonRoyale" From 3c8bfe0fb56a189640a44b9a858b680bffd2b73b Mon Sep 17 00:00:00 2001 From: Leonardo Cruz Date: Sat, 11 Jan 2025 00:57:54 -0300 Subject: [PATCH 5/5] adjust: tile constants foi movido para uma pasta de constantes e foi adicionado uma validacao para numeros negativos no setup do tiles manager --- Modules/GameManagers/Scripts/TilesManager.cs | 16 +++++++--------- Modules/Player/Scripts/Player.cs | 2 ++ Modules/Tiles/Scripts/DRTileData.cs | 4 +--- Shared/Scripts/{ => Constants}/MappedInputs.cs | 2 +- .../Scripts/{ => Constants}/MappedInputs.cs.uid | 0 Shared/Scripts/{ => Constants}/TilesConstants.cs | 2 +- .../{ => Constants}/TilesConstants.cs.uid | 0 7 files changed, 12 insertions(+), 14 deletions(-) rename Shared/Scripts/{ => Constants}/MappedInputs.cs (79%) rename Shared/Scripts/{ => Constants}/MappedInputs.cs.uid (100%) rename Shared/Scripts/{ => Constants}/TilesConstants.cs (60%) rename Shared/Scripts/{ => Constants}/TilesConstants.cs.uid (100%) diff --git a/Modules/GameManagers/Scripts/TilesManager.cs b/Modules/GameManagers/Scripts/TilesManager.cs index cb1e690..a108975 100644 --- a/Modules/GameManagers/Scripts/TilesManager.cs +++ b/Modules/GameManagers/Scripts/TilesManager.cs @@ -1,6 +1,8 @@ +using System; using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; using DungeonRoyale.Modules.Tiles.Scripts; +using DungeonRoyale.Shared.Scripts.Constants; namespace DungeonRoyale.Modules.GameManagers.Scripts; @@ -25,21 +27,17 @@ public override void _Ready() } } - public void SetUpTiles(int width, int height) { + if (width <= 0 || height <= 0) + { + throw new ArgumentException("Width and height must be greater than 0."); + } + _width = width; _height = height; Tiles = new DRTileData[_width, _height]; - - for (int x = 0; x < _width; x++) - { - for (int y = 0; y < _height; y++) - { - Tiles[x, y] = new DRTileData(x, y, true, false); - } - } } [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/Modules/Player/Scripts/Player.cs b/Modules/Player/Scripts/Player.cs index 7f334a7..c32d717 100644 --- a/Modules/Player/Scripts/Player.cs +++ b/Modules/Player/Scripts/Player.cs @@ -1,3 +1,5 @@ +using DungeonRoyale.Shared.Scripts.Constants; + namespace DungeonRoyale.Modules.Player.Scripts; public partial class Player : CharacterBody2D diff --git a/Modules/Tiles/Scripts/DRTileData.cs b/Modules/Tiles/Scripts/DRTileData.cs index e2d03bc..59f950f 100644 --- a/Modules/Tiles/Scripts/DRTileData.cs +++ b/Modules/Tiles/Scripts/DRTileData.cs @@ -13,11 +13,9 @@ public DRTileData() { } - public DRTileData(int x, int y, bool isWalkable, bool isSpawnPoint) + public DRTileData(int x, int y) { X = x; Y = y; - IsWalkable = isWalkable; - IsSpawnPoint = isSpawnPoint; } } diff --git a/Shared/Scripts/MappedInputs.cs b/Shared/Scripts/Constants/MappedInputs.cs similarity index 79% rename from Shared/Scripts/MappedInputs.cs rename to Shared/Scripts/Constants/MappedInputs.cs index bc0cfc6..4ab32f0 100644 --- a/Shared/Scripts/MappedInputs.cs +++ b/Shared/Scripts/Constants/MappedInputs.cs @@ -1,4 +1,4 @@ -namespace DungeonRoyale.Shared.Scripts; +namespace DungeonRoyale.Shared.Scripts.Constants; public static class MappedInputs { diff --git a/Shared/Scripts/MappedInputs.cs.uid b/Shared/Scripts/Constants/MappedInputs.cs.uid similarity index 100% rename from Shared/Scripts/MappedInputs.cs.uid rename to Shared/Scripts/Constants/MappedInputs.cs.uid diff --git a/Shared/Scripts/TilesConstants.cs b/Shared/Scripts/Constants/TilesConstants.cs similarity index 60% rename from Shared/Scripts/TilesConstants.cs rename to Shared/Scripts/Constants/TilesConstants.cs index 42bab0a..bafa12e 100644 --- a/Shared/Scripts/TilesConstants.cs +++ b/Shared/Scripts/Constants/TilesConstants.cs @@ -1,4 +1,4 @@ -namespace DungeonRoyale.Shared.Scripts; +namespace DungeonRoyale.Shared.Scripts.Constants; public static class TileConstants { diff --git a/Shared/Scripts/TilesConstants.cs.uid b/Shared/Scripts/Constants/TilesConstants.cs.uid similarity index 100% rename from Shared/Scripts/TilesConstants.cs.uid rename to Shared/Scripts/Constants/TilesConstants.cs.uid