generated from Nekojimi/GodotTemplate
75 lines
1.9 KiB
GDScript
75 lines
1.9 KiB
GDScript
extends TileMap
|
|
|
|
enum TileType {WALL = 2, BLANK = 3, HOLE = 4, STOP = 5}
|
|
|
|
const tileTable: Array = [TileType.BLANK,TileType.BLANK,TileType.WALL,TileType.HOLE,TileType.STOP]
|
|
var cellGraph: Array
|
|
var nextRow: int = -1
|
|
|
|
func _ready() -> void:
|
|
generate(get_used_cells())
|
|
|
|
func generate(cells: Array):
|
|
for cell in cells:
|
|
var tile: int = tileTable[rand_range(0,tileTable.size())]
|
|
set_cellv(cell,tile)
|
|
|
|
for cell in cells:
|
|
var cellGraphData: CellGraphData = CellGraphData.new()
|
|
cellGraphData.cell = cell
|
|
|
|
for x in range(-1,2):
|
|
for y in range(-1,2):
|
|
if (x == 0 && y == 0):
|
|
continue
|
|
var tile: int = get_cellv(cell)
|
|
if (tile == TileType.WALL || tile == TileType.HOLE):
|
|
continue
|
|
var move: Vector2 = find_move(cell, Vector2(x,y))
|
|
if (move == cell):
|
|
continue
|
|
var moveTile: int = get_cellv(move)
|
|
if (moveTile == TileType.WALL || moveTile == TileType.HOLE):
|
|
continue
|
|
cellGraphData.links.append(move)
|
|
|
|
cellGraph.append(cellGraphData)
|
|
|
|
func map_pos(grid: Vector2) -> Vector2:
|
|
return cell_size * grid
|
|
|
|
func find_move(from: Vector2, dir: Vector2) -> Vector2:
|
|
var curPos: Vector2 = from
|
|
var cont: bool = true
|
|
|
|
while (cont):
|
|
var nextPos: Vector2 = curPos + dir
|
|
|
|
var nextCell: int = get_cellv(nextPos)
|
|
if (nextCell == TileType.WALL): # wall
|
|
return curPos
|
|
elif (nextCell == TileType.STOP || nextCell == TileType.HOLE): # stop or hole
|
|
return nextPos
|
|
elif (nextCell == TileMap.INVALID_CELL):
|
|
return nextPos
|
|
else:
|
|
curPos = nextPos
|
|
|
|
return Vector2(-1,-1)
|
|
|
|
func _process(delta: float) -> void:
|
|
position.y += delta * 3
|
|
|
|
if (position.y > (cell_size.y * abs(nextRow))):
|
|
print("Generating row " + String(nextRow))
|
|
nextRow += 1
|
|
var toGenerate: Array = []
|
|
for x in range(get_used_rect().size.x):
|
|
toGenerate.append(Vector2(x,-nextRow))
|
|
|
|
generate(toGenerate)
|
|
|
|
class CellGraphData:
|
|
var cell: Vector2
|
|
var links: Array
|