Documentation and Optimization Part 1 (#2)
Authored-by: Dennis Ploeger <develop@dieploegers.de>
This commit is contained in:
@@ -1,43 +1,55 @@
|
||||
# Escoria main room handling and scene switcher
|
||||
extends Node
|
||||
|
||||
# This script is basically the scene-switcher.
|
||||
|
||||
# Global id of the last scene the player was before current scene
|
||||
var last_scene_global_id
|
||||
# Current scene room being displayed
|
||||
var current_scene
|
||||
var last_scene_global_id: String
|
||||
|
||||
# Current scene room being displayed
|
||||
var current_scene: Node
|
||||
|
||||
# The Escoria context currently in wait state
|
||||
var wait_level
|
||||
|
||||
# FIXME Document this variable
|
||||
var screen_ofs = Vector2(0, 0)
|
||||
|
||||
# ESCBackgroundMusic node
|
||||
# Reference to the ESCBackgroundMusic node
|
||||
onready var bg_music = $bg_music
|
||||
|
||||
# Reference to the scene transition node
|
||||
onready var scene_transition = $layers/curtain/scene_transition
|
||||
|
||||
|
||||
# Set the new current scene
|
||||
# Connect the wait timer event
|
||||
func _ready() -> void:
|
||||
$layers/wait_timer.connect("timeout", self, "_on_wait_finished")
|
||||
|
||||
|
||||
# Set current scene
|
||||
#
|
||||
# #### Parameters
|
||||
#
|
||||
# - p_scene: Current scene to set
|
||||
func set_scene(p_scene: Node):
|
||||
# - p_scene: Scene to set
|
||||
func set_scene(p_scene: Node) -> void:
|
||||
if !p_scene:
|
||||
escoria.logger.report_errors("main", ["Trying to set empty scene"])
|
||||
|
||||
if current_scene != null:
|
||||
clear_scene()
|
||||
|
||||
|
||||
add_child(p_scene)
|
||||
move_child(p_scene, 0)
|
||||
|
||||
|
||||
current_scene = p_scene
|
||||
check_game_scene_methods()
|
||||
|
||||
set_camera_limits()
|
||||
|
||||
|
||||
func clear_scene():
|
||||
# Cleanup the current scene
|
||||
func clear_scene() -> void:
|
||||
if current_scene == null:
|
||||
return
|
||||
|
||||
@@ -48,14 +60,18 @@ func clear_scene():
|
||||
current_scene.free()
|
||||
current_scene = null
|
||||
|
||||
func wait(params : Array, level):
|
||||
wait_level = level
|
||||
$layers/wait_timer.set_wait_time(float(params[0]))
|
||||
$layers/wait_timer.set_one_shot(true)
|
||||
$layers/wait_timer.start()
|
||||
|
||||
# Triggered, when the wait has finished
|
||||
func _on_wait_finished() -> void:
|
||||
escoria.esc_level_runner.finished(wait_level)
|
||||
|
||||
|
||||
func set_camera_limits(camera_limit_id : int = 0):
|
||||
# Set the camera limits
|
||||
#
|
||||
# #### Parameters
|
||||
#
|
||||
# * camera_limits_id: The id of the room's camera limits to set
|
||||
func set_camera_limits(camera_limit_id : int = 0) -> void:
|
||||
var limits = {}
|
||||
var scene_camera_limits = current_scene.camera_limits[camera_limit_id]
|
||||
if scene_camera_limits.size.x == 0 and scene_camera_limits.size.y == 0:
|
||||
@@ -65,10 +81,14 @@ func set_camera_limits(camera_limit_id : int = 0):
|
||||
area = child.get_full_area_rect2()
|
||||
break
|
||||
|
||||
# if the background is smaller than the viewport, we want the camera to stick centered on the background
|
||||
if area.size.x == 0 or area.size.y == 0 or area.size < get_viewport().size:
|
||||
escoria.logger.report_warning("main.gd:set_camera_limits()",
|
||||
"No limit area! Using viewport.")
|
||||
# if the background is smaller than the viewport, we want the camera
|
||||
# to stick centered on the background
|
||||
if area.size.x == 0 or area.size.y == 0 \
|
||||
or area.size < get_viewport().size:
|
||||
escoria.logger.report_warning(
|
||||
"main.gd:set_camera_limits()",
|
||||
"No limit area! Using viewport."
|
||||
)
|
||||
area.size = get_viewport().size
|
||||
|
||||
escoria.logger.info("Setting camera limits from scene ", [area])
|
||||
@@ -82,21 +102,25 @@ func set_camera_limits(camera_limit_id : int = 0):
|
||||
else:
|
||||
limits = {
|
||||
"limit_left": scene_camera_limits.position.x,
|
||||
"limit_right": scene_camera_limits.position.x + scene_camera_limits.size.x,
|
||||
"limit_right": scene_camera_limits.position.x + \
|
||||
scene_camera_limits.size.x,
|
||||
"limit_top": scene_camera_limits.position.y,
|
||||
"limit_bottom": scene_camera_limits.position.y + scene_camera_limits.size.y + screen_ofs.y * 2,
|
||||
"limit_bottom": scene_camera_limits.position.y + \
|
||||
scene_camera_limits.size.y + screen_ofs.y * 2,
|
||||
"set_default": true,
|
||||
}
|
||||
escoria.logger.info("Setting camera limits from parameter ", [scene_camera_limits])
|
||||
escoria.logger.info(
|
||||
"Setting camera limits from parameter ",
|
||||
[scene_camera_limits]
|
||||
)
|
||||
|
||||
current_scene.game.get_node("camera").set_limits(limits)
|
||||
current_scene.game.get_node("camera").set_offset(screen_ofs * 2)
|
||||
|
||||
|
||||
"""
|
||||
The game.tscn scene's root node script MUST implement the following methods.
|
||||
If they do not exist, stop immediately. Implement them, even if empty
|
||||
"""
|
||||
# Sanity check that the game.tscn scene's root node script MUST
|
||||
# implement the following methods. If they do not exist, stop immediately.
|
||||
# Implement them, even if empty
|
||||
func check_game_scene_methods():
|
||||
assert(current_scene.game.has_method("left_click_on_bg"))
|
||||
assert(current_scene.game.has_method("right_click_on_bg"))
|
||||
|
||||
Reference in New Issue
Block a user