From f7d5e40d8c76d7bdd1b51dad64c185798dc7d33f Mon Sep 17 00:00:00 2001 From: yuki Date: Tue, 25 Nov 2025 17:56:22 -0300 Subject: [PATCH] move player instantiation function to base room --- scenes/room/room.gd | 35 +++++++++++++++++++++++++++++ scenes/room/states/room_entering.gd | 33 +-------------------------- 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/scenes/room/room.gd b/scenes/room/room.gd index 04193e7..6da05c6 100644 --- a/scenes/room/room.gd +++ b/scenes/room/room.gd @@ -1,6 +1,9 @@ class_name Room extends Node2D +signal player_spawned(player: Player) + + @export var config: RoomConfig @onready var camera: RoomCamera = $RoomCamera @@ -14,7 +17,39 @@ var player_scene: PackedScene = preload("uid://cqm5besqgsb7x") var initial_spawn: Vector2i = Vector2i.ZERO var player: Player +var wake_timer: Timer func _ready() -> void: assert(config != null, "room config is null") + + +func spawn_player(waking: bool) -> Player: + var p: Player = player_scene.instantiate() + add_child(p) + if waking: + wake_timer = Timer.new() + p.add_child(wake_timer) + wake_timer.one_shot = true + wake_timer.start(config.transition_in_duration) + + wake_timer.timeout.connect(_on_wake_timer) + + p.state_machine._transition_to_next_state(PlayerState.PAUSED) + + if initial_spawn != Vector2i.ZERO: + p.global_position = initial_spawn + else: + assert( + config.initial_spawn != Vector2i.ZERO, + "invalid player initial spawn provided" + ) + p.global_position = config.initial_spawn + + player_spawned.emit(p) + return p + + +func _on_wake_timer() -> void: + player.state_machine._transition_to_next_state(PlayerState.WAKING) + wake_timer.queue_free() diff --git a/scenes/room/states/room_entering.gd b/scenes/room/states/room_entering.gd index 9c5f313..240a3ba 100644 --- a/scenes/room/states/room_entering.gd +++ b/scenes/room/states/room_entering.gd @@ -3,12 +3,11 @@ extends RoomState var trans_tween: Tween var player_light_tween: Tween -var wake_timer: Timer func _enter(_previous_state_path: String, _data: Dictionary = {}) -> void: print("entering room") - room.player = _instantiate_player(true) + room.player = room.spawn_player(true) assert(room.player != null, "player is null") room.camera.global_position = room.config.camera_position @@ -72,33 +71,3 @@ func _enter(_previous_state_path: String, _data: Dictionary = {}) -> void: await trans_tween.finished finished.emit(PLAYING) - - -func _instantiate_player(waking: bool) -> Player: - var p: Player = room.player_scene.instantiate() - room.add_child(p) - if waking: - wake_timer = Timer.new() - p.add_child(wake_timer) - wake_timer.one_shot = true - wake_timer.start(room.config.transition_in_duration) - - wake_timer.timeout.connect(_on_wake_timer) - - p.state_machine._transition_to_next_state(PlayerState.PAUSED) - - if room.initial_spawn != Vector2i.ZERO: - p.global_position = room.initial_spawn - else: - assert( - room.config.initial_spawn != Vector2i.ZERO, - "invalid player initial spawn provided" - ) - p.global_position = room.config.initial_spawn - - return p - - -func _on_wake_timer() -> void: - room.player.state_machine._transition_to_next_state(PlayerState.WAKING) - wake_timer.queue_free()