Trying out new generation tech for maps...
This commit is contained in:
49
procedural_map.gd
Normal file
49
procedural_map.gd
Normal file
@@ -0,0 +1,49 @@
|
||||
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))
|
||||
|
||||
Reference in New Issue
Block a user