Enhancement: load game scene once to allow run scene directly (#406)
Co-authored-by: StraToN <StraToN@users.noreply.github.com>
This commit is contained in:
@@ -74,13 +74,9 @@ func run(command_params: Array) -> int:
|
||||
escoria.main_menu_instance.hide()
|
||||
|
||||
var res_room = escoria.resource_cache.get_resource(command_params[0])
|
||||
var res_game = escoria.resource_cache.get_resource(
|
||||
ProjectSettings.get_setting("escoria/ui/game_scene")
|
||||
)
|
||||
|
||||
# Load game scene
|
||||
var game_scene = res_game.instance()
|
||||
if not game_scene:
|
||||
if not escoria.game_scene:
|
||||
escoria.logger.report_errors(
|
||||
"ChangeSceneCommand.run: Failed loading game scene",
|
||||
[
|
||||
@@ -92,39 +88,13 @@ func run(command_params: Array) -> int:
|
||||
# Load room scene
|
||||
var room_scene = res_room.instance()
|
||||
if room_scene:
|
||||
room_scene.add_child(game_scene)
|
||||
room_scene.move_child(game_scene, 0)
|
||||
room_scene.add_child(escoria.game_scene)
|
||||
room_scene.move_child(escoria.game_scene, 0)
|
||||
room_scene.game = escoria.game_scene
|
||||
escoria.main.set_scene(room_scene)
|
||||
|
||||
if "esc_script" in room_scene and room_scene.esc_script \
|
||||
and command_params[2]:
|
||||
|
||||
var script = escoria.esc_compiler.load_esc_file(
|
||||
room_scene.esc_script
|
||||
)
|
||||
|
||||
if script.events.has("setup"):
|
||||
escoria.event_manager.queue_event(script.events["setup"])
|
||||
var rc = yield(escoria.event_manager, "event_finished")
|
||||
while rc[1] != "setup":
|
||||
rc = yield(escoria.event_manager, "event_finished")
|
||||
if rc[0] != ESCExecution.RC_OK:
|
||||
return rc[0]
|
||||
|
||||
if !command_params[1]:
|
||||
escoria.main.scene_transition.transition()
|
||||
yield(escoria.main.scene_transition, "transition_done")
|
||||
|
||||
if script.events.has("ready"):
|
||||
escoria.event_manager.queue_event(script.events["ready"])
|
||||
var rc = yield(escoria.event_manager, "event_finished")
|
||||
while rc[1] != "ready":
|
||||
rc = yield(escoria.event_manager, "event_finished")
|
||||
if rc[0] != ESCExecution.RC_OK:
|
||||
return rc[0]
|
||||
|
||||
else:
|
||||
if !command_params[1]:
|
||||
if not "esc_script" in room_scene or not room_scene.esc_script \
|
||||
or not command_params[2] and !command_params[1]:
|
||||
escoria.main.scene_transition.transition()
|
||||
yield(escoria.main.scene_transition, "transition_done")
|
||||
|
||||
|
||||
@@ -99,6 +99,11 @@ func unregister_object(object: ESCObject) -> void:
|
||||
if not escoria.inventory_manager.inventory_has(object.global_id) \
|
||||
and not object.global_id in RESERVED_OBJECTS:
|
||||
objects.erase(object.global_id)
|
||||
else:
|
||||
if not object.global_id in RESERVED_OBJECTS:
|
||||
# Re-instance the node if it is an item present in inventory.
|
||||
objects[object.global_id].node = objects[object.global_id].node \
|
||||
.duplicate()
|
||||
|
||||
|
||||
# Insert data to save into savegame.
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
# This script contains functions called by gamedev's game.gd.
|
||||
# These functions convert input actions into game actions. For example:
|
||||
# "click on background" -> player walks to position
|
||||
# "click on item" -> player walks to item then performs the action defined
|
||||
# by current verb
|
||||
# This class performs certain tasks as a reaction to certain inputs, such as
|
||||
# player walking, player walking towards an object, etc.
|
||||
class_name ESCController
|
||||
|
||||
|
||||
|
||||
@@ -37,6 +37,10 @@ var player
|
||||
var game
|
||||
|
||||
|
||||
# Compiled ESCScript
|
||||
var compiled_script: ESCScript
|
||||
|
||||
|
||||
# Start the random number generator when the camera limits should be displayed
|
||||
func _enter_tree():
|
||||
if editor_debug_mode == EditorRoomDebugDisplay.CAMERA_LIMITS:
|
||||
@@ -56,6 +60,13 @@ func _ready():
|
||||
return
|
||||
|
||||
game = $game
|
||||
if game == null:
|
||||
game = escoria.game_scene
|
||||
add_child(game)
|
||||
move_child(game, 0)
|
||||
|
||||
if escoria.main.current_scene == null:
|
||||
escoria.main.set_scene(self)
|
||||
|
||||
if player_scene:
|
||||
player = player_scene.instance()
|
||||
@@ -78,7 +89,24 @@ func _ready():
|
||||
|
||||
if global_id.empty():
|
||||
global_id = name
|
||||
|
||||
|
||||
if esc_script:
|
||||
run_script_event("setup")
|
||||
var rc = yield(escoria.event_manager, "event_finished")
|
||||
while rc[1] != "setup":
|
||||
rc = yield(escoria.event_manager, "event_finished")
|
||||
if rc[0] != ESCExecution.RC_OK:
|
||||
return rc[0]
|
||||
|
||||
escoria.main.scene_transition.transition()
|
||||
yield(escoria.main.scene_transition, "transition_done")
|
||||
|
||||
run_script_event("ready")
|
||||
rc = yield(escoria.event_manager, "event_finished")
|
||||
while rc[1] != "ready":
|
||||
rc = yield(escoria.event_manager, "event_finished")
|
||||
if rc[0] != ESCExecution.RC_OK:
|
||||
return rc[0]
|
||||
|
||||
# Draw the camera limits visualization if enabled
|
||||
func _draw():
|
||||
@@ -123,3 +151,18 @@ func set_camera_limits(p_camera_limits: Array) -> void:
|
||||
func set_editor_debug_mode(p_editor_debug_mode: int) -> void:
|
||||
editor_debug_mode = p_editor_debug_mode
|
||||
update()
|
||||
|
||||
|
||||
# Runs the script event from the script attached, if any
|
||||
#
|
||||
# #### Parameters
|
||||
#
|
||||
# - event_name: the name of the event to run
|
||||
func run_script_event(event_name: String):
|
||||
if !esc_script:
|
||||
return
|
||||
if compiled_script == null:
|
||||
compiled_script = escoria.esc_compiler.load_esc_file(esc_script)
|
||||
|
||||
if compiled_script.events.has(event_name):
|
||||
escoria.event_manager.queue_event(compiled_script.events[event_name])
|
||||
|
||||
Reference in New Issue
Block a user