Upgrade Godot Version & Work Towards Level Gen
This commit is contained in:
50
scripts/v2/loading/progress_step_tracker.gd
Normal file
50
scripts/v2/loading/progress_step_tracker.gd
Normal file
@ -0,0 +1,50 @@
|
||||
class_name ProgressStepTracker
|
||||
extends Object
|
||||
|
||||
var _step_name: String = ""
|
||||
var _message: String = ""
|
||||
var _subset_index: int = 0
|
||||
var _subset_count: int = 0
|
||||
|
||||
var _tracker: ProgressTracker = null
|
||||
|
||||
func _init(tracker: ProgressTracker, step_name: String):
|
||||
self._tracker = tracker
|
||||
self._step_name = step_name
|
||||
|
||||
# set_substeps: set the number of substeps for this step
|
||||
func set_substeps(substeps: int):
|
||||
self._subset_count = substeps
|
||||
|
||||
# substep: should be called when a substep is started
|
||||
func substep(message: String = ""):
|
||||
self._subset_index += 1
|
||||
self._message = message
|
||||
self._tracker.progress_update.emit()
|
||||
|
||||
# complete: should be called when this step is done
|
||||
func complete():
|
||||
self._tracker.step_complete.emit()
|
||||
|
||||
# get_step_name: get the name of this step
|
||||
func get_step_name() -> String:
|
||||
return self._step_name
|
||||
|
||||
# get_message: get the message for this step
|
||||
func get_message() -> String:
|
||||
return self._message
|
||||
|
||||
# get_substep_index: get the index of the current substep
|
||||
func get_substep_index() -> int:
|
||||
return self._subset_index
|
||||
|
||||
# get_substep_count: get the number of substeps for this step
|
||||
func get_substep_count() -> int:
|
||||
return self._subset_count
|
||||
|
||||
# get_progress: get the progress of this step
|
||||
func get_progress() -> float:
|
||||
if self._subset_count == 0:
|
||||
return 0.0
|
||||
else:
|
||||
return float(self._subset_index) / float(self._subset_count)
|
50
scripts/v2/loading/progress_tracker.gd
Normal file
50
scripts/v2/loading/progress_tracker.gd
Normal file
@ -0,0 +1,50 @@
|
||||
class_name ProgressTracker
|
||||
extends Object
|
||||
|
||||
signal progress_update()
|
||||
signal step_change(step: int)
|
||||
signal complete()
|
||||
signal step_complete()
|
||||
|
||||
var _current_step: ProgressStepTracker = null
|
||||
var _current_step_index: int = -1
|
||||
var _steps_count: int
|
||||
|
||||
func _init(step_count: int = 0) -> void:
|
||||
_steps_count = step_count
|
||||
self.substep_complete.connect(self, "_on_substep_complete")
|
||||
|
||||
func _on_step_complete() -> void:
|
||||
if _current_step_index == _steps_count:
|
||||
self.complete.emit()
|
||||
return
|
||||
|
||||
# next_step: should be called before the step is actually started
|
||||
func next_step(step_name: String = "") -> ProgressStepTracker:
|
||||
_current_step_index += 1
|
||||
if _current_step_index > _steps_count:
|
||||
push_error("Number of steps tracked is larger than number of steps used!")
|
||||
step_change.emit(_current_step_index)
|
||||
|
||||
self._current_step = ProgressStepTracker.new(self, step_name)
|
||||
self.progress_update.emit()
|
||||
|
||||
return self._current_step
|
||||
|
||||
# step_complete: returns the progress of all steps
|
||||
func get_step_progress() -> float:
|
||||
return float(_current_step_index) / float(_steps_count)
|
||||
|
||||
# get_total_progress_percentage: returns the progress of all steps and substeps
|
||||
func get_total_progress_percentage() -> float:
|
||||
return self.get_step_progress()
|
||||
|
||||
# get_progress_data: returns a dictionary with data about the current progress for the UI
|
||||
func get_progress_data() -> Dictionary:
|
||||
return {
|
||||
"step_name": self._current_step.get_step_name(),
|
||||
"message": self._current_step.get_message(),
|
||||
"substeps": self._current_step.get_substeps(),
|
||||
"current_substep": self._current_step.get_substep_index(),
|
||||
"total_progress":self.get_total_progress_percentage()
|
||||
}
|
19
scripts/v2/worldgen/standard/room.gd
Normal file
19
scripts/v2/worldgen/standard/room.gd
Normal file
@ -0,0 +1,19 @@
|
||||
class_name StandardRoom
|
||||
extends TileMap
|
||||
|
||||
@export_category("Room Openings")
|
||||
@export var left: bool = false
|
||||
@export var right: bool = false
|
||||
@export var top: bool = false
|
||||
@export var bottom: bool = false
|
||||
|
||||
|
||||
@onready
|
||||
var room_size: Vector2i = self.get_used_rect().size
|
||||
@onready
|
||||
var cell_size: Vector2i = self.tile_set.tile_size
|
||||
|
||||
func is_block() -> bool:
|
||||
if self.left or self.right or self.top or self.bottom:
|
||||
return false
|
||||
return true
|
@ -2,7 +2,49 @@ class_name StandardWorldGenerator
|
||||
extends WorldGenerator
|
||||
|
||||
@export
|
||||
var parts: Array[PackedScene] = []
|
||||
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)
|
||||
|
||||
func _generate(map: TileMap) -> void:
|
||||
pass
|
||||
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
|
||||
|
@ -7,3 +7,10 @@ func generate(map: TileMap) -> void:
|
||||
return
|
||||
|
||||
self.call("_generate", map)
|
||||
|
||||
func get_progress_tracker() -> ProgressTracker:
|
||||
if not self.has_method("_get_progress_tracker"):
|
||||
push_error("Generator missing `_get_progress_tracker` method")
|
||||
return null
|
||||
|
||||
return self.call("_get_progress_tracker")
|
||||
|
Reference in New Issue
Block a user