summaryrefslogtreecommitdiff
path: root/scripts/map_generator.gd
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-05-22 18:18:46 -0400
committerbd <bdunahu@operationnull.com>2025-05-22 18:18:46 -0400
commitb318529cf9c01fca4ac2e1b7c7f7fccd0be4589a (patch)
tree4554f6c14799372133fd49d7ac7688a17a55fa97 /scripts/map_generator.gd
parentf9d7b55634049e0ae6533fb94e058c2a368cd49b (diff)
Use TileMapLayer in MapGenerator to display path
Diffstat (limited to 'scripts/map_generator.gd')
-rw-r--r--scripts/map_generator.gd69
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