Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: adicionado classes iniciais de jogo que utilizara a classe mapsc… #8

Merged
merged 5 commits into from
Jan 25, 2025

Conversation

LeonardoCruzx
Copy link
Member

@LeonardoCruzx LeonardoCruzx commented Jan 12, 2025

…anner para escanear o mapa atual previamente construido dentro da godot

Resumo por Sourcery

Novos Recursos:

  • Adicionadas classes iniciais de jogo que utilizam o MapScanner para escanear o mapa.
Original summary in English

Resumo por Sourcery

Novos Recursos:

  • Adicionadas classes iniciais de jogo que utilizam o MapScanner para escanear o mapa e configurar dados de tiles.
Original summary in English

Summary by Sourcery

New Features:

  • Added initial game classes that use the MapScanner to scan the map and set up tile data.

…anner para escanear o mapa atual previamente construido dentro da godot
@LeonardoCruzx LeonardoCruzx marked this pull request as draft January 12, 2025 17:19
Copy link

sourcery-ai bot commented Jan 12, 2025

Guia do Revisor por Sourcery

Este pull request introduz as classes de jogo iniciais e a lógica de varredura de mapa. Ele configura a infraestrutura necessária para varrer um mapa usando TileMaps no Godot e armazenar os dados varridos em uma grade de tiles.

Diagrama de sequência para o processo de varredura de mapa

sequenceDiagram
    participant Game
    participant MapScanner
    participant TileMapManager
    participant TilesManager

    Game->>TilesManager: SetUpTiles(width, height)
    Game->>MapScanner: Scan(width, height)
    activate MapScanner
    loop Para cada posição de tile
        MapScanner->>TileMapManager: GetCellTileData(position)
        MapScanner->>TilesManager: TryGetTileAt(x, y)
        MapScanner->>TilesManager: Atualizar propriedades do tile
    end
    MapScanner-->>Game: Sinal MapScanned
    deactivate MapScanner
    Game->>Game: OnMapScanned()
Loading

Diagrama de classes para o novo sistema de varredura de mapa

classDiagram
    class Game {
        -TilesManager _tilesManager
        +MapSettingsResource MapSettings
        -bool MapIsLoading
        +_Ready()
        +OnMapScanned()
        +OnMapGenerated()
    }

    class MapScanner {
        -TileMapManager _tileMapManager
        -TilesManager _tilesManager
        +Scan(int width, int height)
    }

    class TileMapManager {
        +TileMapLayer GroundTileMap
        +TileMapLayer SpawnTileMap
        +_Ready()
    }

    class DRTileData {
        +int X
        +int Y
        +bool IsWalkable
        +bool IsSpawnPoint
    }

    class MapSettingsResource {
        +int Width
        +int Height
    }

    Game --> MapSettingsResource
    Game --> MapScanner
    MapScanner --> TileMapManager
    MapScanner --> TilesManager
    TilesManager --> DRTileData
Loading

Mudanças em Nível de Arquivo

Mudança Detalhes Arquivos
Configuração inicial da grade de tiles.
  • Adicionado um loop para inicializar cada tile na grade com suas coordenadas.
Modules/GameManagers/Scripts/TilesManager.cs
Adicionadas propriedades à classe de dados de tile.
  • Tornadas IsWalkable e IsSpawnPoint propriedades configuráveis.
Modules/Tiles/Scripts/DRTileData.cs
Adicionado um using global para scripts compartilhados.
  • Adicionado global using DungeonRoyale.Shared.Scripts;
GlobalUsings.cs
Criada a classe de jogo inicial.
  • Adicionada uma classe Game que inicializa o TilesManager e inicia o processo de varredura de mapa.
  • Adicionado um manipulador de sinal para quando o mapa é varrido.
Modules/Game/Scripts/Game.cs
Criado um gerenciador para camadas de TileMap.
  • Adicionada uma classe TileMapManager para gerenciar as camadas GroundTileMap e SpawnTileMap.
  • Adicionada lógica para encontrar as camadas de TileMap por nome.
Modules/GameManagers/Scripts/TileMapManager.cs
Criada uma classe de varredura de mapa.
  • Adicionada uma classe MapScanner que varre o TileMap e atualiza a grade DRTileData.
  • Adicionado um sinal que é emitido quando o mapa é varrido.
