refactor: rooms now ensure ID, rooms now share initialization code

This commit is contained in:
tiger tiger tiger 2026-01-22 11:02:58 +01:00
parent 2b949d8e73
commit 7653be9555
17 changed files with 124 additions and 96 deletions

View File

@ -1,4 +1,4 @@
extends RoomTemplate
extends Room
class_name SubwaySequence
@export var all_stations: Dictionary[Station.id, Station]

View File

@ -1,19 +1,19 @@
[gd_scene format=3 uid="uid://uhayiqixlv0e"]
[gd_scene load_steps=3 format=3 uid="uid://uhayiqixlv0e"]
[ext_resource type="PackedScene" uid="uid://7b8qxqyk4di2" path="res://base-environments/transition/import/volunteer_station.glb" id="1_gxnf0"]
[ext_resource type="PackedScene" uid="uid://tuv111h6jsnu" path="res://base-environments/transition/import/textures/meta_station_imported.tscn" id="2_28xtj"]
[node name="volunteer_station" unique_id=1086700491 instance=ExtResource("1_gxnf0")]
[node name="volunteer_station" instance=ExtResource("1_gxnf0")]
[node name="meta_station" parent="." index="46" unique_id=928456797 instance=ExtResource("2_28xtj")]
[node name="meta_station" parent="." index="46" instance=ExtResource("2_28xtj")]
[node name="Lighting" type="Node3D" parent="." index="47" unique_id=614453572]
[node name="Lighting" type="Node3D" parent="." index="47"]
visible = false
[node name="Left" type="Node3D" parent="Lighting" index="0" unique_id=841316440]
[node name="Left" type="Node3D" parent="Lighting" index="0"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.1015987, 0, 0)
[node name="OmniLight3D" type="SpotLight3D" parent="Lighting/Left" index="0" unique_id=858880331]
[node name="OmniLight3D" type="SpotLight3D" parent="Lighting/Left" index="0"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -10.1989)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -24,7 +24,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D13" type="SpotLight3D" parent="Lighting/Left" index="1" unique_id=1973416313]
[node name="OmniLight3D13" type="SpotLight3D" parent="Lighting/Left" index="1"]
transform = Transform3D(1, 0, 0, 0, -0.50000024, 0.8660253, 0, -0.8660253, -0.50000024, -0.42258057, 2.0402927, -5.2949142)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -35,7 +35,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D2" type="SpotLight3D" parent="Lighting/Left" index="2" unique_id=1775276584]
[node name="OmniLight3D2" type="SpotLight3D" parent="Lighting/Left" index="2"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -15.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -46,7 +46,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D3" type="SpotLight3D" parent="Lighting/Left" index="3" unique_id=56001064]
[node name="OmniLight3D3" type="SpotLight3D" parent="Lighting/Left" index="3"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -20.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -57,7 +57,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D4" type="SpotLight3D" parent="Lighting/Left" index="4" unique_id=1665416716]
[node name="OmniLight3D4" type="SpotLight3D" parent="Lighting/Left" index="4"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -25.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -68,7 +68,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D5" type="SpotLight3D" parent="Lighting/Left" index="5" unique_id=168448101]
[node name="OmniLight3D5" type="SpotLight3D" parent="Lighting/Left" index="5"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -30.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -79,7 +79,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D6" type="SpotLight3D" parent="Lighting/Left" index="6" unique_id=144351960]
[node name="OmniLight3D6" type="SpotLight3D" parent="Lighting/Left" index="6"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -35.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -90,7 +90,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D7" type="SpotLight3D" parent="Lighting/Left" index="7" unique_id=2109500620]
[node name="OmniLight3D7" type="SpotLight3D" parent="Lighting/Left" index="7"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -40.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -101,7 +101,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D8" type="SpotLight3D" parent="Lighting/Left" index="8" unique_id=1075807285]
[node name="OmniLight3D8" type="SpotLight3D" parent="Lighting/Left" index="8"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -45.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -112,7 +112,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D9" type="SpotLight3D" parent="Lighting/Left" index="9" unique_id=469725055]
[node name="OmniLight3D9" type="SpotLight3D" parent="Lighting/Left" index="9"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -50.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -123,7 +123,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D10" type="SpotLight3D" parent="Lighting/Left" index="10" unique_id=1960377915]
[node name="OmniLight3D10" type="SpotLight3D" parent="Lighting/Left" index="10"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -55.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -134,7 +134,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D11" type="SpotLight3D" parent="Lighting/Left" index="11" unique_id=1816850027]
[node name="OmniLight3D11" type="SpotLight3D" parent="Lighting/Left" index="11"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -60.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -145,7 +145,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D12" type="SpotLight3D" parent="Lighting/Left" index="12" unique_id=308692117]
[node name="OmniLight3D12" type="SpotLight3D" parent="Lighting/Left" index="12"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -65.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -156,10 +156,10 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="Right" type="Node3D" parent="Lighting" index="1" unique_id=630868085]
[node name="Right" type="Node3D" parent="Lighting" index="1"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.8136845, 0, 0)
[node name="OmniLight3D" type="SpotLight3D" parent="Lighting/Right" index="0" unique_id=2056485181]
[node name="OmniLight3D" type="SpotLight3D" parent="Lighting/Right" index="0"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -10.1989)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -170,7 +170,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D13" type="SpotLight3D" parent="Lighting/Right" index="1" unique_id=809548263]
[node name="OmniLight3D13" type="SpotLight3D" parent="Lighting/Right" index="1"]
transform = Transform3D(1, 0, 0, 0, -0.50000024, 0.8660253, 0, -0.8660253, -0.50000024, -0.42258057, 2.0402927, -5.2949142)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -181,7 +181,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D2" type="SpotLight3D" parent="Lighting/Right" index="2" unique_id=816752087]
[node name="OmniLight3D2" type="SpotLight3D" parent="Lighting/Right" index="2"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -15.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -192,7 +192,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D3" type="SpotLight3D" parent="Lighting/Right" index="3" unique_id=927174265]
[node name="OmniLight3D3" type="SpotLight3D" parent="Lighting/Right" index="3"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -20.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -203,7 +203,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D4" type="SpotLight3D" parent="Lighting/Right" index="4" unique_id=1690728036]
[node name="OmniLight3D4" type="SpotLight3D" parent="Lighting/Right" index="4"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -25.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -214,7 +214,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D5" type="SpotLight3D" parent="Lighting/Right" index="5" unique_id=2096526257]
[node name="OmniLight3D5" type="SpotLight3D" parent="Lighting/Right" index="5"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -30.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -225,7 +225,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D6" type="SpotLight3D" parent="Lighting/Right" index="6" unique_id=1776863402]
[node name="OmniLight3D6" type="SpotLight3D" parent="Lighting/Right" index="6"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -35.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -236,7 +236,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D7" type="SpotLight3D" parent="Lighting/Right" index="7" unique_id=620392762]
[node name="OmniLight3D7" type="SpotLight3D" parent="Lighting/Right" index="7"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -40.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -247,7 +247,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D8" type="SpotLight3D" parent="Lighting/Right" index="8" unique_id=1681381128]
[node name="OmniLight3D8" type="SpotLight3D" parent="Lighting/Right" index="8"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -45.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -258,7 +258,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D9" type="SpotLight3D" parent="Lighting/Right" index="9" unique_id=430454083]
[node name="OmniLight3D9" type="SpotLight3D" parent="Lighting/Right" index="9"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -50.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -269,7 +269,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D10" type="SpotLight3D" parent="Lighting/Right" index="10" unique_id=774180702]
[node name="OmniLight3D10" type="SpotLight3D" parent="Lighting/Right" index="10"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -55.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -280,7 +280,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D11" type="SpotLight3D" parent="Lighting/Right" index="11" unique_id=955522321]
[node name="OmniLight3D11" type="SpotLight3D" parent="Lighting/Right" index="11"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -60.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6
@ -291,7 +291,7 @@ spot_range = 6.5
spot_angle = 80.0
spot_angle_attenuation = 0.517633
[node name="OmniLight3D12" type="SpotLight3D" parent="Lighting/Right" index="12" unique_id=513566485]
[node name="OmniLight3D12" type="SpotLight3D" parent="Lighting/Right" index="12"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.42258057, 2.022126, -65.2744)
light_color = Color(0.978917, 0.789534, 0.685226, 1)
light_size = 0.6

View File

@ -206,6 +206,7 @@ compositor_effects = Array[CompositorEffect]([SubResource("CompositorEffect_820w
[node name="SubwaySequence" type="Node3D"]
script = ExtResource("1_yfan7")
id = 2
[node name="Logic" type="Node3D" parent="."]
unique_name_in_owner = true

View File

@ -1,13 +1,12 @@
extends RoomTemplate
extends RoomWithBoard
class_name VolunteerRoom
@onready var card_picker: CardPicker = %Picker
@onready var player: PlayerController = %PlayerController
func _ready():
id = State.rooms.ADULTHOOD
super._ready()
func _ready() -> void:
super._ready() # UwU, superclass _ready is not called by Godot automatically...
prints("volunteer_room.gd", "_ready()", self)
func get_ready() -> void:
await super.get_ready()
@ -15,9 +14,6 @@ func get_ready() -> void:
# Interactions can this way load their correct prompts
get_tree().call_group("interactables", "pull_save_state")
%TherapyVoluntaryInteractable.visible = not save_game.subway_burnout
%TherapyUniInteractable.visible = save_game.subway_burnout
pull_save_state(State.save_game)
Scenes.scene_finished.connect(_on_scene_finished)
@ -26,12 +22,16 @@ func get_ready() -> void:
card_board.closed.connect(save_room)
card_board.board_completed.connect(func():
save_game.childhood_board_complete = true
%DoorInteractable.show()
#%DoorInteractable.show()
)
# This MUST happen after the signal connection, or the door will remain locked
card_board.initialise_from_save(save_game)
%TherapyVoluntaryInteractable.visible = not save_game.subway_burnout
%TherapyUniInteractable.visible = save_game.subway_burnout
func start_room():
await super.start_room()

View File

@ -201,6 +201,7 @@ 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

View File

@ -1,5 +1,5 @@
class_name YouthRoom
extends RoomTemplate
extends RoomWithBoard
## Used by the room system when this room becomes active
# var is_active: bool = false # Reminder, do not uncomment, this field is inherited from RoomTemplate!
@ -7,10 +7,9 @@ extends RoomTemplate
@onready var card_picker: CardPicker = %Picker
@onready var ui: Control = %UI
func _ready() -> void:
id = State.rooms.YOUTH
func _ready() -> void:
super._ready() # UwU, superclass _ready is not called by Godot automatically...
prints("youth_room.gd", "_ready()", self)
func start_room():
await super.start_room()

View File

@ -418,6 +418,7 @@ func hide():
[node name="youth room" type="Node3D" groups=["serializable"]]
process_mode = 1
script = ExtResource("1_aitp0")
id = 1
[node name="logic" type="Node3D" parent="."]

View File

@ -1,27 +1,31 @@
class_name RoomTemplate extends Node3D
extends Node3D
## A Room is a location that can be played through, and it emits a proceed signal that holds
## the scene path to the next room (or null for credits roll)
class_name Room
var initialised: bool = false
var id: State.rooms = State.rooms.NULL
## Tells the main loop to proceed to the next scene
signal proceed(next_scene_path: String)
@export var id: State.rooms = State.rooms.NULL
@onready var scene_player : AnimationPlayer = %SceneAnimationPlayer
@onready var card_board : CardBoard # Optional Board, if present - set by the board in its own _ready()
var save_game : SaveGame:
get: return State.save_game
signal proceed(next_scene_path: String)
func _ready() -> void:
prints("room.gd", "_ready()", self)
assert(id != State.rooms.NULL, "Room " + str(self) + name + " has no proper ID set, it's still State.Rooms.NULL")
State.room = self
if not State.save_game:
push_warning("Room initialised without a SaveGame. Creating proxy save.")
State.save_game = ResourceLoader.load("res://dev-util/debug_save.tres")
var debug_save_path := "res://dev-util/debug_save.tres"
push_warning("Room initialised without a SaveGame. Loading DEBUG save.", debug_save_path)
State.save_game = ResourceLoader.load(debug_save_path)
if not Main.normal_boot:
push_warning("------- DEBUG MODE --------")
play.call_deferred()
_debug_mode()
func get_ready():
@ -74,3 +78,10 @@ func unload():
func prepare_scene_start(_scene_id: Scenes.id, _is_repeating: bool) -> void:
prints("PREPARE SCENE", _scene_id, _is_repeating)
await get_tree().process_frame # Dummy wait for LSP warning otherwise
## Override this (and call super._debug_mode()) if you want to initialize some data
## for running this Room standalone ("play current scene")
func _debug_mode() -> void:
push_warning("room.gd: DEBUG MODE - ", self)
await get_tree().create_timer(1).timeout
play()

View File

@ -0,0 +1,10 @@
extends Room
## A room with a CardBoard in it, has some special properties and initialization rules!
class_name RoomWithBoard
func _ready() -> void:
prints("room_with_board.gd", "_ready()", self)
super._ready() # UwU, superclass _ready is not called by Godot automatically...
var card_board : CardBoard # Optional Board, if present - set by the board in its own _ready()

View File

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

View File

@ -26,6 +26,15 @@ enum SelectionState {FREE,STICKIES,CARDS}
enum {NAVIGATE, ASSIGN, DRAG}
func _ready() -> void:
prints("card-board.gd:", "_ready()", self, "room:", State.room)
super._ready()
var board_room := State.room as RoomWithBoard
assert(board_room, "A CardBoard is placed in a Room that's not a RoomWithBoard")
board_room.card_board = self
func play():
check_board_completion()
await closed
@ -67,20 +76,6 @@ func _navigate_prev():
selection = candidates[index-1]
func _ready() -> void:
print("CardBoard.gd: %s._ready()" % self.name)
State.room.card_board = self
super._ready()
# HACK: Lets us debug more easily
if get_parent() == get_tree().root:
_debug_mode()
return
print("Board Ready!", self, "room", State.room)
State.room.card_board = self
## frame rate independent FIR smoothing filter used for small or dynamic card adjustments
func _smooth(current: Vector2, goal: Vector2, delta: float) -> Vector2:
@ -527,6 +522,7 @@ var _selection_candidates : Array[Draggable]:
# === Util ===
func _debug_mode() -> void:
super._debug_mode()
populate_board(["c_void", 'c_gifted', "p_wet", "p_joy"])
populate_board(["c_jui_jutsu", 'c_hit', "p_girly", "p_vent"])
populate_board(["c_comic_heroes", 'c_teasing', "p_agent_q", "p_good_intended"])

View File

@ -7,8 +7,23 @@ signal intro
@export var scene_id : Scenes.id
func _ready() -> void:
prints("story-playable.gd:", "_ready()", self, "room:", State.room)
super._ready()
State.settings_changed.connect(func(): story_array = story_array)
skip_control = %SkipControl
if skip_control is SkipControl and not Engine.is_editor_hint():
skip_control.skip.connect(skip_text)
# Clunky rebuild...
story_array = story_array
progress = progress
func _debug_mode():
Main.curtain.open()
super._debug_mode()
#TODO properly implement animation taking stage, as it should do, disabling processing when it does not have stage.
var max_lines: float = 0
@export var story_array: PackedStringArray:
@ -66,27 +81,6 @@ var all_text_revealed: bool = false:
var substring_sizes: Array[int]
func _ready() -> void:
print("StoryPlayable.gd: %s._ready()" % self.name)
super._ready()
State.settings_changed.connect(func(): story_array = story_array)
skip_control = %SkipControl
if skip_control is SkipControl and not Engine.is_editor_hint():
skip_control.skip.connect(skip_text)
# Clunky rebuild...
story_array = story_array
progress = progress
if get_parent() is not CanvasLayer:
push_warning("-------------- ", "DEBUG MODE ", self, " --------------")
hide()
await Main.curtain.open()
await appear()
await play()
push_warning("-------------- ", "FINISHED ", self, " --------------")
func _rebuild():
print("StoryPlayable.gd: %s._rebuild()" % self.name)
if is_node_ready():
@ -216,6 +210,7 @@ func skip_text():
elif name == "JuiJutsu":
_emit_thunder()
func _on_text_finished():
print("StoryPlayable.gd: %s._on_text_finished()" % self.name)
if not animation_complete:

View File

@ -1,8 +1,13 @@
extends Control
## An interactive sequence (mostly in UI space) that can be play()ed.
class_name Playable
func _ready() -> void:
prints("playable.gd", "_ready()", self)
hide()
# HACK: Lets us debug playables more easily
if get_parent() == get_tree().root: _debug_mode()
## Awaitable that encapsulates the core interaction with this Playable
@ -28,3 +33,11 @@ func vanish():
tween.tween_property(self, "modulate", TRANSPARENT_BLACK, 0.3)
await tween.finished
hide()
## Override this (and call super._debug_mode()) if you want to initialize some data
## for running this playable standalone ("play current scene")
func _debug_mode():
push_warning("playable.gd: DEBUG MODE - ", self)
await get_tree().create_timer(1).timeout
play()

View File

@ -232,7 +232,7 @@ textures/vram_compression/import_etc2_astc=true
lights_and_shadows/directional_shadow/size=2048
global_illumination/voxel_gi/quality=1
viewport/hdr_2d=true
anti_aliasing/quality/msaa_3d=1
anti_aliasing/quality/msaa_3d=2
environment/screen_space_reflection/roughness_quality=3
anti_aliasing/quality/use_taa=true
anti_aliasing/quality/use_debanding=true

View File

@ -5,7 +5,7 @@ class_name GlobalState
signal settings_changed
var _settings_initialized
var room: RoomTemplate
var room: Room
var save_game: SaveGame
signal environment_settings_changed

View File

@ -94,7 +94,7 @@ func _load_room(scene_path: String) -> void:
match state:
ResourceLoader.THREAD_LOAD_LOADED:
var next_scene := ResourceLoader.load_threaded_get(scene_path) as PackedScene
State.room = next_scene.instantiate() as RoomTemplate
State.room = next_scene.instantiate() as Room
get_tree().root.add_child(State.room)
await get_tree().process_frame
%Loading.stop()