using Godot; /// /// A parte visual do mapa. /// public partial class Map : Node2D { /// /// Dados do mapa. /// public MapData Map_Data { get; private set; } /// /// raio de alcance da visão do jogador. /// [Export] private int fovRadius = 12; /// /// Gerador de mapas. /// private DungeonGenerator generator; FieldOfView fieldOfView; private Node2D tilesNode; private Node2D entitiesNode; public override void _Ready() { base._Ready(); // Começamos obtendo nós relevantes para o mapa. generator = GetNode("Generator"); fieldOfView = GetNode("FieldOfView"); tilesNode = GetNode("Tiles"); entitiesNode = GetNode("Entities"); } /// /// Coloca todos os tiles do mapa no mundo do jogo. /// private void PlaceTiles() { foreach (Tile tile in Map_Data.Tiles) { tilesNode.AddChild(tile); } } /// /// Coloca todos os tiles do mapa no mundo do jogo. /// private void PlaceEntities() { foreach (Actor actor in Map_Data.Entities) { entitiesNode.AddChild(actor); } } /// /// Cria um andar da masmorra utilizando o gerador de mapa. /// /// O gerador de mapas precisa do jogador. public void Generate(Player player) { Map_Data = generator.GenerateDungeon(player); PlaceTiles(); PlaceEntities(); } /// /// Atualiza o campo de visão do mapa com base em uma coordenada. /// /// Centro de visão, normalmente é a posição do jogador. public void UpdateFOV(Vector2I pos) { fieldOfView.UpdateFOV(Map_Data, pos, fovRadius); // Esconde ou revela atores com base no campo de visão. foreach (Actor actor in Map_Data.Entities) { actor.Visible = Map_Data.GetTile(actor.GridPosition).IsInView; } } }