Modules/Map/Scripts/MapScanner.cs
Adicionada uma extensão de nó para obter nós recursivamente.
  • Adicionado um método de extensão GetRecursivelyNodesOfType à classe Node.
Shared/Scripts/Extensions/NodeExtensions.cs
Criado um recurso de configurações de mapa.
  • Adicionada uma classe MapSettingsResource para armazenar largura e altura do mapa.
Modules/Map/Scripts/MapSettingsResource.cs

Dicas e comandos

Interagindo com o Sourcery

  • Disparar uma nova revisão: Comente @sourcery-ai review no pull request.
  • Continuar discussões: Responda diretamente aos comentários de revisão do Sourcery.
  • Gerar um issue do GitHub a partir de um comentário de revisão: Peça ao Sourcery para criar um issue a partir de um comentário de revisão respondendo a ele. Você também pode responder a um comentário de revisão com @sourcery-ai issue para criar um issue a partir dele.
  • Gerar um título de pull request: Escreva @sourcery-ai em qualquer lugar no título do pull request para gerar um título a qualquer momento. Você também pode comentar @sourcery-ai title no pull request para (re-)gerar o título a qualquer momento.
  • Gerar um resumo de pull request: Escreva @sourcery-ai summary em qualquer lugar no corpo do pull request para gerar um resumo de PR exatamente onde você quiser. Você também pode comentar @sourcery-ai summary no pull request para (re-)gerar o resumo a qualquer momento.
  • Gerar guia do revisor: Comente @sourcery-ai guide no pull request para (re-)gerar o guia do revisor a qualquer momento.
  • Resolver todos os comentários do Sourcery: Comente @sourcery-ai resolve no pull request para resolver todos os comentários do Sourcery. Útil se você já abordou todos os comentários e não quer mais vê-los.
  • Dispensar todas as revisões do Sourcery: Comente @sourcery-ai dismiss no pull request para dispensar todas as revisões existentes do Sourcery. Especialmente útil se você quiser começar do zero com uma nova revisão - não se esqueça de comentar @sourcery-ai review para disparar uma nova revisão!
  • Gerar um plano de ação para um issue: Comente @sourcery-ai plan em um issue para gerar um plano de ação para ele.

Personalizando sua Experiência

Acesse seu painel para:

  • Ativar ou desativar recursos de revisão, como o resumo de pull request gerado pelo Sourcery, o guia do revisor e outros.
  • Alterar o idioma de revisão.
  • Adicionar, remover ou editar instruções de revisão personalizadas.
  • Ajustar outras configurações de revisão.

Obtendo Ajuda

Original review guide in English

Reviewer's Guide by Sourcery

This pull request introduces the initial game classes and map scanning logic. It sets up the necessary infrastructure for scanning a map using TileMaps in Godot and storing the scanned data in a grid of tiles.

Sequence diagram for map scanning process

sequenceDiagram
    participant Game
    participant MapScanner
    participant TileMapManager
    participant TilesManager

    Game->>TilesManager: SetUpTiles(width, height)
    Game->>MapScanner: Scan(width, height)
    activate MapScanner
    loop For each tile position
        MapScanner->>TileMapManager: GetCellTileData(position)
        MapScanner->>TilesManager: TryGetTileAt(x, y)
        MapScanner->>TilesManager: Update tile properties
    end
    MapScanner-->>Game: MapScanned signal
    deactivate MapScanner
    Game->>Game: OnMapScanned()
Loading

Class diagram for the new map scanning system

classDiagram
    class Game {
        -TilesManager _tilesManager
        +MapSettingsResource MapSettings
        -bool MapIsLoading
        +_Ready()
        +OnMapScanned()
        +OnMapGenerated()
    }

    class MapScanner {
        -TileMapManager _tileMapManager
        -TilesManager _tilesManager
        +Scan(int width, int height)
    }

    class TileMapManager {
        +TileMapLayer GroundTileMap
        +TileMapLayer SpawnTileMap
        +_Ready()
    }

    class DRTileData {
        +int X
        +int Y
        +bool IsWalkable
        +bool IsSpawnPoint
    }

    class MapSettingsResource {
        +int Width
        +int Height
    }

    Game --> MapSettingsResource
    Game --> MapScanner
    MapScanner --> TileMapManager
    MapScanner --> TilesManager
    TilesManager --> DRTileData
