using Godot; using System; /// /// O mundo do jogo é composto por Tiles. /// Um tile é um quadrado de 16x16 que representa uma /// unidade discreta do cenário. Tiles podem agir como /// parede, chão, ou outras funções. /// public partial class Tile : Sprite2D { /// /// A definição do tile carrega seus valores padrão. /// private TileDefinition definition; /// /// Determina se atores podem andar em cima do Tile. /// public bool IsWalkable { get; private set; } /// /// Determina se o tile bloqueia visão. /// public bool IsTransparent { get; private set; } private bool isExplored = false; /// /// Se o jogador já viu este tile antes. /// Tiles não descobertos são invisíveis. /// public bool IsExplored { get => this.isExplored; set { isExplored = value; if (IsExplored && !Visible) { Visible = true; } } } private bool isInView = false; /// /// Se o jogador vê o tile neste exato momento. /// Elementos neste tile estão dentro do campo de visão do jogador. /// public bool IsInView { get => this.isInView; set { this.isInView = value; if (IsInView && !IsExplored) { IsExplored = true; } } } public Tile(Vector2I pos, TileDefinition definition) { // Tile herda da classe Sprite2D. // Por padrão, a posição do Sprite2D é no centro de sua textura. // Para o jogo, faz mais sentido que a posição seja no // canto superior esquerdo. Centered = false; // Tiles começam invisíveis porque não foram vistos pelo jogador. Visible = false; Position = Grid.GridToWorld(pos); SetDefinition(definition); } /// /// Define as características do tile. /// /// Definição do tile. public void SetDefinition(TileDefinition definition) { this.definition = definition; Texture = definition.Texture; IsWalkable = definition.IsWalkable; IsTransparent = definition.IsTransparent; } }