generated from Nekojimi/GodotTemplate
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.9 KiB
75 lines
1.9 KiB
3 years ago
|
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
|