75 lines
2.1 KiB
GDScript
75 lines
2.1 KiB
GDScript
extends Sprite2D
|
|
|
|
var pos: Vector2i = Vector2i(0,0)
|
|
var dir: TileSet.CellNeighbor = TileSet.CELL_NEIGHBOR_RIGHT_SIDE
|
|
@onready var tiles: TileMapLayer = get_node("../TileMapLayer")
|
|
|
|
var cur_dir: 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 cur_int: 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: Dictionary = {
|
|
0: Vector2i(-2, 1),
|
|
1: Vector2i(0, 2),
|
|
2: Vector2i(0, 3),
|
|
3: Vector2i(-1, 4),
|
|
4: Vector2i(-2, 5),
|
|
5: Vector2i(-1, 0),
|
|
}
|
|
|
|
func getNextStep(tile: int) -> Vector2i:
|
|
return antProgram.get(tile, Vector2i(0,0))
|
|
|
|
func _ready() -> void:
|
|
self.set_z_index(1)
|
|
self.set_frame(cur_int[dir])
|
|
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 = cur_dir[(cur_int[dir] + tiles.numTiles + res.x) % tiles.numTiles]
|
|
self.set_frame(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)
|