extends Node2D @export var grid_width : int = 20 @export var grid_height : int = 14 @export var tile_size : int = 16 @onready var tile_map : TileMapLayer = $TileMapLayer var _pg : PathGenerator var path_straight_atlas_coords : Vector2i = Vector2i(8, 1) var path_corner_atlas_coords : Vector2i = Vector2i(9, 1) var path_empty_atlas_coords : Vector2i = Vector2i(0, 0) enum TileTransform { ROTATE_0 = 0, ROTATE_90 = TileSetAtlasSource.TRANSFORM_TRANSPOSE | TileSetAtlasSource.TRANSFORM_FLIP_H, ROTATE_180 = TileSetAtlasSource.TRANSFORM_FLIP_H | TileSetAtlasSource.TRANSFORM_FLIP_V, ROTATE_270 = TileSetAtlasSource.TRANSFORM_TRANSPOSE | TileSetAtlasSource.TRANSFORM_FLIP_V, } func _ready() -> void: _pg = PathGenerator.new(grid_width, grid_height) _display_path() func _display_path(): var path : Array[Vector2i] = [] while path.size() < 35: path = _pg.generate_path() for i in path: var score : int = _get_tile_score(path, i) var atlas_coords : Vector2i = path_empty_atlas_coords var rot : TileTransform = TileTransform.ROTATE_0 match score: 2, 8, 10: atlas_coords = path_straight_atlas_coords rot = TileTransform.ROTATE_90 1, 4, 5: atlas_coords = path_straight_atlas_coords 3: atlas_coords = path_corner_atlas_coords rot = TileTransform.ROTATE_270 6: atlas_coords = path_corner_atlas_coords 12: atlas_coords = path_corner_atlas_coords rot = TileTransform.ROTATE_90 9: atlas_coords = path_corner_atlas_coords rot = TileTransform.ROTATE_180 _display_tile(atlas_coords, rot, i) func _display_tile(coords : Vector2i, rot : TileTransform, pos : Vector2i): tile_map.set_cell(pos, 0, coords, rot) func _get_tile_score(path : Array[Vector2i], tile : Vector2i) -> int: var score : int = 0 var x : int = tile.x var y : int = tile.y score += 1 if path.has(Vector2i(x, y - 1)) else 0 score += 2 if path.has(Vector2i(x + 1, y)) else 0 score += 4 if path.has(Vector2i(x, y + 1)) else 0 score += 8 if path.has(Vector2i(x - 1, y)) else 0 return score