Loading

File-Level Changes

Change Details Files
Initial setup of the tile grid.
  • Added a loop to initialize each tile in the grid with its coordinates.
Modules/GameManagers/Scripts/TilesManager.cs
Added properties to the tile data class.
  • Made IsWalkable and IsSpawnPoint properties settable.
Modules/Tiles/Scripts/DRTileData.cs
Added a global using for the shared scripts.
  • Added global using DungeonRoyale.Shared.Scripts;
GlobalUsings.cs
Created the initial game class.
  • Added a Game class that initializes the TilesManager and starts the map scanning process.
  • Added a signal handler for when the map is scanned.
Modules/Game/Scripts/Game.cs
Created a manager for the TileMap layers.
  • Added a TileMapManager class to manage the GroundTileMap and SpawnTileMap layers.
  • Added logic to find the TileMap layers by name.
Modules/GameManagers/Scripts/TileMapManager.cs
Created a map scanner class.
  • Added a MapScanner class that scans the TileMap and updates the DRTileData grid.
  • Added a signal that is emitted when the map is scanned.
Modules/Map/Scripts/MapScanner.cs
Added a node extension to get nodes recursively.
  • Added a GetRecursivelyNodesOfType extension method to the Node class.
Shared/Scripts/Extensions/NodeExtensions.cs
Created a map settings resource.
  • Added a MapSettingsResource class to store map width and height.
Modules/Map/Scripts/MapSettingsResource.cs

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!
  • Generate a plan of action for an issue: Comment @sourcery-ai plan on
    an issue to generate a plan of action for it.

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Olá @LeonardoCruzx - Revisei suas alterações - aqui estão alguns comentários:

Comentários Gerais:

  • Por favor, não envie pull requests WIP (trabalho em andamento). Volte com uma implementação completa quando estiver pronto.
  • A implementação está muito básica - MapScanner.Scan() e os métodos de manipulação de mapa do Game precisam de implementações reais. Por favor, esclareça a diferença entre varredura e geração de mapa.
Aqui está o que analisei durante a revisão
  • 🟡 Problemas Gerais: 1 problema encontrado
  • 🟢 Segurança: tudo parece bom
  • 🟢 Testes: tudo parece bom
  • 🟢 Complexidade: tudo parece bom
  • 🟢 Documentação: tudo parece bom

Sourcery é gratuito para código aberto - se você gostou de nossas revisões, considere compartilhá-las ✨
Ajude-me a ser mais útil! Por favor, clique em 👍 ou 👎 em cada comentário para que eu possa usar o feedback para melhorar suas revisões.
Original comment in English

Hey @LeonardoCruzx - I've reviewed your changes - here's some feedback:

Overall Comments:

  • Please don't submit WIP (work in progress) pull requests. Come back with a complete implementation when ready.
  • The implementation is too bare - MapScanner.Scan() and Game's map handling methods need actual implementations. Please clarify the difference between map scanning and generation.
Here's what I looked at during the review
  • 🟡 General issues: 1 issue found
  • 🟢 Security: all looks good
  • 🟢 Testing: all looks good
  • 🟢 Complexity: all looks good
  • 🟢 Documentation: all looks good

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@LeonardoCruzx LeonardoCruzx changed the title wip: adicionado classes iniciais de jogo que utilizara a classe mapsc… adicionado classes iniciais de jogo que utilizara a classe mapsc… Jan 12, 2025
@LeonardoCruzx LeonardoCruzx changed the title adicionado classes iniciais de jogo que utilizara a classe mapsc… feat: adicionado classes iniciais de jogo que utilizara a classe mapsc… Jan 12, 2025
@LeonardoCruzx LeonardoCruzx added the enhancement New feature or request label Jan 12, 2025
@LeonardoCruzx LeonardoCruzx self-assigned this Jan 12, 2025
…e e escaner foi alterado para emitir um sinal diretamente ao script game
…s dos blocos e adiciona extensao para buscar recursivamente nos de um tipo
@LeonardoCruzx LeonardoCruzx marked this pull request as ready for review January 25, 2025 17:33
@LeonardoCruzx
Copy link
Member Author

