class_name YouthRoom extends RoomTemplate ## Used by the stage system when this room takes stage for intro playback # var has_stage: bool = false # Reminder, do not uncomment, this field is inherited from RoomTemplate! @onready var board_trigger: InteractiveSprite = %MindBoard @onready var door_trigger: InteractiveSprite = %Door @onready var card_board: CardBoard = %Board @onready var card_picker: CardPicker = %Picker @onready var ui: Control = %UI func start_room(): %UI.show() $logic/PlayerController.process_mode = Node.PROCESS_MODE_INHERIT if not Scenes.is_sequence_repeating(Scenes.id.YOUTH_DRAEVEN): # Play intro scene directly (not triggered by CollectableUi) await _play_intro_scene() else: %LightAnimation.lights_on() # Give player control after intro (or immediately if repeating) %PlayerController.has_stage = true func _play_intro_scene() -> void: # The intro scene is auto-played, not triggered by CollectableUi var intro_playable: StoryPlayable = $logic/ScenePlayer/draven Scenes.begin_sequence(Scenes.id.YOUTH_DRAEVEN) Input.mouse_mode = Input.MOUSE_MODE_HIDDEN # Play the story (StoryPlayable handles its own visibility via animations) await intro_playable.play() Input.mouse_mode = Input.MOUSE_MODE_VISIBLE Scenes.end_sequence(Scenes.id.YOUTH_DRAEVEN) func get_ready(): pull_save_state(State.save_game) card_board.initialise_from_save(save_game) card_board.board_completed.connect(func(): save_game.is_childhood_board_complete = true save_room()) # Scene registration is now handled by youth_room_scene_player ui.hide() $sfx/distant_rain.play() $"sfx/rain on window".play() self.show() func _ready(): super._ready() id = State.rooms.YOUTH Scenes.scene_finished.connect(_on_scene_finished) card_picker.cards_picked.connect(card_board.populate_board) func pull_save_state(save: SaveGame) -> void: save_game = save save_game.current_room = id save_game.board_state = card_board.get_save_dict() card_board.initialise_from_save(save_game) Scenes.started_sequences = save_game.mementos_complete Scenes.completed_sequences = save_game.mementos_complete func _on_scene_finished(_id: int, _repeat:bool): await get_tree().create_timer(3).timeout save_room() func prepare_transition(): save_room() $visuals/AnimationPlayer.play("conserve_performance") await $visuals/AnimationPlayer.animation_finished unload() # Called by youth_room_scene_player when voice training scene starts func play_chest_reveal() -> void: $AnimationPlayer.play("chest_reveal") $visuals/SecondaryAnimation.play("chest_reveal") func unload(): $visuals.queue_free() func play_chest_animation(_id): $AnimationPlayer.play("intro") await $AnimationPlayer.animation_finished Scenes.continue_sequence(self)