105 lines
2.7 KiB
GDScript
105 lines
2.7 KiB
GDScript
extends Node2D
|
|
|
|
## MAP VARIABLES
|
|
var GRID_WIDTH = Global.GRID_WIDTH
|
|
var GRID_HEIGHT = Global.GRID_HEIGHT
|
|
var EMPTY = Global.MAP_EMPTY
|
|
var PATH = Global.MAP_PATH
|
|
var START = Global.MAP_START
|
|
var FINISH = Global.MAP_FINISH
|
|
var UP_CELL = Global.MAP_UP_CELL
|
|
|
|
## MAP LAYERS
|
|
var ground: TileMapLayer
|
|
var water: TileMapLayer
|
|
var walls: TileMapLayer
|
|
var scatter: TileMapLayer
|
|
var cells: Array
|
|
|
|
## MAP
|
|
var map: Array
|
|
|
|
var map_width: int
|
|
var map_height: int
|
|
|
|
func _ready() -> void:
|
|
Log.pr("Level ready")
|
|
|
|
map_width = Global.GRID_WIDTH * Global.ROOM_WIDTH
|
|
map_height = Global.GRID_HEIGHT * Global.ROOM_HEIGHT
|
|
|
|
ground = $Ground
|
|
water = $Water
|
|
#walls = $Walls
|
|
scatter = $Scatter
|
|
|
|
cells = CoordUtil.all_cells(Vector2i(-1, -1), Vector2i(map_width + 1, map_height + 1))
|
|
|
|
#RNG.set_seed(123456789)
|
|
Log.pr(RNG.get_seed())
|
|
Log.pr(RNG.randf())
|
|
Log.pr(RNG.randf())
|
|
Log.pr(RNG.randf())
|
|
Log.pr(RNG.randf())
|
|
#RNG.set_seed(123456789)
|
|
Log.pr(RNG.get_seed())
|
|
Log.pr(RNG.randf())
|
|
Log.pr(RNG.randf())
|
|
Log.pr(RNG.randf())
|
|
Log.pr(RNG.randf())
|
|
generateMap()
|
|
|
|
func generateMap() -> void:
|
|
Log.pr("Generating map")
|
|
|
|
var map_generator = MapGenerator.new()
|
|
map_generator.generate_map()
|
|
map_generator.print_map()
|
|
|
|
map = map_generator.get_map()
|
|
Log.pr(map)
|
|
|
|
drawGround()
|
|
drawPerimiter()
|
|
populateMapCells()
|
|
|
|
func drawGround() -> void:
|
|
Log.pr("Drawing ground")
|
|
ground.clear()
|
|
ground.set_cells_terrain_connect(cells, 0, 0, false)
|
|
|
|
func drawPerimiter() -> void:
|
|
Log.pr("Drawing perimeter")
|
|
var perimeter_cells: Array = CoordUtil.perimeter_cells(Vector2i(0, 0), Vector2i(map_width - 1, map_height - 1), false, 2)
|
|
water.set_cells_terrain_connect(perimeter_cells, 0, 1, false)
|
|
|
|
func populateMapCells() -> void:
|
|
# Loop through the map and check which type of cell it is
|
|
Log.pr("Populating map cells")
|
|
for y in range(GRID_HEIGHT):
|
|
for x in range(GRID_WIDTH):
|
|
var cell_value = map[y][x]
|
|
|
|
var scene = null
|
|
|
|
match cell_value:
|
|
EMPTY:
|
|
scene = SceneSelector.get_random_scene("res://mapgen/layout/misc")
|
|
Log.pr("Empty cell ", y, x, scene)
|
|
PATH:
|
|
scene = SceneSelector.get_random_scene("res://mapgen/layout/path")
|
|
Log.pr("Path cell", y, x, scene)
|
|
START:
|
|
scene = SceneSelector.get_random_scene("res://mapgen/layout/start")
|
|
Log.pr("Start cell", y, x, scene)
|
|
FINISH:
|
|
scene = SceneSelector.get_random_scene("res://mapgen/layout/finish")
|
|
Log.pr("Finish cell", y, x, scene)
|
|
UP_CELL:
|
|
scene = SceneSelector.get_random_scene("res://mapgen/layout/link")
|
|
Log.pr("Up cell", y, x, scene)
|
|
|
|
MapBuilder.copy_tilemap_to_target(scene, water, "Water", Vector2i(x, y))
|
|
MapBuilder.copy_tilemap_to_target(scene, scatter, "Scatter", Vector2i(x, y))
|
|
#walls.set_cells_terrain_connect(cells, 0, 0, true)
|
|
MapBuilder.redraw_terrain(cells, water, 0, 1)
|