feat: Add core map generation and management system
- Introduced MapData, MapGenerator, and MapPainter classes for procedural map generation. - Implemented LevelManager to handle level initialization and navigation. - Created TurnManager for managing turn order in a turn-based system. - Added Player and Enemy character classes with movement and turn-taking capabilities. - Established pathfinding using AStar2D in PathfindingHandler. - Integrated new scenes for player and enemy characters, along with world setup. - Included a new tileset for futuristic Zelda-themed assets.
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
## MapPainter.gd
|
||||
# Responsible for painting the generated map data onto a TileMapLayer in the scene.
|
||||
# Handles both floor and wall tiles, using atlas coordinates for floor variety and terrain peering for walls.
|
||||
class_name MapPainter
|
||||
extends RefCounted
|
||||
|
||||
# The source ID for the floor tile in the TileSet atlas.
|
||||
const FLOOR_SOURCE_ID: int = 0
|
||||
# Two different atlas coordinates for floor tiles, used to create a checkerboard effect for visual variety.
|
||||
const FLOOR_ATLAS_COORDS_1: Vector2i = Vector2i(3, 2)
|
||||
const FLOOR_ATLAS_COORDS_2: Vector2i = Vector2i(4, 2)
|
||||
|
||||
# Terrain set and terrain index for wall tiles, used for Godot's terrain peering system.
|
||||
const WALL_TERRAIN_SET: int = 0
|
||||
const WALL_TERRAIN: int = 0
|
||||
|
||||
# Paints all tiles from the given MapData onto the provided TileMapLayer.
|
||||
# Floors are painted with alternating atlas tiles for variety; walls are collected and painted with terrain peering.
|
||||
func paint(data: MapData, layer: TileMapLayer) -> void:
|
||||
layer.clear() # Remove any existing tiles from the layer.
|
||||
var wall_cells: Array[Vector2i] = [] # Collect wall tile positions for batch painting.
|
||||
|
||||
for coords: Vector2i in data.grid.keys():
|
||||
match data.grid[coords]:
|
||||
MapData.TileType.FLOOR:
|
||||
# Alternate between two floor atlas tiles for a checkerboard effect.
|
||||
var use_first: bool = ((coords.x + coords.y) % 2) == 0
|
||||
var atlas_coords: Vector2i = FLOOR_ATLAS_COORDS_1 if use_first else FLOOR_ATLAS_COORDS_2
|
||||
layer.set_cell(coords, FLOOR_SOURCE_ID, atlas_coords)
|
||||
MapData.TileType.WALL:
|
||||
# Collect wall positions for terrain peering.
|
||||
wall_cells.append(coords)
|
||||
|
||||
# Use Godot's terrain peering to auto-connect wall tiles for seamless edges/corners.
|
||||
layer.set_cells_terrain_connect(wall_cells, WALL_TERRAIN_SET, WALL_TERRAIN, false)
|
||||
Reference in New Issue
Block a user