176 lines
5.9 KiB
GDScript
176 lines
5.9 KiB
GDScript
extends RoomTemplate
|
|
|
|
@export var all_stations: Dictionary[Station.id, Station]
|
|
@export var all_lines: Dictionary[TrainLine.id, TrainLine]
|
|
|
|
func _ready() -> void:
|
|
id = State.rooms.TRANSITION
|
|
%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():
|
|
pull_save_state(save_game)
|
|
get_parent().load_save(save_game))
|
|
|
|
func start_room():
|
|
save_game = State.active_save_game
|
|
State.pass_stage_to(%PlayerController)
|
|
on_first_station()
|
|
|
|
var left_first_station: bool = false
|
|
func on_first_station():
|
|
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
|
|
|
|
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):
|
|
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_CHRISTMAS
|
|
%SubwayMap.current_station = Scenes.id.ADULT_CHRISTMAS
|
|
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_UNI
|
|
%SubwayMap.current_station = Scenes.id.ADULT_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
|
|
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
|
|
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_THERAPY
|
|
%SubwayMap.current_station = Scenes.id.ADULT_THERAPY
|
|
%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):
|
|
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_UNI
|
|
%SubwayMap.current_station = Scenes.id.ADULT_UNI
|
|
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_CHRISTMAS
|
|
%SubwayMap.current_station = Scenes.id.ADULT_CHRISTMAS
|
|
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")
|