50 lines
1.5 KiB
GDScript
50 lines
1.5 KiB
GDScript
extends Node
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready() -> void:
|
|
var width: int = 100
|
|
var height: int = 100
|
|
var terrainMap: Array[Variant] = generateTerrainMap(width, height)
|
|
paintTerrainMap($Ground, terrainMap, "grass", 0)
|
|
|
|
func generateTerrainMap(width: int, heigth: int) -> Array[Variant]:
|
|
var terrainMap: Array[Variant] = []
|
|
for y in range(heigth):
|
|
terrainMap.append([])
|
|
for x in range(width):
|
|
if randf() < 0.1: # 10% chance for asphalt
|
|
terrainMap[y].append("asphalt")
|
|
else:
|
|
terrainMap[y].append("grass")
|
|
|
|
return terrainMap
|
|
|
|
func paintTerrainMap(layer, terrain_map, default_terrain, terrain_set_index):
|
|
var tile_set = layer.tile_set
|
|
#var terrain_set = tile_set.get_terrain_set(terrain_set_index)
|
|
#var grass_id = terrain_set.find_terrain_by_name("Gras")
|
|
#var asphalt_id = terrain_set.find_terrain_by_name("Asphalt")
|
|
|
|
# Collect coordinates for each terrain type
|
|
var grass_cells = []
|
|
var asphalt_cells = []
|
|
|
|
for y in range(terrain_map.size()):
|
|
for x in range(terrain_map[y].size()):
|
|
var terrain_name = terrain_map[y][x]
|
|
if terrain_name == "grass":
|
|
grass_cells.append(Vector2i(x, y))
|
|
elif terrain_name == "asphalt":
|
|
asphalt_cells.append(Vector2i(x, y))
|
|
|
|
# Paint grass
|
|
if grass_cells.size() > 0:
|
|
$Ground.set_cells_terrain_connect(grass_cells, terrain_set_index, 0)
|
|
# Paint asphalt
|
|
if asphalt_cells.size() > 0:
|
|
for x in range(asphalt_cells.size()):
|
|
for y in range(asphalt_cells.size()):
|
|
if terrain_map[x][y] == "asphalt":
|
|
$Roads.set_cell(Vector2i(x, y), 1, Vector2i(9, 16))
|
|
|