extends Sprite2D var pos: Vector2i = Vector2i(0,0) var dir: TileSet.CellNeighbor = TileSet.CELL_NEIGHBOR_RIGHT_SIDE @onready var tiles: TileMapLayer = get_node("../TileMapLayer") @export var randomRules: bool = true var curDir: Dictionary = { 0: TileSet.CELL_NEIGHBOR_RIGHT_SIDE, 1: TileSet.CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE, 2: TileSet.CELL_NEIGHBOR_BOTTOM_LEFT_SIDE, 3: TileSet.CELL_NEIGHBOR_LEFT_SIDE, 4: TileSet.CELL_NEIGHBOR_TOP_LEFT_SIDE, 5: TileSet.CELL_NEIGHBOR_TOP_RIGHT_SIDE, } var curInt: Dictionary = { TileSet.CELL_NEIGHBOR_RIGHT_SIDE: 0, TileSet.CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE: 1, TileSet.CELL_NEIGHBOR_BOTTOM_LEFT_SIDE: 2, TileSet.CELL_NEIGHBOR_LEFT_SIDE: 3, TileSet.CELL_NEIGHBOR_TOP_LEFT_SIDE: 4, TileSet.CELL_NEIGHBOR_TOP_RIGHT_SIDE: 5, } var antProgram: Array[Vector2i] = [ Vector2i(2, 1), Vector2i(0, 2), Vector2i(3, 3), Vector2i(1, 4), Vector2i(1, 5), Vector2i(2, 0), ] func randomTileset() -> void: var rng = RandomNumberGenerator.new() antProgram = [] var s: int = rng.randi_range(10, 99) for i in range(0, s): antProgram.append(Vector2i(rng.randi_range(1, 4), (i+1)%s)) func getNextStep(tile: int) -> Vector2i: if tile > antProgram.size(): return Vector2i(0,0) else: return antProgram.get(tile) func _ready() -> void: self.set_z_index(1) self.set_frame(curInt[dir]) if randomRules: randomTileset() tiles.set_tile(pos, tiles.get_tile_colour(pos)) move(dir) # update loop: # move in dir # get tile col, change dir based on col # paint tile col func update() -> void: move(dir) pos = tiles.get_neighbor_cell(pos, dir) var tile: int = tiles.get_tile_colour(pos) var res = getNextStep(tile) dir = curDir[(curInt[dir] + tiles.numTiles + res.x) % tiles.numTiles] self.set_frame(curInt[dir]) tiles.set_tile(pos, res.y % tiles.numTiles) func move(to: TileSet.CellNeighbor) -> void: var delta: Vector2 match to: TileSet.CELL_NEIGHBOR_RIGHT_SIDE: delta = Vector2(tiles.texSize.x, 0) TileSet.CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE: delta = Vector2(tiles.texSize.x/2, tiles.texSize.y/4*3) TileSet.CELL_NEIGHBOR_BOTTOM_LEFT_SIDE: delta = Vector2(-tiles.texSize.x/2, tiles.texSize.y/4*3) TileSet.CELL_NEIGHBOR_LEFT_SIDE: delta = Vector2(-tiles.texSize.x, 0) TileSet.CELL_NEIGHBOR_TOP_LEFT_SIDE: delta = Vector2(-tiles.texSize.x/2, -tiles.texSize.y/4*3) TileSet.CELL_NEIGHBOR_TOP_RIGHT_SIDE: delta = Vector2(tiles.texSize.x/2, -tiles.texSize.y/4*3) _: delta = Vector2(0,0) self.translate(delta)