move player instantiation function to base room
This commit is contained in:
parent
2f18454a65
commit
f7d5e40d8c
2 changed files with 36 additions and 32 deletions
|
|
@ -1,6 +1,9 @@
|
||||||
class_name Room extends Node2D
|
class_name Room extends Node2D
|
||||||
|
|
||||||
|
|
||||||
|
signal player_spawned(player: Player)
|
||||||
|
|
||||||
|
|
||||||
@export var config: RoomConfig
|
@export var config: RoomConfig
|
||||||
|
|
||||||
@onready var camera: RoomCamera = $RoomCamera
|
@onready var camera: RoomCamera = $RoomCamera
|
||||||
|
|
@ -14,7 +17,39 @@ var player_scene: PackedScene = preload("uid://cqm5besqgsb7x")
|
||||||
var initial_spawn: Vector2i = Vector2i.ZERO
|
var initial_spawn: Vector2i = Vector2i.ZERO
|
||||||
|
|
||||||
var player: Player
|
var player: Player
|
||||||
|
var wake_timer: Timer
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
assert(config != null, "room config is null")
|
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()
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,11 @@ extends RoomState
|
||||||
|
|
||||||
var trans_tween: Tween
|
var trans_tween: Tween
|
||||||
var player_light_tween: Tween
|
var player_light_tween: Tween
|
||||||
var wake_timer: Timer
|
|
||||||
|
|
||||||
|
|
||||||
func _enter(_previous_state_path: String, _data: Dictionary = {}) -> void:
|
func _enter(_previous_state_path: String, _data: Dictionary = {}) -> void:
|
||||||
print("entering room")
|
print("entering room")
|
||||||
room.player = _instantiate_player(true)
|
room.player = room.spawn_player(true)
|
||||||
assert(room.player != null, "player is null")
|
assert(room.player != null, "player is null")
|
||||||
room.camera.global_position = room.config.camera_position
|
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
|
await trans_tween.finished
|
||||||
|
|
||||||
finished.emit(PLAYING)
|
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()
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue