2023-10-18 15:26:27 -04:00
|
|
|
class_name StandardWorldGenerator
|
|
|
|
extends WorldGenerator
|
|
|
|
|
|
|
|
@export
|
2023-12-10 00:22:06 +01:00
|
|
|
var rooms: Array[PackedScene] = []
|
|
|
|
|
|
|
|
var _rooms_left: Array[PackedScene] = []
|
|
|
|
var _rooms_right: Array[PackedScene] = []
|
|
|
|
var _rooms_top: Array[PackedScene] = []
|
|
|
|
var _rooms_bottom: Array[PackedScene] = []
|
|
|
|
var _rooms_blocking: Array[PackedScene] = []
|
|
|
|
|
|
|
|
var _progress_tracker: ProgressTracker = ProgressTracker.new(1)
|
2023-10-18 15:26:27 -04:00
|
|
|
|
|
|
|
func _generate(map: TileMap) -> void:
|
2023-12-10 00:22:06 +01:00
|
|
|
self._sort_rooms(_progress_tracker.next_step("Sorting Rooms"))
|
|
|
|
|
|
|
|
func _sort_rooms(step_tracker: ProgressStepTracker) -> void:
|
|
|
|
step_tracker.complete.call_deferred()
|
|
|
|
|
|
|
|
step_tracker.set_substeps(len(self.rooms))
|
|
|
|
for room_scene in rooms:
|
|
|
|
step_tracker.substep(room_scene.get_name())
|
|
|
|
var room: StandardRoom = room_scene.instantiate()
|
|
|
|
if room.left:
|
|
|
|
self._rooms_left.append(room_scene)
|
|
|
|
if room.right:
|
|
|
|
self._rooms_right.append(room_scene)
|
|
|
|
if room.top:
|
|
|
|
self._rooms_top.append(room_scene)
|
|
|
|
if room.bottom:
|
|
|
|
self._rooms_bottom.append(room_scene)
|
|
|
|
if room.is_block():
|
|
|
|
self._rooms_blocking.append(room_scene)
|
|
|
|
|
|
|
|
room.queue_free()
|
|
|
|
|
|
|
|
if len(self._rooms_left) == 0:
|
|
|
|
push_error("0 left rooms!")
|
|
|
|
if len(self._rooms_right) == 0:
|
|
|
|
push_error("0 right rooms!")
|
|
|
|
if len(self._rooms_top) == 0:
|
|
|
|
push_error("0 top rooms!")
|
|
|
|
if len(self._rooms_bottom) == 0:
|
|
|
|
push_error("0 bottom rooms!")
|
|
|
|
if len(self._rooms_blocking) == 0:
|
|
|
|
push_warning("0 blocking rooms!")
|
|
|
|
|
|
|
|
func _get_progress_tracker() -> ProgressTracker:
|
|
|
|
return self._progress_tracker
|