refactor room and id handling

This commit is contained in:
betalars 2026-06-03 14:40:20 +02:00
parent 8c10640eb5
commit 8bdd48a365
10 changed files with 47 additions and 52 deletions

View File

@ -2,7 +2,7 @@ extends Room
class_name SubwaySequence
func _ready() -> void:
id = State.rooms.TRANSITION
id = Room.ids.TRANSITION
super._ready()
func get_ready_async() -> void:

View File

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

View File

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

View File

@ -8,7 +8,15 @@ class_name Room
## Tells the main loop to proceed to the next scene
signal proceed(next_scene_path: String)
@export var id: State.rooms = State.rooms.NULL
enum ids {
NULL,
YOUTH,
TRANSITION,
ADULTHOOD,
ENDING
}
@export var id: Room.ids = Room.ids.NULL
@onready var player: PlayerController = %PlayerController
@onready var scene_player : AnimationPlayer = %SceneAnimationPlayer
@ -19,10 +27,10 @@ var save_game : SaveGame:
func _ready() -> void:
assert(id != State.rooms.NULL, "Room " + str(self) + name + " has no proper ID set, it's still State.Rooms.NULL")
assert(id != Room.ids.NULL, "Room " + str(self) + name + " has no proper ID set, it's still Room.ids.NULL")
prints("room.gd", "_ready()", self)
State.room = self
State.active_room = self
if not save_game:
var debug_save_path := "res://dev-util/debug_save.tres"

View File

@ -7,7 +7,7 @@ class_name SaveGame extends Resource
# === Data Fields ===
@export var unique_save_name: String = ""
@export var current_room: State.rooms = State.rooms.NULL
@export var current_room: Room.ids = Room.ids.NULL
@export_flags("Intro", "Childhood", "Voice Training", "Jui Jutsu") var mementos_complete: int = 0
@export_flags_2d_physics var sequences_enabled: int = 63
@ -134,14 +134,14 @@ func save_to_file(screen_shot: Texture2D) -> void:
push_warning("SaveGame: DEBUG save skipped (intentional).")
return
assert(State.room, "Trying to save while not in a room.")
assert(State.room.id != State.rooms.NULL, "Trying to save in a room that's not correctly initialized.")
assert(State.active_room, "Trying to save while not in a room.")
assert(State.active_room.id != Room.ids.NULL, "Trying to save in a room that's not correctly initialized.")
# Save game can track the room it is in by itself;
# and we should never save before having successfully entered a room.
current_room = State.room.id
current_room = State.active_room.id
prints("-----------", "SAVE POINT", State.room, "-----------")
prints("-----------", "SAVE POINT", State.active_room, "-----------")
print("SaveGame: Saving to file: %s" % file_name)
# Capture current state

View File

@ -87,7 +87,7 @@ func _on_text_updated():
label.text = text
if from_youth:
if State.current_room == State.rooms.YOUTH or State.onready_room == State.rooms.YOUTH:
if State.get_room_id() <= Room.ids.YOUTH:
background_sprite.animation = "youth"
else:
background_sprite.animation = "aged"

View File

@ -110,7 +110,7 @@ func play_story() -> void:
Scenes.begin_sequence(playable.scene_id, repeat)
# Allow room to prepare for scene (e.g., play animations)
await State.room.prepare_scene_start(playable.scene_id, repeat)
await State.active_room.prepare_scene_start(playable.scene_id, repeat)
canvas_layer.show()
await playable.appear()
@ -120,7 +120,7 @@ func play_story() -> void:
# Pick the cards if not already picked
if not repeat:
var picker := State.room.get_node("%Picker") as CardPicker
var picker := State.active_room.get_node("%Picker") as CardPicker
await picker.pick_cards(playable.scene_id)

View File

@ -8,7 +8,7 @@ signal intro
@export var scene_id : Scenes.id
func _ready() -> void:
prints("story-playable.gd:", "_ready()", self, "room:", State.room)
prints("story-playable.gd:", "_ready()", self, "room:", State.active_room)
super._ready()
State.settings_changed.connect(func(): story_array = story_array)
skip_control = %SkipControl
@ -231,4 +231,4 @@ func _on_text_finished():
func _emit_thunder() -> void:
if State.room is YouthRoom: (State.room as YouthRoom).play_thunder()
if State.active_room is YouthRoom: (State.active_room as YouthRoom).play_thunder()

View File

@ -5,8 +5,7 @@ class_name GlobalState
signal settings_changed
var _settings_initialized
var room: Room
var save_game: SaveGame
var active_room: Room
signal environment_settings_changed
# FIXME find a better way to switch fonts and maybe emit the theme_changed signal!
@ -269,30 +268,18 @@ func queue_for_stage(target: Object, index: int = 1):
#endregion
#region play state
#region utility functions
enum rooms {
NULL,
YOUTH,
TRANSITION,
ADULTHOOD,
ENDING
}
enum sequences {
DRAVEN,
CHILDHOOD,
VOICE,
JUI_JUTSU,
TRANS,
AUTISM,
UNI_START,
VOLUNTARY,
UNI_CONTINUE,
UNI_ALT,
THERAPY,
BURNOUT
}
var current_room: rooms = rooms.NULL
var onready_room: rooms = rooms.NULL
func get_room_id(if_game_active = false) -> Room.ids:
var id: Room.ids
if active_room:
id = active_room.id
elif save_game:
id = save_game.current_room
else:
id = Room.ids.NULL
if if_game_active and not Main.is_game_active():
return Room.ids.NULL
return id

View File

@ -74,7 +74,7 @@ func rebuild():
"AM" if date_time["hour"] < 12 else "PM"]
var time_label := Label.new()
time_label.text = localised_date_time if not save.current_room == State.rooms.NULL else "Start new game"
time_label.text = localised_date_time if not save.current_room == Room.ids.NULL else "Start new game"
var info:= VBoxContainer.new()
info.size_flags_horizontal = Control.SIZE_EXPAND_FILL
@ -87,18 +87,18 @@ func rebuild():
var room:= Label.new()
room.theme_type_variation = "HeaderMedium"
match save.current_room:
State.rooms.NULL:
Room.ids.NULL:
room.text = "Empty Slot"
State.rooms.YOUTH:
Room.ids.YOUTH:
if save.mementos_complete > 0:
room.text = "Youth Room"
else:
room.text = "Intro Sequence"
State.rooms.TRANSITION:
Room.ids.TRANSITION:
room.text = "Transitioning to Adulthood"
State.rooms.ADULTHOOD:
Room.ids.ADULTHOOD:
room.text = "Exploring Adulthood"
State.rooms.ENDING:
Room.ids.ENDING:
room.text = "Ending"
var state: = Label.new()