diff options
Diffstat (limited to 'scripts/map_generator.gd')
-rw-r--r-- | scripts/map_generator.gd | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/scripts/map_generator.gd b/scripts/map_generator.gd new file mode 100644 index 0000000..328bce1 --- /dev/null +++ b/scripts/map_generator.gd @@ -0,0 +1,69 @@ +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 |