Compare commits

..

No commits in common. "development" and "testbuild-moritz-2026-01-23" have entirely different histories.

223 changed files with 3545 additions and 3861 deletions

46
.gitattributes vendored
View File

@ -1,50 +1,24 @@
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf
# Explicit text files
*.gd text eol=lf
*.gdshader text eol=lf
*.cfg text eol=lf
*.tscn text eol=lf
*.tres text eol=lf
*.import text eol=lf
*.godot text eol=lf
*.md text eol=lf
*.txt text eol=lf
*.json text eol=lf
*.csv text eol=lf
*.xml text eol=lf
*.nix text eol=lf
*.svg text eol=lf
*.vdf text eol=lf
*.translation text eol=lf
*.theme text eol=lf
# Binary images
*.blend filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.glb filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.exr filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.blend1 filter=lfs diff=lfs merge=lfs -text
*.aup3 filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.tga filter=lfs diff=lfs merge=lfs -text
*.ico filter=lfs diff=lfs merge=lfs -text
# Art source files
*.kra filter=lfs diff=lfs merge=lfs -text
*.ase filter=lfs diff=lfs merge=lfs -text
*.aseprite filter=lfs diff=lfs merge=lfs -text
*.xcf filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
# 3D assets
*.blend filter=lfs diff=lfs merge=lfs -text
*.blend1 filter=lfs diff=lfs merge=lfs -text
*.glb filter=lfs diff=lfs merge=lfs -text
# Audio
*.wav filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
*.flac filter=lfs diff=lfs merge=lfs -text
*.aup3 filter=lfs diff=lfs merge=lfs -text
# Fonts
*.ttf filter=lfs diff=lfs merge=lfs -text
# Archives & packages
*.zip filter=lfs diff=lfs merge=lfs -text
# Misc binary
*.bin filter=lfs diff=lfs merge=lfs -text

6
.gitignore vendored
View File

@ -8,10 +8,6 @@ export.cfg
export_credentials.cfg
*.tmp
# Mics Backup and temp files
*.blend1
*.md.backup
# Imported translations (automatically generated from CSV files)
*.translation
@ -40,8 +36,6 @@ mono_crash.*.json
AGENTS.md
CHANGELOG.md
ISSUES.md
.claude/
CLAUDE.md
.devcontainer/
**/.idea

BIN
design/cards-src/new_cardsheet_masked.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-aged0001.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-aged0002.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-aged0003.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-aged0004.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-aged0005.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-aged0006.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-aged0007.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-aged0008.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-aged0009.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-aged0010.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-aged0011.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-aged0012.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-new0001.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-new0002.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-new0003.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-new0004.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-new0005.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-new0006.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-new0007.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-new0008.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-new0009.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-new0010.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-new0011.png (Stored with Git LFS)

Binary file not shown.

