From 8bdd48a365ffce0c6df238cbea46523941142b50 Mon Sep 17 00:00:00 2001 From: betalars Date: Wed, 3 Jun 2026 14:40:20 +0200 Subject: [PATCH] refactor room and id handling --- .../transition/code/subway_sequence.gd | 2 +- .../transition/stations/burnout_station.gd | 4 +- .../transition/stations/therapy_station.gd | 4 +- src/dev-util/room.gd | 14 ++++-- src/dev-util/savegame.gd | 10 ++--- src/logic-scenes/board/sticky-note.gd | 2 +- src/logic-scenes/interactable/interactable.gd | 4 +- .../luna/playables/story_playable.gd | 4 +- src/singletons/global_state.gd | 43 +++++++------------ src/ui/menu_main/save_game_display.gd | 12 +++--- 10 files changed, 47 insertions(+), 52 deletions(-) diff --git a/src/base-environments/transition/code/subway_sequence.gd b/src/base-environments/transition/code/subway_sequence.gd index f44cc1e2..2146a3fd 100644 --- a/src/base-environments/transition/code/subway_sequence.gd +++ b/src/base-environments/transition/code/subway_sequence.gd @@ -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: diff --git a/src/base-environments/transition/stations/burnout_station.gd b/src/base-environments/transition/stations/burnout_station.gd index 9dd6428e..b38cf7b6 100644 --- a/src/base-environments/transition/stations/burnout_station.gd +++ b/src/base-environments/transition/stations/burnout_station.gd @@ -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)) diff --git a/src/base-environments/transition/stations/therapy_station.gd b/src/base-environments/transition/stations/therapy_station.gd index a387df1a..cbd54133 100644 --- a/src/base-environments/transition/stations/therapy_station.gd +++ b/src/base-environments/transition/stations/therapy_station.gd @@ -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)) diff --git a/src/dev-util/room.gd b/src/dev-util/room.gd index 5159fee7..7631327a 100644 --- a/src/dev-util/room.gd +++ b/src/dev-util/room.gd @@ -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" diff --git a/src/dev-util/savegame.gd b/src/dev-util/savegame.gd index 01902b64..5ec3f7b9 100644 --- a/src/dev-util/savegame.gd +++ b/src/dev-util/savegame.gd @@ -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 diff --git a/src/logic-scenes/board/sticky-note.gd b/src/logic-scenes/board/sticky-note.gd index 3c85f9ee..aaa0748a 100644 --- a/src/logic-scenes/board/sticky-note.gd +++ b/src/logic-scenes/board/sticky-note.gd @@ -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" diff --git a/src/logic-scenes/interactable/interactable.gd b/src/logic-scenes/interactable/interactable.gd index ac6f9c38..4a14ef65 100644 --- a/src/logic-scenes/interactable/interactable.gd +++ b/src/logic-scenes/interactable/interactable.gd @@ -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) diff --git a/src/logic-scenes/luna/playables/story_playable.gd b/src/logic-scenes/luna/playables/story_playable.gd index ac6b4b09..e71bbac9 100644 --- a/src/logic-scenes/luna/playables/story_playable.gd +++ b/src/logic-scenes/luna/playables/story_playable.gd @@ -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() diff --git a/src/singletons/global_state.gd b/src/singletons/global_state.gd index c3157145..c4cfdbf8 100644 --- a/src/singletons/global_state.gd +++ b/src/singletons/global_state.gd @@ -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 diff --git a/src/ui/menu_main/save_game_display.gd b/src/ui/menu_main/save_game_display.gd index d3b5a61f..b5536b77 100644 --- a/src/ui/menu_main/save_game_display.gd +++ b/src/ui/menu_main/save_game_display.gd @@ -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()