extends RoomTemplate @export var all_stations: Dictionary[Station.id, Station] @export var all_lines: Dictionary[TrainLine.id, TrainLine] func _ready() -> void: super._ready() id = State.rooms.TRANSITION func start_room(): super.start_room() %LeftDetection.body_entered.connect(on_left_train_enter) %RightDetection.body_entered.connect(on_right_train_enter) %LeftDetection.body_exited.connect(on_left_train_exit) %RightDetection.body_exited.connect(on_right_train_exit) %burnout_station.leave_room.connect(func(): proceed.emit(Main.adulthood_room_path)) %PlayerController.process_mode = Node.PROCESS_MODE_INHERIT # Give player control immediately, then open Scenes.player_enable.emit(true) on_first_station() _set_signage_texts("signage1", "Gleis 1\naußer Betrieb") _set_signage_texts("signage2", "Bitte Ansage\nbeachten") await Main.curtain.open() await get_tree().create_timer(20).timeout _set_signage_texts("signage2", "Verkehr z. Zt.\nunregelmäßig") await get_tree().create_timer(10).timeout _set_signage_texts("signage1", "Bitte Ansage\nbeachten") func _set_signage_texts(group: StringName, message: String) -> void: get_tree().call_group(group, "set_text", "") for i in range(len(message)): get_tree().call_group(group, "set_text", message.substr(0, i+1)) await get_tree().create_timer(0.05).timeout var left_first_station: bool = false func on_first_station() -> void: Scenes.enabled_sequences += 1 << Scenes.id.ADULT_DND await get_tree().create_timer(5.0).timeout %ShedulePlayer_R.play("train_arriving") await get_tree().create_timer(12.0).timeout if left_first_station: return %ShedulePlayer_R.play("train_leaving") await get_tree().create_timer(3.0).timeout %RightLabel.text = "do not board" await get_tree().create_timer(6.0).timeout %ShedulePlayer_L.play("train_arriving") var on_second_platform: bool = false func on_first_transition(_is_left: bool = false): %StationPlayer.play("first_transition") await get_tree().create_timer(1.0).timeout on_second_platform = true func on_second_transition(): %StationPlayer.play("second_transition") func on_third_transition(): %StationPlayer.play("third_transition") func pull_save_state(save: SaveGame) -> void: #FIXME save.sequences_enabled = Scenes.enabled_sequences save.current_room = State.rooms.ADULTHOOD save_game = save # Call parent to restore player position super.pull_save_state(save) func prepare_transition(): for child in %Stations.get_children(): if child is Node3D: if not child.name == "burnout_station": child.queue_free() func unload(): pass func on_left_train_enter(_body) -> void: if not left_first_station: left_first_station = true await get_tree().create_timer(2.0).timeout %Train2.get_child(0).door_open = false on_first_transition(true) await get_tree().create_timer(5.0).timeout Scenes.enabled_sequences += 1 << Scenes.id.ADULT_VOLUNTARY %SubwayMap.current_station = Scenes.id.ADULT_VOLUNTARY %RightLabel.text = "U3 Gesundquell \n via Rosenthal Hospital" await get_tree().create_timer(5.0).timeout Scenes.enabled_sequences += 1 << Scenes.id.ADULT_AUTISM %SubwayMap.current_station = Scenes.id.ADULT_AUTISM await get_tree().create_timer(5.0).timeout %Train2.get_child(0).door_open = true await get_tree().create_timer(5.0).timeout if not changeover: %Train2.get_child(0).door_open = false on_second_transition() await get_tree().create_timer(5.0).timeout Scenes.enabled_sequences += 1 << Scenes.id.ADULT_SELF_ADVOCACY %SubwayMap.current_station = Scenes.id.ADULT_SELF_ADVOCACY %RightLabel.text = "do not board" %LeftLabel.text = "do not board" on_final = true await get_tree().create_timer(5.0).timeout %Train2.get_child(0).door_open = true else: %ShedulePlayer_L.play("train_leaving") %LeftLabel.text = "do not board" return if changeover: %ShedulePlayer_R.play("train_leaving") await get_tree().create_timer(2.0).timeout %Train2.get_child(0).door_open = false on_second_transition() await get_tree().create_timer(5.0).timeout save_game.seen.append(str(Scenes.id.ADULT_THERAPY_UNI)) %SubwayMap.current_station = Scenes.id.ADULT_THERAPY_UNI %RightLabel.text = "do not board" %LeftLabel.text = "do not board" on_final = true await get_tree().create_timer(5.0).timeout %Train2.get_child(0).door_open = true var on_final: bool = false: set(final): #FIXME: this needs to be a proper sequence! on_final = final await get_tree().create_timer(0.5).timeout if final: prepare_transition() var on_direct_path: bool = false func on_right_train_enter(_body) -> void: if not left_first_station: on_direct_path = true %Train.get_child(0).door_open = false await get_tree().create_timer(2.0).timeout left_first_station = true on_first_transition(false) await get_tree().create_timer(5.0).timeout Scenes.enabled_sequences += 1 << Scenes.id.ADULT_EATING %SubwayMap.current_station = Scenes.id.ADULT_EATING %LeftLabel.text = "U8 Gesundquell \n via Rosenthal Hospital" await get_tree().create_timer(5.0).timeout Scenes.enabled_sequences += 1 << Scenes.id.ADULT_SELF_ADVOCACY %SubwayMap.current_station = Scenes.id.ADULT_SELF_ADVOCACY await get_tree().create_timer(5.0).timeout %Train.get_child(0).door_open = true await get_tree().create_timer(5.0).timeout if not changeover: %Train.get_child(0).door_open = false on_second_transition() await get_tree().create_timer(5.0).timeout Scenes.enabled_sequences += 1 << Scenes.id.ADULT_BURNOUT %SubwayMap.current_station = Scenes.id.ADULT_BURNOUT %RightLabel.text = "do not board" %LeftLabel.text = "do not board" on_final = true await get_tree().create_timer(5.0).timeout %Train.get_child(0).door_open = true else: %ShedulePlayer_R.play("train_leaving") %RightLabel.text = "do not board" return if changeover: on_second_transition() if on_direct_path: %ShedulePlayer_L.play("train_leaving") await get_tree().create_timer(5.0).timeout Scenes.enabled_sequences += 1 << Scenes.id.ADULT_AUTISM %SubwayMap.current_station = Scenes.id.ADULT_AUTISM await get_tree().create_timer(2.0).timeout %Train2.get_child(0).door_open = false %RightLabel.text = "do not board" %LeftLabel.text = "do not board" on_final = true await get_tree().create_timer(5.0).timeout %Train.get_child(0).door_open = true var changeover: bool = false func on_left_train_exit(_body): if on_second_platform and not on_final: changeover = true %ShedulePlayer_R.play("train_arriving") func on_right_train_exit(_body): if on_second_platform and not on_final: changeover = true %ShedulePlayer_L.play("train_arriving") await get_tree().create_timer(10).timeout %RightLabel.text = "U1 weissnicht \n via Saint-Exupery Sq." await get_tree().create_timer(5).timeout %ShedulePlayer_R.play("train_arriving")