@sourcery-ai review

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Olá @LeonardoCruzx - Revisei suas alterações - aqui estão alguns comentários:

Comentários Gerais:

  • Considere usar injeção de dependência em vez de singletons (TileMapManager.Instance, TilesManager.Instance) para melhorar a testabilidade e reduzir dependências ocultas
  • O campo MapIsLoading parece não estar sendo usado - é definido, mas nunca verificado. Considere removê-lo se não for necessário ou implementar a funcionalidade pretendida
Aqui está o que analisei durante a revisão
  • 🟡 Problemas Gerais: 1 problema encontrado
  • 🟢 Segurança: tudo parece bom
  • 🟢 Testes: tudo parece bom
  • 🟢 Complexidade: tudo parece bom
  • 🟢 Documentação: tudo parece bom

Sourcery é gratuito para código aberto - se você gostou de nossas revisões, considere compartilhá-las ✨
Ajude-me a ser mais útil! Por favor, clique em 👍 ou 👎 em cada comentário para que eu possa usar o feedback para melhorar suas revisões.
Original comment in English

Hey @LeonardoCruzx - I've reviewed your changes - here's some feedback:

Overall Comments:

  • Consider using dependency injection instead of singletons (TileMapManager.Instance, TilesManager.Instance) to improve testability and reduce hidden dependencies
  • The MapIsLoading field appears to be unused - it's set but never checked. Consider removing it if not needed or implement the intended functionality
Here's what I looked at during the review
  • 🟡 General issues: 1 issue found
  • 🟢 Security: all looks good
  • 🟢 Testing: all looks good
  • 🟢 Complexity: all looks good
  • 🟢 Documentation: all looks good

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

}
else
{
GD.PrintErr("There is already an instance of TileMapManager in the scene.");
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sugestão (risco_de_bug): Considere lançar exceções para falhas de inicialização em vez de apenas registrar erros

Quando o gerenciador não pode ser inicializado corretamente (instância duplicada ou TileMaps necessários ausentes), o tratamento de erro atual permite que continue em um estado inválido. Isso pode levar a exceções de referência nula posteriormente.

Implementação sugerida:

public class TileMapManagerInitializationException : Exception
{
    public TileMapManagerInitializationException(string message) : base(message) { }
}

public partial class TileMapManager : Node2D
{
    public static TileMapManager? Instance { get; private set; }
        if (Instance is not null)
        {
            throw new TileMapManagerInitializationException("Já existe uma instância de TileMapManager na cena.");
        }

        Instance = this;

O desenvolvedor precisará:

  1. Adicionar tratamento de erro onde o TileMapManager é instanciado para capturar a nova TileMapManagerInitializationException
  2. Adicionar de forma semelhante o lançamento e tratamento de exceções para o caso em que os TileMaps necessários estão ausentes (não mostrado no código fornecido)
  3. Atualizar quaisquer testes de unidade para esperar exceções em vez de erros registrados
Original comment in English

suggestion (bug_risk): Consider throwing exceptions for initialization failures instead of just logging errors

When the manager can't be properly initialized (duplicate instance or missing required TileMaps), the current error handling allows it to continue in an invalid state. This could lead to null reference exceptions later.

Suggested implementation:

public class TileMapManagerInitializationException : Exception
{
    public TileMapManagerInitializationException(string message) : base(message) { }
}

public partial class TileMapManager : Node2D
{
    public static TileMapManager? Instance { get; private set; }
        if (Instance is not null)
        {
            throw new TileMapManagerInitializationException("There is already an instance of TileMapManager in the scene.");
        }

        Instance = this;

The developer will need to:

  1. Add error handling where TileMapManager is instantiated to catch the new TileMapManagerInitializationException
  2. Similarly add exception throwing and handling for the case where required TileMaps are missing (not shown in the provided code)
  3. Update any unit tests to expect exceptions rather than logged errors

…o projeto e forma que o gerenciador de tilemaps pegar os tilemaps foi alterada
@LeonardoCruzx LeonardoCruzx merged commit 9f3609e into main Jan 25, 2025
3 checks passed
@LeonardoCruzx LeonardoCruzx deleted the feat/adicionar-escaneamento-de-mapa branch January 25, 2025 20:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants