extends TileMap @export var ground_tile_source_id = 0 @export var wall_tile_source_id = 1 @export var destination_tile_source_id = 2 @export var target_tile_source_id = 3 @export var ground_left_tile_source_id = 4 @export var ground_right_tile_source_id = 5 @export var ground_bottom_tile_source_id = 6 @export var ground_left_bottom_tile_source_id = 7 @export var ground_right_bottom_tile_source_id = 8 @export var map_width = 13 # keep to a odd value @export var map_height = 19 # keep to a odd value # Debug variables var current_destination_cell: Vector2i var current_target_cell: Vector2i # The tilemap is divided in two areas separated by a wall # One for the player (bottom area) # One for the enemy (top area) func _ready(): draw_map() func draw_map(): draw_ground() draw_wall() func draw_ground(): var tile_source_id = ground_tile_source_id var height = get_bottom_area_height() for x in range(map_width): for y in range(map_height): if x == 0 && y == map_height - 1: tile_source_id = ground_left_bottom_tile_source_id elif x == map_width - 1 && y == map_height - 1: tile_source_id = ground_right_bottom_tile_source_id elif x == 0 && y >= height.x: tile_source_id = ground_left_tile_source_id elif x == map_width - 1 && y >= height.x: tile_source_id = ground_right_tile_source_id elif y == height.y: tile_source_id = ground_bottom_tile_source_id else: tile_source_id = ground_tile_source_id set_cell(0, Vector2i(x, y), tile_source_id, Vector2i(0, 0), 0) func draw_wall(): var middle_height = floor(map_height / 2.0) for x in range(map_width): set_cell(1, Vector2i(x - 1, middle_height - 1), wall_tile_source_id, Vector2i(0, 0), 0) # why have we to add -1? func get_top_spawn_cell() -> Vector2i: return Vector2i(floor(map_width / 2.0), 1) func get_bottom_spawn_cell() -> Vector2i: return Vector2i(floor(map_width / 2.0), map_height - 2) func get_random_top_cell() -> Vector2i: var w = get_area_width() var h = get_top_area_height() return Vector2i(randi_range(w.x, w.y), randi_range(h.x, h.y)) func get_random_bottom_cell() -> Vector2i: var w = get_area_width() var h = get_bottom_area_height() return Vector2i(randi_range(w.x, w.y), randi_range(h.x, h.y)) func is_in_bottom_area(cell: Vector2i) -> bool: var height = get_bottom_area_height() return cell.y >= height.x && cell.y <= height.y func get_area_width() -> Vector2i: return Vector2i(0, map_width - 1) func get_top_area_height() -> Vector2i: var middle_height = floor(map_height / 2.0) return Vector2i(0, middle_height - 1) func get_bottom_area_height() -> Vector2i: var middle_height = floor(map_height / 2.0) return Vector2i(middle_height + 1, map_height - 1) # Debug functions func reset_and_set_target_cell(cell: Vector2i): reset_and_set_cell(current_target_cell, cell, target_tile_source_id) func reset_and_set_destination_cell(cell: Vector2i): reset_and_set_cell(current_destination_cell, cell, destination_tile_source_id) func reset_and_set_cell(current_cell: Vector2i, cell: Vector2i, tile_source_id: int): if current_cell != null: set_cell(0, current_cell, ground_tile_source_id, Vector2i(0, 0), 0) set_cell(0, cell, tile_source_id, Vector2i(0, 0), 0) current_cell = cell