extends Sprite2D var maze_pos = Vector2i(0, 0) var dir_history = [] var directions = [Vector2i.UP, Vector2i.RIGHT, Vector2i.DOWN, Vector2i.LEFT] var tile_b = Vector2i(1, 0) # border # black var tile_n = Vector2i(0, 0) # no visited # grey var tile_v = Vector2i(0, 1) # visited # blue var tile_s = Vector2i(1, 1) # visited and stuck # green signal done @onready var Maze = $"../maze" func _ready() -> void: Maze.set_cell(maze_pos,0,tile_v) func get_neighbors(): var dlist = [] for dir in directions: var next_pos = maze_pos + dir * 2 if $"../maze".get_cell_atlas_coords(next_pos) == tile_n: #$"../maze".set_cell(next_pos,0,tile_v) #print(next_pos) dlist.append(dir) print(dlist) return dlist func _process(delta: float) -> void: var dlist = get_neighbors() if dlist.is_empty(): if dir_history.is_empty(): print("Maze generation completed") done.emit() set_process(false) return var removed_item = dir_history.pop_back() $"../maze".set_cell(maze_pos-removed_item, 0, tile_s) $"../maze".set_cell(maze_pos, 0, tile_s) maze_pos = maze_pos - removed_item*2 else: # 2.1 pick random neighbar var dir = dlist.pick_random() # Wand zwischen Zellen entfernen $"../maze".set_cell(maze_pos + dir, 0, tile_v) # add to stack dir_history.append(dir) # set new cell maze_pos += dir * 2 $"../maze".set_cell(maze_pos, 0, tile_v) position = 16 * maze_pos+Vector2i(1, 1)