BIN
design/cards-src/post-it-new0012.png (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

View File

@ -1,318 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="2000"
height="660"
viewBox="0 0 529.16665 174.625"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
sodipodi:docname="sticky-notes.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#999999"
borderopacity="1"
inkscape:showpageshadow="2"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
inkscape:zoom="0.52294229"
inkscape:cx="1712.4261"
inkscape:cy="651.12348"
inkscape:window-width="2560"
inkscape:window-height="1534"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"><inkscape:page
x="0"
y="0"
width="529.16663"
height="174.625"
id="page3"
margin="0"
bleed="0" /><inkscape:page
x="539.16663"
y="0"
width="529.16663"
height="174.625"
id="page4"
margin="0"
bleed="0" /><inkscape:page
x="1078.3333"
y="0"
width="529.16663"
height="174.625"
id="page5"
margin="0"
bleed="0" /></sodipodi:namedview><defs
id="defs1" /><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><g
id="g3"
transform="matrix(0.75000002,0,0,0.74999998,178.24974,-189.17711)"><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-new0012.png"
id="image1-6"
x="291.50027"
y="407.45837" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-new0011.png"
id="image1-2"
x="291.50027"
y="329.84726" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-new0010.png"
id="image1-3"
x="291.50027"
y="252.23615" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-new0009.png"
id="image1-26"
x="115.11139"
y="407.45837" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-new0008.png"
id="image1-9"
x="115.11139"
y="329.84726" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-new0007.png"
id="image1-37"
x="115.11139"
y="252.23615" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-new0006.png"
id="image1-28"
x="-61.277512"
y="407.45837" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-new0005.png"
id="image1-61"
x="-61.277512"
y="329.84726" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-new0004.png"
id="image1-1"
x="-61.277512"
y="252.23615" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-new0003.png"
id="image1-8"
x="-237.66641"
y="407.45837" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-new0002.png"
id="image1-36"
x="-237.66641"
y="329.84726" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-new0001.png"
id="image1-32"
x="-237.66641"
y="252.23615" /></g><g
id="g1"
transform="matrix(0.74999998,0,0,0.74999996,717.41637,-189.61156)"><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it0012.png"
id="image1-94"
x="291.50031"
y="408.03766" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it0011.png"
id="image1-17"
x="291.50031"
y="330.42654" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it0010.png"
id="image1-59"
x="291.50031"
y="252.81543" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it0009.png"
id="image1-73"
x="115.11139"
y="408.03766" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it0008.png"
id="image1-39"
x="115.11139"
y="330.42654" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it0007.png"
id="image1-29"
x="115.11139"
y="252.81543" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it0006.png"
id="image1-885"
x="-61.277512"
y="408.03766" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it0005.png"
id="image1-38"
x="-61.277512"
y="330.42654" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it0004.png"
id="image1-15"
x="-61.277512"
y="252.81543" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it0003.png"
id="image1-81"
x="-237.66641"
y="408.03766" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it0002.png"
id="image1-44"
x="-237.66641"
y="330.42654" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it0001.png"
id="image1-63"
x="-237.66641"
y="252.81543" /></g><g
id="g2"
transform="matrix(0.75,0,0,0.74999998,1256.583,-189.17711)"><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-aged0012.png"
id="image1-5"
x="291.50031"
y="407.45837" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-aged0011.png"
id="image1-65"
x="291.50031"
y="329.84726" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-aged0010.png"
id="image1-7"
x="291.50031"
y="252.23615" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-aged0006.png"
id="image1-4"
x="-61.277512"
y="407.45837" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-aged0005.png"
id="image1-68"
x="-61.277512"
y="329.84726" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-aged0004.png"
id="image1-64"
x="-61.277512"
y="252.23615" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-aged0003.png"
id="image1-48"
x="-237.66641"
y="407.45837" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-aged0002.png"
id="image1-27"
x="-237.66641"
y="329.84726" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-aged0001.png"
id="image1-10"
x="-237.66641"
y="252.23615" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-aged0009.png"
id="image1-62"
x="115.11139"
y="407.45837" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-aged0008.png"
id="image1-74"
x="115.11139"
y="329.84726" /><image
width="176.3889"
height="77.611115"
preserveAspectRatio="none"
xlink:href="post-it-aged0007.png"
id="image1-75"
x="115.11139"
y="252.23615" /></g></g></svg>

Before

Width:  |  Height:  |  Size: 9.4 KiB

BIN
design/cards_compositing.blend1 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
design/post-its.blend (Stored with Git LFS)

Binary file not shown.

View File

@ -47,7 +47,6 @@ func _update_events():
# TODO: Find a cleaner way to cast these values
var tmp: Array = []
if Engine.is_editor_hint():
print("reading project settings")
tmp = ProjectSettings.get_setting("input/" + action)["events"]
else:
tmp = InputMap.action_get_events(action)

View File

@ -5,5 +5,5 @@ func _ready() -> void:
$MarkdownLabel.display_file("res://addons/markdownlabel/README.md")
$MarkdownLabel.task_checkbox_clicked.connect(
func(id: int, line: int, checked: bool, text: String) -> void:
print("%s task #%d on line %d: %s" % ["Checked" if checked else "Unchecked", id, line, text])
print_debug("%s task #%d on line %d: %s" % ["Checked" if checked else "Unchecked", id, line, text])
)

View File

@ -640,7 +640,7 @@ func _reset_escaped_chars(_text: String,code:=false) -> String:
func _debug(string: String) -> void:
if not _debug_mode:
return
print(string)
print_debug(string)
func _denotes_fenced_code_block(line: String, character: String) -> bool:
var stripped_line := line.strip_edges()

Binary file not shown.

View File

@ -5,56 +5,25 @@ extends Node3D
@export var index : int = -1
@export var signage_group : String
@export_group("Motion")
@export_subgroup("Arrival")
@export var pre_arrival_time : float = 17.0 # hold train for this long (to sync with audio!)
@export var arrival_time : float = 15.0 # train takes this long to enter (shorter = faster)
@export var trans_arrival : Tween.TransitionType = Tween.TRANS_CIRC
@export var ease_arrival : Tween.EaseType = Tween.EASE_OUT
@export_subgroup("In Station")
@export var station_wait_time : float = 20.0
@export_subgroup("Departure")
@export var pre_arrival_time : float = 17.0
@export var arrival_time : float = 15.0
@export var pre_leave_time : float = 20.0
@export var door_close_time : float = 1.0
@export var leave_time : float = 15.0 # train takes this long to leave the platform
@export var trans_departure : Tween.TransitionType = Tween.TRANS_QUAD
@export var ease_departure : Tween.EaseType = Tween.EASE_IN
@export var leave_time : float = 15.0
@export var post_leave_time : float = 5.0
@onready var origination : Node3D = $Origination
@onready var destination : Node3D = $Destination
@onready var subway : SubwayTrain = $Subway
@onready var subway_audio_main : AudioStreamPlayer3D = %SubwayTrainAudio
@onready var subway_audio_2 : AudioStreamPlayer3D = %SubwayTrainAudioIntense
var player_on_board : bool:
get: return %EntryDetect.overlaps_body(State.player)
var tween : Tween = null
## Player is about to arrive
signal train_approaching(track : Dolly)
## Player has fully arrived at station
signal train_arrived(track : Dolly)
## Player is departing in train
signal train_departing(track : Dolly)
## Player has fully left the station with train
signal train_left(track : Dolly)
signal departure(index : int)
func _ready() -> void:
reset()
func set_line(line: StringName):
subway.set_line(line)
## One arrival and departure
func cycle() -> void:
await arrive()
@ -64,60 +33,48 @@ func reset() -> void:
if tween: tween.kill()
subway.global_position = origination.global_position
func _seat_player() -> void:
prints("Player departs inside Train", self.name)
State.player.reparent(subway)
func _seat_player_if_inside() -> bool:
if %EntryDetect.overlaps_body(State.player):
prints("Player departs inside Train", self.name)
State.player.reparent(subway)
return true
return false
func _unseat_player() -> void:
prints("Player arrives on Train", self.name)
State.player.reparent(get_parent())
func _unseat_player_if_inside() -> void:
if %EntryDetect.overlaps_body(State.player):
prints("Player arrives on Train", self.name)
State.player.reparent(get_parent())
func arrive(endstation : bool = false) -> void:
subway_audio_main.play()
subway_audio_2.play()
%SubwayTrainAudio.play(0)
%SubwayTrainAudioIntense.play(0)
await get_tree().create_timer(pre_arrival_time).timeout
if player_on_board:
train_approaching.emit(self)
if tween: tween.kill()
tween = create_tween().set_trans(trans_arrival).set_ease(ease_arrival)
tween = create_tween().set_trans(Tween.TRANS_CIRC).set_ease(Tween.EASE_OUT)
tween.parallel().tween_property(subway, "global_position", self.global_position, arrival_time)
await tween.finished
subway.door_open = true
if player_on_board:
_unseat_player()
train_arrived.emit(self)
_unseat_player_if_inside()
if endstation:
subway_audio_main.stop()
subway_audio_2.stop()
%SubwayTrainAudio.stop()
%SubwayTrainAudioIntense.stop()
func leave() -> void:
await get_tree().create_timer(station_wait_time).timeout
await get_tree().create_timer(pre_leave_time).timeout
subway.door_open = false
await get_tree().create_timer(door_close_time).timeout
if player_on_board:
_seat_player()
train_departing.emit(self)
var seated := _seat_player_if_inside()
if tween: tween.kill()
tween = create_tween().set_trans(trans_departure).set_ease(ease_departure)
tween = create_tween().set_trans(Tween.TRANS_QUART).set_ease(Tween.EASE_IN)
tween.parallel().tween_property(subway, "global_position", destination.global_position, leave_time)
# Player is on board and will be leaving
await tween.finished
await %SubwayTrainAudio.finished
# Player was on board and has left the station
if player_on_board: train_left.emit(self)
reset() # Warp back / rewind train position
if seated: departure.emit(index)
reset()

View File

@ -1,77 +1,66 @@
class_name Fahrplan extends Node3D
## easy graph: <station> : [Track1Train1 (next halt), Track1Train2], [Track2Train1(next halt), ...]
## CAVEAT: These must be direct children of the fahrplan!
@onready var fahrplan : Dictionary[Station, Array] = {
$hirschfeld: [["u2", $uni_mensa, "u1", $parity_square],[]],
$uni_mensa : [["u2", $uni_main],[]],
$uni_main: [["u2", $ministry],["u8", $rosenthal, "u2", $uni_mensa, "u1", $saint_exupery]],
$parity_square : [["u4", $saint_exupery, "u1", $saint_exupery], []],
$saint_exupery : [["u4", $rosenthal], ["u1", $uni_main]],
@onready var fahrplan : Dictionary[Node3D, Array] = {
$station_hirschfeld: [[$station_university_mensa, $station_parity_square],[]],
$station_hirschfeld : [[$station_university_mensa, $station_parity_square],[]],
$station_university_mensa : [[$station_university_main],[]],
$station_university_main: [[$station_ministry],[$station_rosenthal, $station_university_mensa]],
$station_parity_square : [[$station_saint_exupery],[$station_rosenthal]],
$station_saint_exupery : [[$station_saint_exupery],[$station_rosenthal]],
$ministry : [null, null], # Endstation
$rosenthal : [null, null], # Endstation
$station_ministry : [null,null], # Endstation
$station_rosenthal : [null,null], # Endstation
}
## List of all registered station nodes, used to unparent them
@onready var stations : Array[Station] = fahrplan.keys()
@onready var tracks : Array[Dolly] = [%Track0Dolly, %Track1Dolly]
@export var empty_train_random_delay : Vector2 = Vector2(5.0, 20.0)
@export var random_wait : Vector2 = Vector2(1.0, 10.0)
func _set_signage_texts(group: StringName, message: String) -> void:
get_tree().set_group(group, "text", "")
get_tree().call_group(group, "set_text", "")
for i in range(len(message)):
get_tree().set_group(group, "text", message.substr(0, i+1))
get_tree().call_group(group, "set_text", message.substr(0, i+1))
await get_tree().create_timer(0.05).timeout
func _ready() -> void:
var x : Node3D = $station_hirschfeld
print(x.name)
await get_tree().process_frame
tracks[0].train_left.connect(_player_train_left)
tracks[1].train_left.connect(_player_train_left)
_unparent_all_stations_except($hirschfeld)
enter_station(current)
tracks[0].departure.connect(player_departed)
tracks[1].departure.connect(player_departed)
enter_station($station_hirschfeld)
## The current station
var current : Station
var current_station : Node3D = null
var stop := false
var destinations : Array[Station] = [null, null]
var destinations : Array[Node3D] = [null, null]
## Begins the scheduled traffic (looping through the list of destinations) on a given track
func _begin_traffic_loop(track: Dolly, cancel: Array) -> void:
if not track.player_on_board and fahrplan[current][track.index] == null: # empty trains dont arrive at endstation
_set_signage_texts(track.signage_group, "Gleis gesperrt")
return
func train_traffic_loop(track: Dolly, cancel: Array) -> void:
if fahrplan[current][track.index] == null: # empty trains dont arrive at endstation
if fahrplan[current_station][track.index] == null: # empty array (just no routes) would be falsy
track.arrive(true)
_set_signage_texts(track.signage_group, "Endstation")
return
var routes : Array = fahrplan[current][track.index]
var routes : Array = fahrplan[current_station][track.index]
if routes.is_empty():
_set_signage_texts(track.signage_group, "Verkehr z. Zt.\nunregelmäßig")
return
while true:
if cancel.is_empty(): return # abort the loop
var line : StringName = routes.pop_front()
var next : Station = routes.pop_front()
routes.append(line) # It's a ring buffer
var next : Node = routes.pop_front()
routes.append(next) # It's a ring buffer
destinations[track.index] = next
track.set_line(line)
_set_signage_texts(track.signage_group, current.get_label(line, next)) # TODO: load nice string
_set_signage_texts(track.signage_group, next.name) # TODO: load nice string
# Vary our schedule a little by making empty trains wait a random amount of time
if not track.player_on_board:
await get_tree().create_timer(randf_range(empty_train_random_delay.x, empty_train_random_delay.y)).timeout
await get_tree().create_timer(randf_range(random_wait.x, random_wait.y)).timeout
if cancel.is_empty(): return # abort the loop
await track.cycle() # arrive and depart
@ -79,26 +68,16 @@ func _begin_traffic_loop(track: Dolly, cancel: Array) -> void:
var cancellation_token : Array
func enter_station(station: Station):
func enter_station(station: Node):
prints("------------", "ENTER STATION", station, station.name, "------------")
remove_child(current)
current = station
add_child(station)
if current_station: current_station.visible = false
current_station = station
current_station.visible = true
cancellation_token = ["go"] # Allocate a new stopping token
_begin_traffic_loop(tracks[0], cancellation_token)
_begin_traffic_loop(tracks[1], cancellation_token)
train_traffic_loop(tracks[0], cancellation_token)
train_traffic_loop(tracks[1], cancellation_token)
func _player_train_left(track: Dolly) -> void:
func player_departed(track_index : int) -> void:
cancellation_token.clear()
enter_station(destinations[track.index])
func _unparent_all_stations_except(except : Node3D):
for station in stations:
assert(station.get_parent() == self, "A station that isn't a child of Fahrplan is in the Fahrplan: %s" % station.name)
station.visible = true # Make visible by default, parenting handles visibility and collision
if station == except:
current = station
continue
remove_child(station)
enter_station(destinations[track_index])

View File

@ -1,8 +1,18 @@
extends Node3D
class_name Station
class_name Station extends Resource
@export var i18n_key : StringName
@export var train_labels : Dictionary[StringName,String] = {}
enum id {
HIRSCHFELD,
PARITY,
EXUPERY,
ROSENTHAL,
UNI_1,
UNI_2,
MINISTRY
}
func get_label(line: StringName, next_stop: Station) -> String:
return train_labels.get(line+next_stop.name, line+next_stop.name)
@export var station_name: StringName = ""
@export var memory: Scenes.id = Scenes.id.YOUTH_DRAVEN
@export_file("*.tscn") var station_path: String = ""
@export var arriving_lines: Dictionary[TrainLine.id, float]
@export var departing_lines: Dictionary[TrainLine.id, float]
@export var announcement: AudioStream

View File

@ -1 +1 @@
uid://pmhadgsfinjc
uid://cyeh7sa20bmcf

View File

@ -1,23 +1,26 @@
extends Room
extends RoomTemplate
class_name SubwaySequence
@export var all_stations: Dictionary[Station.id, Station]
@export var all_lines: Dictionary[TrainLine.id, TrainLine]
func _ready() -> void:
id = State.rooms.TRANSITION
super._ready()
id = State.rooms.TRANSITION
func get_ready_async() -> void:
await super.get_ready_async()
func start_room_async():
await super.start_room_async()
func start_room():
super.start_room()
Scenes.player_enable.emit(true)
await Main.curtain.open()
var next_room : String = await proceed # emitted by burnout_station.gd and therapy_station.gd
await Main.curtain.black()
Main._load_room(next_room)
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

View File

@ -1,8 +1,6 @@
extends Node3D
class_name SubwayTrain
@export var materials : Dictionary[StringName, Material] = {}
@export var door_open: bool:
set(open):
if door_open == open: return
@ -12,11 +10,8 @@ class_name SubwayTrain
else:
%TrainModel/AnimationPlayer.play("door_close")
%FrontWallClosed.disabled = door_open
func _ready() -> void:
%TrainModel/AnimationPlayer.animation_finished.connect(_on_animation_finished)
func set_line(line : StringName):
$TrainModel/traun_hull.material_overlay = materials[line]
$TrainModel/LineLabelBack.text = line.to_upper()
$TrainModel/LineLabelFront.text = line.to_upper()
func _on_animation_finished(_discard) -> void:
%FrontWallClosed.disabled = door_open

View File

@ -0,0 +1,14 @@
class_name TrainLine extends Resource
enum id {
NONE,
RING,
U2,
U3,
U8
}
@export var train_id: id = id.NONE
@export var destination: StringName = ""
@export var via: StringName = ""
@export var stops: Dictionary[Station, float]

View File

@ -0,0 +1 @@
uid://dfkq0djtygmma

View File

@ -5,4 +5,5 @@ resource_name = "display"
cull_mode = 2
albedo_color = Color(0.16613327, 0.10919999, 0.28, 1)
metallic = 0.1
roughness = 0.4
metallic_specular = 0.3
roughness = 0.15

View File

@ -1,4 +1,4 @@
[gd_scene format=3 uid="uid://tuv111h6jsnu"]
[gd_scene load_steps=12 format=3 uid="uid://tuv111h6jsnu"]
[ext_resource type="PackedScene" uid="uid://swh2v0icrwum" path="res://base-environments/transition/import/meta_station.glb" id="1_yekr5"]
[ext_resource type="Shader" uid="uid://i3k8blcd043t" path="res://base-environments/transition/shaders/escalator_disp.gdshader" id="2_klf6x"]
@ -56,103 +56,103 @@ shader_parameter/density = 0.05
[sub_resource type="PlaneMesh" id="PlaneMesh_yyrp7"]
[node name="meta_station" unique_id=862984273 instance=ExtResource("1_yekr5")]
[node name="meta_station" instance=ExtResource("1_yekr5")]
[node name="water_001" parent="." index="0" unique_id=111926402]
[node name="water_001" parent="." index="0"]
gi_mode = 0
[node name="water" parent="." index="1" unique_id=1328856464]
[node name="water" parent="." index="1"]
gi_mode = 0
[node name="signal_lights_004" parent="." index="21" unique_id=972850034]
[node name="signal_lights_004" parent="." index="21"]
gi_mode = 2
[node name="TransformerBuzzAudio" type="AudioStreamPlayer3D" parent="signal_lights_004" index="0" unique_id=1439750635]
[node name="TransformerBuzzAudio" type="AudioStreamPlayer3D" parent="signal_lights_004" index="0"]
transform = Transform3D(1, 0, 0, 0, 1, -8.526513e-14, 0, 8.526513e-14, 1, 2.947373, 0.36035156, 1.2887176e-07)
stream = ExtResource("2_yyrp7")
unit_size = 2.0
autoplay = true
bus = &"sfx"
[node name="signal_lights_003" parent="." index="22" unique_id=1393034]
[node name="signal_lights_003" parent="." index="22"]
gi_mode = 2
[node name="signal_lights_002" parent="." index="23" unique_id=52720530]
[node name="signal_lights_002" parent="." index="23"]
gi_mode = 2
[node name="TransformerBuzzAudio" type="AudioStreamPlayer3D" parent="signal_lights_002" index="0" unique_id=1680482042]
[node name="TransformerBuzzAudio" type="AudioStreamPlayer3D" parent="signal_lights_002" index="0"]
transform = Transform3D(1, 0, -8.351873e-23, 0, 1, 1.9106857e-15, -8.351873e-23, 0, 1, -8.365656, -0.024308532, 3.6567445e-07)
stream = ExtResource("2_yyrp7")
unit_size = 2.0
autoplay = true
bus = &"sfx"
[node name="signal_lights_001" parent="." index="24" unique_id=1944425223]
[node name="signal_lights_001" parent="." index="24"]
gi_mode = 2
[node name="railway_lighting" parent="." index="35" unique_id=2080917627]
[node name="railway_lighting" parent="." index="35"]
cast_shadow = 0
gi_mode = 2
[node name="FluorescentLuz" parent="." index="41" unique_id=1745682064]
[node name="FluorescentLuz" parent="." index="41"]
cast_shadow = 0
[node name="escalator_stairs_L" parent="." index="43" unique_id=1621434836]
[node name="escalator_stairs_L" parent="." index="43"]
custom_aabb = AABB(-0.8, 0, -1, 1.6, 3.5, 7)
gi_mode = 0
surface_material_override/0 = SubResource("ShaderMaterial_jh12p")
[node name="Ceiling" parent="." index="44" unique_id=143112021]
[node name="Ceiling" parent="." index="44"]
cast_shadow = 0
[node name="escalator_stairs_L_001" parent="." index="46" unique_id=774045853]
[node name="escalator_stairs_L_001" parent="." index="46"]
transform = Transform3D(1, 0, 2.3841858e-07, 0, 1, 0, -2.3841858e-07, 0, 1, -0.854971, 3.1997495, 4.8378654)
material_override = SubResource("ShaderMaterial_klf6x")
custom_aabb = AABB(-0.8, -3, -9, 1.6, 3.5, 7)
gi_mode = 0
[node name="Voids" type="Node3D" parent="." index="47" unique_id=1990649157]
[node name="Voids" type="Node3D" parent="." index="47"]
transform = Transform3D(1, 0, 0, 0, 0.99999994, 0, 0, 0, 1, 0, 0, 0)
[node name="Void" type="MeshInstance3D" parent="Voids" index="0" unique_id=145697625]
[node name="Void" type="MeshInstance3D" parent="Voids" index="0"]
transform = Transform3D(3.52244, 0, 0, 0, -1.1920929e-07, 2.81712, 0, -2.81712, -1.1920929e-07, -6.37235, 1.2251098, 0.16566086)
material_override = SubResource("ShaderMaterial_e0ljd")
gi_mode = 0
mesh = SubResource("PlaneMesh_yyrp7")
skeleton = NodePath("")
[node name="Void2" type="MeshInstance3D" parent="Voids" index="1" unique_id=1359246771]
[node name="Void2" type="MeshInstance3D" parent="Voids" index="1"]
transform = Transform3D(3.52244, 0, 0, 0, -1.1920929e-07, 2.81712, 0, -2.81712, -1.1920929e-07, 6.372, 1.2249999, 0.16599989)
material_override = SubResource("ShaderMaterial_e0ljd")
gi_mode = 0
mesh = SubResource("PlaneMesh_yyrp7")
skeleton = NodePath("")
[node name="Void3" type="MeshInstance3D" parent="Voids" index="2" unique_id=1648551827]
[node name="Void3" type="MeshInstance3D" parent="Voids" index="2"]
transform = Transform3D(-3.52244, -2.4628e-07, -1.07652e-14, 0, -1.1920929e-07, 2.81712, -3.07942e-07, 2.81712, 1.1920929e-07, 6.372, 1.2251072, -66.291595)
material_override = SubResource("ShaderMaterial_e0ljd")
gi_mode = 0
mesh = SubResource("PlaneMesh_yyrp7")
skeleton = NodePath("")
[node name="Void4" type="MeshInstance3D" parent="Voids" index="3" unique_id=1928136706]
[node name="Void4" type="MeshInstance3D" parent="Voids" index="3"]
transform = Transform3D(-3.52244, -2.4628e-07, -1.07652e-14, 0, -1.1920929e-07, 2.81712, -3.07942e-07, 2.81712, 1.1920929e-07, -6.37235, 1.2250023, -66.29199)
material_override = SubResource("ShaderMaterial_e0ljd")
gi_mode = 0
mesh = SubResource("PlaneMesh_yyrp7")
skeleton = NodePath("")
[node name="Void5" type="MeshInstance3D" parent="Voids" index="4" unique_id=144937323]
[node name="Void5" type="MeshInstance3D" parent="Voids" index="4"]
transform = Transform3D(3.52244, 0, 0, 0, -2.21081, 1.7459902, 0, -1.7459902, -2.21081, 0, 4.91844, 1.5205798)
material_override = SubResource("ShaderMaterial_e0ljd")
gi_mode = 0
mesh = SubResource("PlaneMesh_yyrp7")
skeleton = NodePath("")
[node name="station_display_R" parent="." index="48" unique_id=717625287]
[node name="station_display_R" parent="." index="48"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="station_display_R" index="0" unique_id=1483256478 groups=["signage2"]]
[node name="Label3D" type="Label3D" parent="station_display_R" index="0" groups=["signage2"]]
transform = Transform3D(1, 0, 1.9895195e-13, 0, 1, 0, -1.9895195e-13, 0, 1, -0.8458553, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -163,7 +163,7 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="station_display_R" index="1" unique_id=200294395 groups=["signage2"]]
[node name="Label3D2" type="Label3D" parent="station_display_R" index="1" groups=["signage2"]]
transform = Transform3D(-1, 0, -8.742282e-08, 0, 1, 0, 8.742282e-08, 0, -1, 0.85590327, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -174,10 +174,10 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Cube_012" parent="." index="49" unique_id=344629753]
[node name="Cube_012" parent="." index="49"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="Cube_012" index="0" unique_id=663534524 groups=["signage1"]]
[node name="Label3D" type="Label3D" parent="Cube_012" index="0" groups=["signage1"]]
transform = Transform3D(1, 0, 1.9895197e-13, 0, 1, 0, -1.9895197e-13, 0, 1, -0.8458555, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -188,7 +188,7 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="Cube_012" index="1" unique_id=1765168718 groups=["signage1"]]
[node name="Label3D2" type="Label3D" parent="Cube_012" index="1" groups=["signage1"]]
transform = Transform3D(-1, 0, -8.742293e-08, 0, 1, 0, 8.742293e-08, 0, -1, 0.85590315, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -199,10 +199,10 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Cube_014" parent="." index="50" unique_id=1445806880]
[node name="Cube_014" parent="." index="50"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="Cube_014" index="0" unique_id=433447963 groups=["signage2"]]
[node name="Label3D" type="Label3D" parent="Cube_014" index="0" groups=["signage2"]]
transform = Transform3D(1, 0, 1.9895195e-13, 0, 1, 0, -1.9895195e-13, 0, 1, -0.8458553, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -213,7 +213,7 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="Cube_014" index="1" unique_id=504377523 groups=["signage2"]]
[node name="Label3D2" type="Label3D" parent="Cube_014" index="1" groups=["signage2"]]
transform = Transform3D(-1, 0, -8.742282e-08, 0, 1, 0, 8.742282e-08, 0, -1, 0.85590327, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -224,10 +224,10 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Cube_016" parent="." index="51" unique_id=1680412331]
[node name="Cube_016" parent="." index="51"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="Cube_016" index="0" unique_id=869875951 groups=["signage1", "signage2"]]
[node name="Label3D" type="Label3D" parent="Cube_016" index="0" groups=["signage1", "signage2"]]
transform = Transform3D(1, 0, 1.9895197e-13, 0, 1, 0, -1.9895197e-13, 0, 1, -0.8458553, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -238,7 +238,7 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="Cube_016" index="1" unique_id=161017806 groups=["signage1"]]
[node name="Label3D2" type="Label3D" parent="Cube_016" index="1" groups=["signage1"]]
transform = Transform3D(-1, 0, -8.742293e-08, 0, 1, 0, 8.742293e-08, 0, -1, 0.85590315, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -249,10 +249,10 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Cube_010" parent="." index="52" unique_id=1863769251]
[node name="Cube_010" parent="." index="52"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="Cube_010" index="0" unique_id=521079851 groups=["signage2"]]
[node name="Label3D" type="Label3D" parent="Cube_010" index="0" groups=["signage2"]]
transform = Transform3D(1, 0, 1.9895195e-13, 0, 1, 0, -1.9895195e-13, 0, 1, -0.8458553, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -263,7 +263,7 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="Cube_010" index="1" unique_id=1080113923 groups=["signage2"]]
[node name="Label3D2" type="Label3D" parent="Cube_010" index="1" groups=["signage2"]]
transform = Transform3D(-1, 0, -8.742282e-08, 0, 1, 0, 8.742282e-08, 0, -1, 0.85590327, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -274,10 +274,10 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Cube_017" parent="." index="53" unique_id=48237932]
[node name="Cube_017" parent="." index="53"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="Cube_017" index="0" unique_id=1122044412 groups=["signage1"]]
[node name="Label3D" type="Label3D" parent="Cube_017" index="0" groups=["signage1"]]
transform = Transform3D(1, 0, 1.9895197e-13, 0, 1, 0, -1.9895197e-13, 0, 1, -0.8458555, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -288,7 +288,7 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="Cube_017" index="1" unique_id=973870713 groups=["signage1"]]
[node name="Label3D2" type="Label3D" parent="Cube_017" index="1" groups=["signage1"]]
transform = Transform3D(-1, 0, -8.742293e-08, 0, 1, 0, 8.742293e-08, 0, -1, 0.855903, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -299,10 +299,10 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Cube_018" parent="." index="54" unique_id=176965991]
[node name="Cube_018" parent="." index="54"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="Cube_018" index="0" unique_id=223573175 groups=["signage2"]]
[node name="Label3D" type="Label3D" parent="Cube_018" index="0" groups=["signage2"]]
transform = Transform3D(1, 0, 1.9895195e-13, 0, 1, 0, -1.9895195e-13, 0, 1, -0.8458553, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -313,7 +313,7 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="Cube_018" index="1" unique_id=1733940824 groups=["signage2"]]
[node name="Label3D2" type="Label3D" parent="Cube_018" index="1" groups=["signage2"]]
transform = Transform3D(-1, 0, -8.742282e-08, 0, 1, 0, 8.742282e-08, 0, -1, 0.85590327, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -324,10 +324,10 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Cube_019" parent="." index="55" unique_id=1049546297]
[node name="Cube_019" parent="." index="55"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="Cube_019" index="0" unique_id=1354074723 groups=["signage1"]]
[node name="Label3D" type="Label3D" parent="Cube_019" index="0" groups=["signage1"]]
transform = Transform3D(1, 0, 1.9895197e-13, 0, 1, 0, -1.9895197e-13, 0, 1, -0.8458553, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
@ -338,7 +338,7 @@ outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="Cube_019" index="1" unique_id=1646653447 groups=["signage1"]]
[node name="Label3D2" type="Label3D" parent="Cube_019" index="1" groups=["signage1"]]
transform = Transform3D(-1, 0, -8.742293e-08, 0, 1, 0, 8.742293e-08, 0, -1, 0.85590315, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)

View File

@ -1,4 +1,4 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://b3wybjajg4dr3"]
[gd_resource type="ShaderMaterial" load_steps=10 format=3 uid="uid://b3wybjajg4dr3"]
[ext_resource type="Texture2D" uid="uid://dg241b0ow4owm" path="res://base-environments/transition/import/textures/StationTiles_Albedo.png" id="1_oop75"]
[ext_resource type="Texture2D" uid="uid://dst0u5b51mx4h" path="res://base-environments/transition/shaders/water_color.exr" id="1_s12gp"]

View File

@ -8,7 +8,6 @@
[resource]
resource_name = "train_windows"
transparency = 4
cull_mode = 2
albedo_texture = ExtResource("1_qqnyp")
metallic = 1.0
metallic_texture = ExtResource("2_orwl3")

View File

@ -9,7 +9,6 @@
resource_name = "train_windows_transparent"
transparency = 1
blend_mode = 4
cull_mode = 2
albedo_texture = ExtResource("1_p8q8d")
metallic = 1.0
metallic_texture = ExtResource("2_eds1u")

View File

@ -1,5 +1,5 @@
shader_type spatial;
render_mode cull_disabled, blend_add, unshaded;
render_mode cull_back, blend_add, unshaded;
varying vec3 world_pos;
uniform float state = 0.0;

View File

@ -1,4 +1,4 @@
[gd_resource type="ShaderMaterial" load_steps=4 format=3 uid="uid://dchm78gv31r6a"]
[gd_resource type="ShaderMaterial" format=3 uid="uid://dchm78gv31r6a"]
[ext_resource type="Shader" uid="uid://dpowid5cwvgu0" path="res://base-environments/transition/shaders/timetravel.gdshader" id="1_0da7x"]
[ext_resource type="Texture2D" uid="uid://dst0u5b51mx4h" path="res://base-environments/transition/shaders/water_color.exr" id="2_4vy32"]

View File

@ -1,8 +1,5 @@
extends Station
extends Node3D
func _ready() -> void:
%PlayerDetect.body_entered.connect(func(body):
if visible and body is PlayerController:
State.room.save_game.subway_burnout = true
await Main.curtain.black()
State.room.proceed.emit(Main.adulthood_room_path))
State.room.save_game.burnout = true
%PlayerDetect.body_entered.connect(func(body): if visible and body is PlayerController: State.room.proceed.emit(Main.adulthood_room_path))

File diff suppressed because one or more lines are too long

View File

@ -1,14 +1,14 @@
[gd_scene format=3 uid="uid://d2j0d88axhfue"]
[gd_scene load_steps=4 format=3 uid="uid://d2j0d88axhfue"]
[ext_resource type="PackedScene" uid="uid://c1ivlhueth0xe" path="res://base-environments/transition/import/dungeon_station.glb" id="1_4tuwp"]
[ext_resource type="AudioStream" uid="uid://31dunmt6i7ck" path="res://base-environments/transition/audio/328953__sandermotions__escalator-1.wav" id="3_ke0al"]
[ext_resource type="PackedScene" uid="uid://tuv111h6jsnu" path="res://base-environments/transition/import/textures/meta_station_imported.tscn" id="5_ru87u"]
[node name="station_hirschfeld" unique_id=825756048 instance=ExtResource("1_4tuwp")]
[node name="station_hirschfeld" instance=ExtResource("1_4tuwp")]
[node name="meta_station" parent="." index="5" unique_id=1517771541 instance=ExtResource("5_ru87u")]
[node name="meta_station" parent="." index="5" instance=ExtResource("5_ru87u")]
[node name="EscalatorAudio" type="AudioStreamPlayer3D" parent="meta_station" index="56" unique_id=775809027]
[node name="EscalatorAudio" type="AudioStreamPlayer3D" parent="meta_station" index="56"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5971837, 0)
stream = ExtResource("3_ke0al")
attenuation_model = 1

View File

@ -1,8 +1,4 @@
extends Station
extends Node3D
func _ready() -> void:
%PlayerDetect.body_entered.connect(func(body):
if visible and body is PlayerController:
State.room.save_game.subway_burnout = false
await Main.curtain.black()
State.room.proceed.emit(Main.adulthood_room_path))
%PlayerDetect.body_entered.connect(func(body): if visible and body is PlayerController: State.room.proceed.emit(Main.adulthood_room_path))

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,15 +1,9 @@
[gd_scene load_steps=31 format=3 uid="uid://df3ur5wll8vx7"]
[gd_scene load_steps=25 format=3 uid="uid://df3ur5wll8vx7"]
[ext_resource type="PackedScene" uid="uid://4j1tlhfm3p40" path="res://base-environments/transition/subway_train.tscn" id="1_2h2xx"]
[ext_resource type="Script" uid="uid://dgfje4druu3sw" path="res://base-environments/transition/code/dolly.gd" id="1_5jpg8"]
[ext_resource type="Script" uid="uid://cyohujvfoiof7" path="res://base-environments/transition/code/subway_train.gd" id="2_aacjs"]
[ext_resource type="AudioStream" uid="uid://cwfr6sgcwg7sl" path="res://base-environments/transition/audio/450918__kyles__metro-subway-montreal-verdun-station-arrive-and-leave-semidistant-from-bridge-over-tracks-overpass.ogg" id="3_4h0n7"]
[ext_resource type="Material" uid="uid://cl7e6lpjalm0c" path="res://base-environments/transition/shaders/u1.material" id="3_j8pin"]
[ext_resource type="Material" uid="uid://c0baqy42xdxtg" path="res://base-environments/transition/shaders/u2.material" id="4_3w708"]
[ext_resource type="Material" uid="uid://bw4y5b5lnw3cn" path="res://base-environments/transition/shaders/u4.material" id="5_3x5rc"]
[ext_resource type="Material" uid="uid://cor0uho8hnfqc" path="res://base-environments/transition/shaders/u7.material" id="6_ckebf"]
[ext_resource type="Material" uid="uid://d0kk76pja0orj" path="res://base-environments/transition/shaders/u8.material" id="7_dyyau"]
[ext_resource type="FontFile" uid="uid://b231f0liphck" path="res://import/fonts/AtkinsonHyperlegible-Regular.ttf" id="10_3w708"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_aacjs"]
shading_mode = 0
@ -114,6 +108,14 @@ size = Vector3(31.194, 0.8, 3.8)
[node name="TrainDolly" type="Node3D"]
script = ExtResource("1_5jpg8")
index = null
signage_group = null
pre_arrival_time = null
arrival_time = null
pre_leave_time = null
door_close_time = null
leave_time = null
post_leave_time = null
metadata/_custom_type_script = "uid://dgfje4druu3sw"
[node name="Destination" type="Node3D" parent="."]
@ -128,13 +130,6 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -150)
[node name="Subway" type="Node3D" parent="."]
script = ExtResource("2_aacjs")
materials = Dictionary[StringName, Material]({
&"u1": ExtResource("3_j8pin"),
&"u2": ExtResource("4_3w708"),
&"u4": ExtResource("5_3x5rc"),
&"u7": ExtResource("6_ckebf"),
&"u8": ExtResource("7_dyyau")
})
metadata/_custom_type_script = "uid://cyohujvfoiof7"
[node name="WarpEffecScreen" type="MeshInstance3D" parent="Subway"]
@ -165,40 +160,26 @@ spot_angle = 15.0
[node name="SubwayTrainAudio" type="AudioStreamPlayer3D" parent="Subway"]
unique_name_in_owner = true
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0, -0.742, -11.098)
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -0.4578781, 0, -6.1605225)
stream = ExtResource("3_4h0n7")
unit_size = 100.0
max_polyphony = 2
panning_strength = 0.7
bus = &"sfx"
playback_type = 1
[node name="SubwayTrainAudioIntense" type="AudioStreamPlayer3D" parent="Subway"]
unique_name_in_owner = true
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0, -0.802, 10.908)
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0.6660023, 0, 0)
stream = ExtResource("3_4h0n7")
attenuation_model = 1
unit_size = 15.0
max_polyphony = 2
panning_strength = 0.9
bus = &"sfx"
playback_type = 1
[node name="TrainModel" parent="Subway" instance=ExtResource("1_2h2xx")]
unique_name_in_owner = true
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -3.4114173e-08, 0, -0.7804413)
[node name="LineLabelFront" type="Label3D" parent="Subway/TrainModel"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -15.413577, 2.7434583, -6.737489e-07)
text = "U0"
font = ExtResource("10_3w708")
font_size = 64
[node name="LineLabelBack" type="Label3D" parent="Subway/TrainModel"]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 15.410003, 2.7434583, 6.9981036e-07)
text = "U0"
font = ExtResource("10_3w708")
font_size = 64
script = null
[node name="Collider" type="AnimatableBody3D" parent="Subway"]
unique_name_in_owner = true

View File

@ -1,12 +1,20 @@
[gd_scene format=4 uid="uid://4j1tlhfm3p40"]
[gd_scene load_steps=15 format=4 uid="uid://4j1tlhfm3p40"]
[ext_resource type="PackedScene" uid="uid://dmh8tmuvftqus" path="res://base-environments/transition/import/subway_train.glb" id="1_8e51f"]
[ext_resource type="Material" uid="uid://dchm78gv31r6a" path="res://base-environments/transition/shaders/timetravel.tres" id="2_g5p57"]
[ext_resource type="Material" uid="uid://ddw7mob1qmlbj" path="res://base-environments/transition/shaders/u0.material" id="3_81crm"]
[ext_resource type="Script" uid="uid://cyohujvfoiof7" path="res://base-environments/transition/code/subway_train.gd" id="2_skiem"]
[ext_resource type="Material" uid="uid://rh1lc61j6qd8" path="res://base-environments/transition/import/textures/roof_greeble.tres" id="3_q0ort"]
[ext_resource type="Texture2D" uid="uid://bewykr0twbplg" path="res://base-environments/transition/import/textures/LateralTren_baseColor_upscayl_2x_realesrgan-x4plus-anime.png" id="5_6pwip"]
[ext_resource type="VoxelGIData" uid="uid://coibvxeouqllc" path="res://base-environments/transition/vfx/voxelGI_subway_train.tres" id="5_q0ort"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8e51f"]
cull_mode = 2
albedo_color = Color(0.22188288, 0.6046251, 0.8484487, 1)
metallic = 0.5
roughness = 0.5
clearcoat_enabled = true
clearcoat_roughness = 0.2
[sub_resource type="ArrayMesh" id="ArrayMesh_f2ux3"]
_surfaces = [{
"aabb": AABB(-5.128359, -0.2631049, -1.4985942, 10.841061, 0.57964456, 3.1154532),
@ -44,7 +52,6 @@ shadow_mesh = SubResource("ArrayMesh_f2ux3")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_q0ort"]
transparency = 1
blend_mode = 1
cull_mode = 2
albedo_texture = ExtResource("5_6pwip")
roughness = 0.1
@ -136,198 +143,200 @@ _data = {
&"door_open": SubResource("Animation_8e51f")
}
[node name="subway_train" unique_id=1755696385 instance=ExtResource("1_8e51f")]
[node name="subway_train" instance=ExtResource("1_8e51f")]
script = ExtResource("2_skiem")
[node name="traun_hull" parent="." index="0" unique_id=997216472]
[node name="traun_hull" parent="." index="0"]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0, 0, 0)
layers = 4
gi_mode = 2
surface_material_override/0 = ExtResource("3_81crm")
surface_material_override/0 = SubResource("StandardMaterial3D_8e51f")
[node name="ApoyaCristalesLateralesPared3_LP_004_LateralesInteriores_0_001" parent="traun_hull" index="0" unique_id=985506164]
[node name="ApoyaCristalesLateralesPared3_LP_004_LateralesInteriores_0_001" parent="traun_hull" index="0"]
layers = 4
[node name="ApoyaCristalesLateralesPared3_LP_004_LateralesInteriores_0_002" parent="traun_hull" index="1" unique_id=1929128547]
[node name="ApoyaCristalesLateralesPared3_LP_004_LateralesInteriores_0_002" parent="traun_hull" index="1"]
layers = 4
[node name="cabin" parent="traun_hull" index="2" unique_id=1235405392]
[node name="cabin" parent="traun_hull" index="2"]
layers = 4
[node name="cabin_001" parent="traun_hull" index="3" unique_id=42368085]
[node name="cabin_001" parent="traun_hull" index="3"]
layers = 4
[node name="cabin_windows" parent="traun_hull" index="4" unique_id=1682732857]
[node name="cabin_windows" parent="traun_hull" index="4"]
layers = 4
[node name="cabin_windows_001" parent="traun_hull" index="5" unique_id=903571490]
[node name="cabin_windows_001" parent="traun_hull" index="5"]
layers = 4
[node name="ceiling" parent="traun_hull" index="6" unique_id=2103099870]
[node name="ceiling" parent="traun_hull" index="6"]
layers = 4
[node name="ceiling_001" parent="traun_hull" index="7" unique_id=2139068792]
[node name="ceiling_001" parent="traun_hull" index="7"]
layers = 4
[node name="Cube_004" parent="traun_hull" index="8" unique_id=720511511]
[node name="Cube_004" parent="traun_hull" index="8"]
layers = 4
[node name="Cube_005" parent="traun_hull" index="9" unique_id=1016564497]
[node name="Cube_005" parent="traun_hull" index="9"]
layers = 4
[node name="Cube_007" type="MeshInstance3D" parent="traun_hull" index="10" unique_id=2100437457]
[node name="Cube_007" type="MeshInstance3D" parent="traun_hull" index="10"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10.140757, 3.1445234, -1.4974344e-06)
layers = 4
mesh = SubResource("ArrayMesh_7uxbi")
skeleton = NodePath("")
[node name="Cube_006" parent="traun_hull" index="11" unique_id=728325690]
[node name="Cube_006" parent="traun_hull" index="11"]
layers = 4
[node name="Cube_008" parent="traun_hull" index="12" unique_id=1209871809]
[node name="Cube_008" parent="traun_hull" index="12"]
layers = 4
[node name="Cube_010" parent="traun_hull" index="13" unique_id=110333036]
[node name="Cube_010" parent="traun_hull" index="13"]
layers = 4
[node name="Cube_012" parent="traun_hull" index="14" unique_id=82219605]
[node name="Cube_012" parent="traun_hull" index="14"]
layers = 4
[node name="Cube_014" parent="traun_hull" index="15" unique_id=100170641]
[node name="Cube_014" parent="traun_hull" index="15"]
layers = 4
[node name="door_seat2_low_MAT_SEATS_0_001" parent="traun_hull" index="16" unique_id=1608318234]
[node name="door_seat2_low_MAT_SEATS_0_001" parent="traun_hull" index="16"]
layers = 4
[node name="door_seat2_low_MAT_SEATS_0_002" parent="traun_hull" index="17" unique_id=537892245]
[node name="door_seat2_low_MAT_SEATS_0_002" parent="traun_hull" index="17"]
layers = 4
[node name="door_seating_001" parent="traun_hull" index="18" unique_id=29456754]
[node name="door_seating_001" parent="traun_hull" index="18"]
layers = 4
[node name="door_seating_002" parent="traun_hull" index="19" unique_id=1992095810]
[node name="door_seating_002" parent="traun_hull" index="19"]
layers = 4
[node name="door_seating_003" parent="traun_hull" index="20" unique_id=1640376733]
[node name="door_seating_003" parent="traun_hull" index="20"]
layers = 4
[node name="door_seating_004" parent="traun_hull" index="21" unique_id=1861798917]
[node name="door_seating_004" parent="traun_hull" index="21"]
layers = 4
[node name="door_seating_005" parent="traun_hull" index="22" unique_id=1788081881]
[node name="door_seating_005" parent="traun_hull" index="22"]
layers = 4
[node name="Icosphere_003" parent="traun_hull" index="23" unique_id=430174688]
[node name="Icosphere_003" parent="traun_hull" index="23"]
layers = 4
[node name="Icosphere_016" parent="traun_hull" index="24" unique_id=1677194569]
[node name="Icosphere_016" parent="traun_hull" index="24"]
layers = 4
[node name="Icosphere_017" parent="traun_hull" index="25" unique_id=1644178170]
[node name="Icosphere_017" parent="traun_hull" index="25"]
layers = 4
[node name="Icosphere_018" parent="traun_hull" index="26" unique_id=1112737943]
[node name="Icosphere_018" parent="traun_hull" index="26"]
layers = 4
[node name="Icosphere_019" parent="traun_hull" index="27" unique_id=1423877139]
[node name="Icosphere_019" parent="traun_hull" index="27"]
layers = 4
[node name="Icosphere_020" parent="traun_hull" index="28" unique_id=1819164379]
[node name="Icosphere_020" parent="traun_hull" index="28"]
layers = 4
[node name="interiour_walls" parent="traun_hull" index="29" unique_id=1262158040]
[node name="interiour_walls" parent="traun_hull" index="29"]
layers = 4
[node name="interiour_walls_001" parent="traun_hull" index="30" unique_id=412676970]
[node name="interiour_walls_001" parent="traun_hull" index="30"]
layers = 4
[node name="MarcosPuertasInteriorLateral2_LP_004_LateralesInteriores_0_001" parent="traun_hull" index="31" unique_id=1236591883]
[node name="MarcosPuertasInteriorLateral2_LP_004_LateralesInteriores_0_001" parent="traun_hull" index="31"]
layers = 4
[node name="MarcosPuertasInteriorLateral2_LP_004_LateralesInteriores_0_002" parent="traun_hull" index="32" unique_id=708054081]
[node name="MarcosPuertasInteriorLateral2_LP_004_LateralesInteriores_0_002" parent="traun_hull" index="32"]
layers = 4
[node name="middle_seating" parent="traun_hull" index="33" unique_id=1557584304]
[node name="middle_seating" parent="traun_hull" index="33"]
layers = 4
[node name="middle_seating_001" parent="traun_hull" index="34" unique_id=1546075330]
[node name="middle_seating_001" parent="traun_hull" index="34"]
layers = 4
[node name="middle_seating_002" parent="traun_hull" index="35" unique_id=1396264635]
[node name="middle_seating_002" parent="traun_hull" index="35"]
layers = 4
[node name="middle_seating_003" parent="traun_hull" index="36" unique_id=1389438019]
[node name="middle_seating_003" parent="traun_hull" index="36"]
layers = 4
[node name="SeparadoresSueloInterior_LP_006_SueloInterior_0_001" parent="traun_hull" index="37" unique_id=1287465993]
[node name="SeparadoresSueloInterior_LP_006_SueloInterior_0_001" parent="traun_hull" index="37"]
layers = 4
[node name="SeparadoresSueloInterior_LP_006_SueloInterior_0_002" parent="traun_hull" index="38" unique_id=1131705536]
[node name="SeparadoresSueloInterior_LP_006_SueloInterior_0_002" parent="traun_hull" index="38"]
layers = 4
[node name="SeparadoresSueloInterior_LP_006_SueloInterior_0_003" parent="traun_hull" index="39" unique_id=1657133970]
[node name="SeparadoresSueloInterior_LP_006_SueloInterior_0_003" parent="traun_hull" index="39"]
layers = 4
[node name="SeparadoresSueloInterior_LP_007_SueloInterior_0_002" parent="traun_hull" index="40" unique_id=95643343]
[node name="SeparadoresSueloInterior_LP_007_SueloInterior_0_002" parent="traun_hull" index="40"]
layers = 4
[node name="SeparadoresSueloInterior_LP_007_SueloInterior_0_003" parent="traun_hull" index="41" unique_id=628074467]
[node name="SeparadoresSueloInterior_LP_007_SueloInterior_0_003" parent="traun_hull" index="41"]
layers = 4
[node name="SueloInterior_LP_006_SueloInterior_0_001" parent="traun_hull" index="42" unique_id=887426]
[node name="SueloInterior_LP_006_SueloInterior_0_001" parent="traun_hull" index="42"]
layers = 4
[node name="train_display" parent="traun_hull" index="43" unique_id=2037687580]
[node name="train_display" parent="traun_hull" index="43"]
layers = 4
[node name="undercarriage" parent="traun_hull" index="44" unique_id=806213779]
[node name="undercarriage" parent="traun_hull" index="44"]
layers = 4
[node name="VentanaLateral2_LP_004_LateralTren_0_003" parent="traun_hull" index="45" unique_id=840775399]
[node name="VentanaLateral2_LP_004_LateralTren_0_003" parent="traun_hull" index="45"]
layers = 4
surface_material_override/0 = ExtResource("2_g5p57")
surface_material_override/1 = SubResource("StandardMaterial3D_q0ort")
[node name="VentanaLateral2_LP_004_LateralTren_0_004" parent="traun_hull" index="46" unique_id=987259430]
[node name="VentanaLateral2_LP_004_LateralTren_0_004" parent="traun_hull" index="46"]
layers = 4
surface_material_override/0 = ExtResource("2_g5p57")
surface_material_override/1 = SubResource("StandardMaterial3D_q0ort")
[node name="wall_seating_001" parent="traun_hull" index="47" unique_id=437405653]
[node name="wall_seating_001" parent="traun_hull" index="47"]
layers = 4
[node name="wall_seating_002" parent="traun_hull" index="48" unique_id=1403151742]
[node name="wall_seating_002" parent="traun_hull" index="48"]
layers = 4
[node name="wall_seating_003" parent="traun_hull" index="49" unique_id=218529971]
[node name="wall_seating_003" parent="traun_hull" index="49"]
layers = 4
[node name="wall_seating_004" parent="traun_hull" index="50" unique_id=15472790]
[node name="wall_seating_004" parent="traun_hull" index="50"]
layers = 4
[node name="wall_seating_005" parent="traun_hull" index="51" unique_id=1434451492]
[node name="wall_seating_005" parent="traun_hull" index="51"]
layers = 4
[node name="wall_seating_006" parent="traun_hull" index="52" unique_id=1915677652]
[node name="wall_seating_006" parent="traun_hull" index="52"]
layers = 4
[node name="wall_seating_007" parent="traun_hull" index="53" unique_id=307891428]
[node name="wall_seating_007" parent="traun_hull" index="53"]
layers = 4
[node name="wall_seating_008" parent="traun_hull" index="54" unique_id=305835946]
[node name="wall_seating_008" parent="traun_hull" index="54"]
layers = 4
[node name="window_frames" parent="traun_hull" index="55" unique_id=290961844]
[node name="window_frames" parent="traun_hull" index="55"]
layers = 4
[node name="window_frames_001" parent="traun_hull" index="56" unique_id=1848579204]
[node name="window_frames_001" parent="traun_hull" index="56"]
layers = 4
[node name="AnimationPlayer" type="AnimationPlayer" parent="." index="1" unique_id=766382601]
libraries/ = SubResource("AnimationLibrary_skiem")
[node name="AnimationPlayer" type="AnimationPlayer" parent="." index="1"]
libraries = {
&"": SubResource("AnimationLibrary_skiem")
}
[node name="VoxelGI" type="VoxelGI" parent="." index="2" unique_id=2117963437]
[node name="VoxelGI" type="VoxelGI" parent="." index="2"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.35, 0)
layers = 4
subdiv = 0
size = Vector3(35, 4.6, 4)
data = ExtResource("5_q0ort")

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
kitchen_hardware_albedo.tga filter=lfs diff=lfs merge=lfs -text
kitchen_hardware_normal.tga filter=lfs diff=lfs merge=lfs -text

View File

@ -41,5 +41,5 @@ process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=1024
process/size_limit=2048
detect_3d/compress_to=0

View File

@ -41,5 +41,5 @@ process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=1024
process/size_limit=2048
detect_3d/compress_to=0

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dg4cq1texkil5"
path="res://.godot/imported/FoM_xavier_therapie_1.wav-5b326af67128f51afe9b270b12a8a195.sample"
[deps]
source_file="res://base-environments/volunteer_room/scenes/FoM_xavier_therapie_1.wav"
dest_files=["res://.godot/imported/FoM_xavier_therapie_1.wav-5b326af67128f51afe9b270b12a8a195.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@ -4,7 +4,7 @@
[ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="2_abtq0"]
[ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="3_pcx8t"]
[ext_resource type="PackedScene" uid="uid://dvwuhobhka78d" path="res://ui/skip_control/skip_control.tscn" id="4_w4vem"]
[ext_resource type="AudioStream" uid="uid://cw1s2g8wg3120" path="res://base-environments/volunteer_room/sounds/FoM_xavier_unifood.wav" id="5_86ec2"]
[ext_resource type="AudioStream" uid="uid://dupcfwi54fpjx" path="res://base-environments/youth_room/audio/FoM_Lisa_Kindheit_Voice_Acting_deutsch_newt.wav" id="5_0dsyx"]
[ext_resource type="AudioStream" uid="uid://d15ltkofdggly" path="res://base-environments/youth_room/audio/Voice-Training-Workshop.wav" id="6_fiu8d"]
[ext_resource type="Script" uid="uid://c1oub0cs7cph6" path="res://dev-util/stereo-switch.gd" id="7_sh3ja"]
@ -99,7 +99,7 @@ tracks/5/keys = {
[sub_resource type="Animation" id="Animation_ayw8a"]
resource_name = "de"
length = 66.0
length = 86.0
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
@ -108,11 +108,11 @@ tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.3525498,
"start_offset": 1.6578125,
"stream": ExtResource("5_86ec2")
"end_offset": 1.36178,
"start_offset": 0.0,
"stream": ExtResource("5_0dsyx")
}],
"times": PackedFloat32Array(2.2000003)
"times": PackedFloat32Array(1.16667)
}
tracks/0/use_blend = true
tracks/1/type = "value"
@ -122,10 +122,10 @@ tracks/1/path = NodePath("../../..:progress")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.66667, 4.73332, 6.03333, 11.6, 12.766666, 15.8333, 16.4333, 18.266666, 19.6333, 27.1, 29.8, 35.466633, 37.3, 39.933334, 41.233334, 43.800034, 45.233334, 52.833275, 53.466667, 58.166664, 59.6, 64.2),
"transitions": PackedFloat32Array(1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 1.23114, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.287175, 0.482968, 0.482968, 0.482968),
"times": PackedFloat32Array(0, 1.66667, 4.73332, 6.03333, 11.6, 12.4, 15.8333, 16.4333, 18.9334, 19.6333, 24.5333, 25.6, 29, 30.3667, 36.1333, 39.4, 40.8, 42.2333, 44.6333, 45.2667, 47.0333, 49.2333, 53.4333, 54.6333, 57.1333, 57.8333, 61.1333, 63.2667, 66.5667, 67.5, 72.4597, 74.5, 77.2667, 78.4667, 85.2),
"transitions": PackedFloat32Array(1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 1.23114, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.287175, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968),
"update": 0,
"values": [0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0, 6.0, 7.0, 7.0, 8.0, 8.0, 9.0, 9.0, 10.0, 10.0, 11.0]
"values": [0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0, 6.0, 7.0, 7.0, 8.0, 8.0, 9.0, 9.0, 10.0, 10.0, 11.0, 11.0, 12.0, 12.0, 13.0, 13.0, 14.0, 14.0, 15.0, 15.0, 16.0, 16.0, 17.0]
}
tracks/2/type = "method"
tracks/2/imported = false
@ -134,8 +134,8 @@ tracks/2/path = NodePath("../../..")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(18.9, 40.766666, 65.2),
"transitions": PackedFloat32Array(1, 1, 1),
"times": PackedFloat32Array(24.8, 47.87, 61.7667, 74.0333, 85.2667),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"values": [{
"args": [],
"method": &"try_scroll"
@ -144,6 +144,12 @@ tracks/2/keys = {
"method": &"try_scroll"
}, {
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"_on_text_finished"
}]
}
@ -463,7 +469,6 @@ script = ExtResource("1_86ec2")
scene_id = 8
story_array = PackedStringArray("God I am so \"happy\" mom took care of everything at home. The dishes, the laundry, the trash, the groceries, the food.", "But guess what: when you are at university, they don\'t provide a mom with your dorm.", "And suddenly, you don\'t just need to study for your first semester, you need to learn to survive on your own. Good luck building good habits with that.", "I got really thin.", "I didn\'t really manage to eat at home, I didn\'t have the money to eat takeout all the time and oh my god:", "how do students manage to survive in a cafeteria?", "I mean: How do they manage to socialise, attend all the lectures, find relationships and even look passable with all that going on?", "Is it just me? I don\'t know.", "Who I am glad about tho is Jules. She has an eating order history and someday had enough of seeing my body crumble and decieded to basically adopt me.", "I could never really relate with her former eating discorder thoughts she was probably trying to get out of my head.", "But I can\'t argue against her coping strategies helping my body get the food it needed.")
paragraph_lengths = PackedInt32Array(1, 2, 6, 8, 10)
progress = -1.0
[node name="PanelContainer" type="PanelContainer" parent="."]
layout_mode = 2

View File

@ -4,7 +4,7 @@
[ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="2_00crh"]
[ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="3_3iy8l"]
[ext_resource type="PackedScene" uid="uid://dvwuhobhka78d" path="res://ui/skip_control/skip_control.tscn" id="4_32a0r"]
[ext_resource type="AudioStream" uid="uid://cnhkrhtk4cirx" path="res://base-environments/volunteer_room/sounds/FoM_xavier_therapie_1.wav" id="5_x5h0q"]
[ext_resource type="AudioStream" uid="uid://dupcfwi54fpjx" path="res://base-environments/youth_room/audio/FoM_Lisa_Kindheit_Voice_Acting_deutsch_newt.wav" id="5_bfggg"]
[ext_resource type="AudioStream" uid="uid://d15ltkofdggly" path="res://base-environments/youth_room/audio/Voice-Training-Workshop.wav" id="6_hdxjv"]
[ext_resource type="Script" uid="uid://c1oub0cs7cph6" path="res://dev-util/stereo-switch.gd" id="7_xkdnh"]
@ -99,7 +99,7 @@ tracks/5/keys = {
[sub_resource type="Animation" id="Animation_ayw8a"]
resource_name = "de"
length = 92.0
length = 86.0
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
@ -108,11 +108,11 @@ tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.3923047,
"stream": ExtResource("5_x5h0q")
"end_offset": 1.36178,
"start_offset": 0.0,
"stream": ExtResource("5_bfggg")
}],
"times": PackedFloat32Array(1.9333333)
"times": PackedFloat32Array(1.16667)
}
tracks/0/use_blend = true
tracks/1/type = "value"
@ -122,10 +122,10 @@ tracks/1/path = NodePath("../../..:progress")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.66667, 4.73332, 7.0333333, 11.6, 13.033334, 17.433332, 19.166666, 26.733334, 27.933332, 29.733202, 30.799902, 34.1999, 35.5666, 39.866665, 41.3, 46.400066, 47.833366, 52.1666, 52.8, 55.1667, 56.5, 59.033333, 60.233334, 64.9, 66.86667, 67.26674, 69.40013, 73.6, 75.46662, 78.46667, 79.4, 87.9),
"transitions": PackedFloat32Array(1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 1.23114, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.287175, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968),
"times": PackedFloat32Array(0, 1.66667, 4.73332, 6.03333, 11.6, 12.4, 15.8333, 16.4333, 18.9334, 19.6333, 24.5333, 25.6, 29, 30.3667, 36.1333, 39.4, 40.8, 42.2333, 44.6333, 45.2667, 47.0333, 49.2333, 53.4333, 54.6333, 57.1333, 57.8333, 61.1333, 63.2667, 66.5667, 67.5, 72.4597, 74.5, 77.2667, 78.4667, 85.2),
"transitions": PackedFloat32Array(1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 1.23114, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.287175, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968),
"update": 0,
"values": [0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0, 6.0, 7.0, 7.0, 8.0, 8.0, 9.0, 9.0, 10.0, 10.0, 11.0, 11.0, 12.0, 12.0, 13.0, 13.0, 14.0, 14.0, 15.0, 15.0, 16.0]
"values": [0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0, 6.0, 7.0, 7.0, 8.0, 8.0, 9.0, 9.0, 10.0, 10.0, 11.0, 11.0, 12.0, 12.0, 13.0, 13.0, 14.0, 14.0, 15.0, 15.0, 16.0, 16.0, 17.0]
}
tracks/2/type = "method"
tracks/2/imported = false
@ -134,7 +134,7 @@ tracks/2/path = NodePath("../../..")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(18.166666, 49.3, 59.666668, 74.76667, 91.63333),
"times": PackedFloat32Array(24.8, 47.87, 61.7667, 74.0333, 85.2667),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"values": [{
"args": [],
@ -469,7 +469,6 @@ script = ExtResource("1_ym0sv")
scene_id = 6
story_array = PackedStringArray("I sometimes wish I could go back in time to save myself from Lukas.", "Sometimes I even want to fight him one last time to make him feel how much he hurt me.", "I don\'t like these thoughts, because all they do is make my head spiral into an endless void of anger and doubt.", "So on a calm mind, I just hope he learned his lesson so his next love doesn\'t need to become a survivor.", "But do I regret being one?", "I mean it has made me go to therapy and that was a good thing.", "My therapist was pretty young and still in training.", "Talking to *him* about sex never really worked for me.", "So I still don\'t know what to do about my cravings. I\'d rather not have them but I can\'t deny they exist.", "At least he gave me the tools to figure it out on my own.", "Old thoughts are here to stay, he always said. But you can choose how to react.", "And while I choose to not react to my cravings for now, I can choose something different in the future.", "He also helped me manage the gauntlet that is an ADHD diagnosis. I suspect I wouldn\'t have the executive skills to get that on my own.", "So I guess I got my medication thanks to Lukas?", "And I can tell when to brace for my period because the weird urge to make my ex hit some very hard ground is quite specific.")
paragraph_lengths = PackedInt32Array(2, 3, 4, 5, 8, 11, 12, 14)
progress = -1.0
[node name="PanelContainer" type="PanelContainer" parent="."]
layout_mode = 2

View File

@ -0,0 +1,54 @@
extends RoomTemplate
@onready var card_picker: CardPicker = %Picker
@onready var player: PlayerController = %PlayerController
func _ready():
super._ready()
id = State.rooms.ADULTHOOD
func get_ready() -> void:
super.get_ready()
Scenes.scene_finished.connect(_on_scene_finished)
card_picker.cards_picked.connect(card_board.populate_board)
save_game = State.save_game
save_game.current_room = State.rooms.ADULTHOOD
Scenes.completed_sequences = save_game.mementos_complete
Scenes.started_sequences = save_game.mementos_complete
Scenes.enabled_sequences = save_game.sequences_enabled
#FIXME: fix the bloddy card board loading algorythm
#card_board.initialise_from_save(save_game)
card_board.board_completed.connect(func():
#TODO: hook in ending
save_room()
)
func start_room():
super.start_room()
%UI.show()
%PlayerController.process_mode = Node.PROCESS_MODE_INHERIT
# Give player control immediately, then open
Scenes.player_enable.emit(true)
await Main.curtain.open()
func _on_scene_finished(_id: int, _repeat:bool):
await get_tree().create_timer(3).timeout
save_room()
func save_room():
# Update board state before saving
card_board.save_to_resource(save_game)
save_game.mementos_complete = Scenes.completed_sequences
save_game.sequences_enabled = Scenes.enabled_sequences
super.save_room()
func prepare_transition():
pass
func unload():
pass

Binary file not shown.

View File

@ -1,24 +0,0 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://datmg48duktt1"
path="res://.godot/imported/FoM_xavier_DnD.wav-a689cfa18e7eb4ed0e110e9622a5b653.sample"
[deps]
source_file="res://base-environments/volunteer_room/sounds/FoM_xavier_DnD.wav"
dest_files=["res://.godot/imported/FoM_xavier_DnD.wav-a689cfa18e7eb4ed0e110e9622a5b653.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@ -1,34 +0,0 @@
extends RoomWithBoard
class_name VolunteerRoom
func _ready() -> void:
super._ready() # UwU, superclass _ready is not called by Godot automatically...
prints("volunteer_room.gd", "_ready()", self)
func get_ready_async() -> void:
await super.get_ready_async()
%TherapyVoluntaryInteractable.visible = not save_game.subway_burnout
%TherapyUniInteractable.visible = save_game.subway_burnout
card_board.board_completed.connect(func():
save_game.childhood_board_complete = true
#%DoorInteractable.show()
)
func start_room_async():
await super.start_room_async()
# Give player control immediately, then open
%PlayerController.process_mode = Node.PROCESS_MODE_INHERIT
Scenes.player_enable.emit(true)
await Main.curtain.open()
func prepare_transition():
pass
func unload():
pass

View File

@ -1,7 +1,7 @@
[gd_scene load_steps=49 format=3 uid="uid://flisupth27th"]
[ext_resource type="PackedScene" uid="uid://dwbhei5kywqbd" path="res://volunteer_room_visuals.tscn" id="1_ln5pp"]
[ext_resource type="Script" uid="uid://wiw2j1gw230e" path="res://base-environments/volunteer_room/volunteer_room.gd" id="1_wdfvq"]
[ext_resource type="Script" uid="uid://wiw2j1gw230e" path="res://base-environments/volunteer_room/shared_flat.gd" id="1_wdfvq"]
[ext_resource type="PackedScene" uid="uid://mkccbig41bqb" path="res://logic-scenes/player_controller/player_controller.tscn" id="2_upyac"]
[ext_resource type="Script" uid="uid://c281w7earok6w" path="res://base-environments/youth_room/crouch_volume.gd" id="3_fli74"]
[ext_resource type="PackedScene" uid="uid://dreokijo757l1" path="res://logic-scenes/interactable/interactable.tscn" id="5_my8p4"]
@ -201,14 +201,11 @@ func _on_environment_settings_update():
[node name="SharedFlat" type="Node3D"]
script = ExtResource("1_wdfvq")
id = 3
[node name="PlayerController" parent="." instance=ExtResource("2_upyac")]
unique_name_in_owner = true
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2.2023005, 0, 0.7319784)
[node name="Camera3D" parent="PlayerController/Yaw/Pitch/Mount" index="0"]
transform = Transform3D(1, 0, 0, 0, 1.0000006, 0, 0, 0, 1.0000006, 0, 0.202, 0.157)
initial_pitch = 0.0
[node name="volunteer_room" parent="." instance=ExtResource("1_ln5pp")]
@ -229,58 +226,53 @@ shape = SubResource("CapsuleShape3D_2fihi")
[node name="Collectables" type="Node3D" parent="."]
[node name="KitchenInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(0.999999, 0, 0, 0, 1, 0, 0, 0, 0.999999, 0.8310573, 1.0068259, -2.7083611)
transform = Transform3D(-0.999999, 0, 8.742269e-08, 0, 1, 0, -8.742269e-08, 0, -0.999999, 3.46201, 1.8257881, -4.097006)
interaction = ExtResource("12_6rb4d")
[node name="BurnoutInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(0.32358676, 0, -0.94619733, 0, 1, 0, 0.94619733, 0, 0.32358676, -2.1812932, 0.8092947, 5.313688)
transform = Transform3D(1.3113409e-07, 0, 0.999999, 0, 1, 0, -0.999999, 0, 1.3113409e-07, -2.1812932, 0.8092947, 5.313688)
interaction = ExtResource("11_kmoh8")
[node name="DiceInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(0.7071059, 0, -0.7071061, 0, 1, 0, 0.7071061, 0, 0.7071059, -2.07945, 0.5828748, 3.3940656)
transform = Transform3D(-0.70710593, 0, 0.70710605, 0, 1, 0, -0.70710605, 0, -0.70710593, -2.07945, 0.5828748, 3.3940656)
interaction = ExtResource("16_e1uao")
[node name="VoluntaryInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(-4.3711346e-08, 0, 0.999999, 0, 1, 0, -0.999999, 0, -4.3711346e-08, 0.36332494, 1.2541859, 4.9624853)
transform = Transform3D(-4.3711392e-08, 0, -0.999999, 0, 1, 0, 0.999999, 0, -4.3711392e-08, 0.36332494, 1.2541859, 4.9624853)
interaction = ExtResource("17_my8p4")
billboard = false
[node name="TherapyVoluntaryInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
unique_name_in_owner = true
transform = Transform3D(0.999999, 0, 0, 0, 1, 0, 0, 0, 0.999999, 0.399901, 1.21835, 1.29166)
transform = Transform3D(-0.999999, 0, 8.742269e-08, 0, 1, 0, -8.742269e-08, 0, -0.999999, 0.399901, 1.21835, 1.29166)
interaction = ExtResource("15_ci4rn")
billboard = false
[node name="TherapyUniInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
unique_name_in_owner = true
transform = Transform3D(0.999999, 0, 0, 0, 1, 0, 0, 0, 0.999999, 0.399901, 1.21835, 1.29166)
transform = Transform3D(-0.999999, 0, 8.742269e-08, 0, 1, 0, -8.742269e-08, 0, -0.999999, 0.399901, 1.21835, 1.29166)
interaction = ExtResource("14_upyac")
billboard = false
[node name="UniversityInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(-4.371135e-08, 0, -0.9999991, 0, 1, 0, 0.9999991, 0, -4.371135e-08, -2.7745893, 1.4022808, -3.0279322)
transform = Transform3D(-4.371135e-08, 0, 0.9999991, 0, 1, 0, -0.9999991, 0, -4.371135e-08, -2.7745893, 1.593935, -3.0279322)
interaction = ExtResource("13_5s6pb")
billboard = false
[node name="OldThougtsInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(-4.3711346e-08, 0, -0.999999, 0, 1, 0, 0.999999, 0, -4.3711346e-08, -2.40979, 0.41340256, 0.403546)
transform = Transform3D(1.3113399e-07, 0, 0.999999, 0, 1, 0, -0.999999, 0, 1.3113399e-07, -2.40979, 0.41340256, 0.403546)
interaction = ExtResource("17_my8p4")
[node name="AutismInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(-0.75470823, 0, -0.65605795, 0, 1, 0, 0.65605795, 0, -0.75470823, -1.8407239, 1.0439266, -3.8908288)
transform = Transform3D(0.49999908, 0, 0.86602396, 0, 1, 0, -0.86602396, 0, 0.49999908, -1.8407239, 1.0439266, -3.8908288)
interaction = ExtResource("10_gcdra")
[node name="Board" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -2.7652016, 1.2894461, 4.522677)
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.6904116, 1.240494, 4.441236)
interaction = ExtResource("19_ci4rn")
billboard = false
[node name="DoorInteractable" type="Node3D" parent="Collectables"]
unique_name_in_owner = true
[node name="VoxelGI" type="VoxelGI" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.08276367, 1.3269348, 0.09955597)
size = Vector3(6.132324, 2.9212036, 12.147232)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.08276367, 1.3269348, 0.05317688)
size = Vector3(6.132324, 2.9212036, 12.054474)
data = ExtResource("8_fli74")
[node name="Collision" type="Node3D" parent="."]
@ -382,7 +374,7 @@ shape = SubResource("BoxShape3D_2ixm0")
[node name="Scenes" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.4831846, 0, 2.44453)
[node name="SceneAnimationPlayer" type="AnimationPlayer" parent="Scenes"]
[node name="ScenePlayer" type="AnimationPlayer" parent="Scenes"]
unique_name_in_owner = true
libraries = {
&"": SubResource("AnimationLibrary_br20t")
@ -414,5 +406,3 @@ script = SubResource("GDScript_ri8p0")
environment = SubResource("Environment_pdgua")
camera_attributes = SubResource("CameraAttributesPractical_0bxa6")
script = SubResource("GDScript_3k3rl")
[editable path="PlayerController"]

View File

@ -26,5 +26,5 @@ func scene_finished(_id: Scenes.id, _repeat: bool):
queue("RESET")
func play(anin_name: StringName = "", a: float = -1, b: float = 1, c: bool = false) -> void:
print("anim player accessed!")
print_debug("anim player accessed!")
super.play(anin_name, a, b, c)

View File

@ -21,4 +21,4 @@ edit/normalize=false
edit/loop_mode=2
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2
compress/mode=0

View File

@ -21,4 +21,4 @@ edit/normalize=false
edit/loop_mode=2
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2
compress/mode=0

View File

@ -21,4 +21,4 @@ edit/normalize=false
edit/loop_mode=2
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2
compress/mode=0

View File

@ -21,4 +21,4 @@ edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2
compress/mode=0

View File

@ -0,0 +1,85 @@
class_name InteractiveSprite extends Area3D
@export var interaction_ui: PackedScene = null
@onready var pass_to_actor: = $UiWrapper/UiSprite/SubViewport/CollectableUi
@onready var wrapper := $UiWrapper
@onready var ui: CollectableUi = $UiWrapper/UiSprite/SubViewport.get_child(0)
@onready var viewport:= $UiWrapper/UiSprite/SubViewport
@onready var distance_tween: Tween
var revealed: bool = false:
set(reveal):
revealed = reveal
if reveal:
wrapper.show()
if distance_tween != null:
if distance_tween.is_running(): distance_tween.stop()
distance_tween = get_tree().create_tween()
distance_tween.tween_property($UiWrapper/Frame, ^":visibility_range_end", 3.0, 1.0)
else:
wrapper.hide()
ui.vanish()
if distance_tween != null:
if distance_tween.is_running(): distance_tween.stop()
distance_tween = get_tree().create_tween()
distance_tween.tween_property($UiWrapper/Frame, ^":visibility_range_end", 0.6, 1.0)
await get_tree().create_timer(1).timeout
if not ui.visible:
wrapper.hide()
var has_mouse: bool = false
# Automatically triggered story playback - e.g. for Intro in Youth Room
func play_story() -> void:
await ui.collect_memento()
# Called when the node enters the scene tree for the first time.
func _ready():
if interaction_ui:
%CanvasLayer.add_child(interaction_ui.instantiate())
ui.canvas_layer = %CanvasLayer
# Find and wire the interaction UI (StoryPlayable or CardBoard)
for child in %CanvasLayer.get_children():
if child is CardBoard:
ui.interaction_ui = child
break
elif child is Control:
ui.interaction_ui = child
break
# Connect playback_finished to restore player control
ui.playback_finished.connect(_on_playback_finished)
func _on_mouse_entered():
if not Scenes.is_playing:
input_ray_pickable = false
has_mouse = true
func _on_mouse_exited():
input_ray_pickable = true
has_mouse = false
func try_reveal(for_player: PlayerController) -> bool:
print_debug("reveal ui!")
revealed = ui.try_reveal()
if revealed:
call_deferred("wait_for_ui_exit", for_player)
return revealed
func wait_for_ui_exit(for_player: PlayerController):
await for_player.ui_exited
collapse()
func collapse():
_on_mouse_exited()
revealed = false
func _on_playback_finished():
# Restore player control via central signal
Scenes.player_enable.emit(true)
func handle(event: InputEvent):
viewport.push_input(event)

View File

@ -0,0 +1 @@
uid://dr4wd80dobxjd

Some files were not shown because too many files have changed in this diff Show More