frame-of-mind/src/base-environments/transition/subway_sequence.gd

202 lines
6.7 KiB
GDScript

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")