girlwillneversingagain/scenes/room/room.gd

55 lines
1.4 KiB
GDScript

class_name Room extends Node2D
signal player_spawned(player: Player)
@export var config: RoomConfig
@onready var camera: RoomCamera = $RoomCamera
@onready var director: StateMachine = $RoomDirector
@onready var palette_shader: ColorRect = $CanvasLayer/PaletteShader
@onready var canvas_modulate: CanvasModulate = $CanvasModulate
# TODO: better alternative to preloading as i add functionality?
# https://theduriel.github.io/Godot/Do-not-use---Preload
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()