fix: accidentally made story playable appear before awaiting prepare_scene

This commit is contained in:
tiger tiger tiger 2026-01-19 11:04:08 +01:00
parent e108250bf1
commit b9525ce3b0
7 changed files with 25 additions and 50 deletions

View File

@ -22,7 +22,8 @@ func get_ready() -> void:
#card_board.initialise_from_save(save_game)
card_board.board_completed.connect(func():
#TODO: hook in ending
save_room())
save_room()
)
func start_room():

View File

@ -10,12 +10,13 @@ extends RoomTemplate
func start_room():
super.start_room()
%UI.show()
# To start breathing etc.
%PlayerController.process_mode = Node.PROCESS_MODE_INHERIT
await Main.curtain.open()
# Skip intro if already loaded.
if not Scenes.is_sequence_repeating(Scenes.id.YOUTH_DRAVEN):
# Play intro scene directly (not triggered by CollectableUi)
await _play_intro_scene()
@ -31,9 +32,6 @@ func _play_intro_scene() -> void:
var intro: Interactable = $logic/CeilingInteractable
await intro.play_story()
Scenes.end_sequence(Scenes.id.YOUTH_DRAVEN)
func get_ready():
super.get_ready()
@ -43,11 +41,11 @@ func get_ready():
save_game.is_childhood_board_complete = true
save_room()
)
pull_save_state(State.save_game)
card_board.closed.connect(save_room)
card_picker.cards_picked.connect(card_board.populate_board)
ui.hide()
@ -89,12 +87,6 @@ func save_room():
save_game.mementos_complete = Scenes.completed_sequences
super.save_room()
func prepare_transition():
save_room()
$visuals/AnimationPlayer.play("conserve_performance")
await $visuals/AnimationPlayer.animation_finished
unload()
## Override to handle scene-specific preparation (chest reveal animation)
func prepare_scene_start(scene_id: Scenes.id, is_repeating: bool) -> void:
@ -106,8 +98,4 @@ func prepare_scene_start(scene_id: Scenes.id, is_repeating: bool) -> void:
func play_chest_reveal() -> void:
$visuals/AnimationPlayer.play("chest_reveal")
$visuals/SecondaryAnimation.play("chest_reveal")
await $visuals/SecondaryAnimation.animation_finished
func unload():
$visuals.queue_free()
await $visuals/AnimationPlayer.animation_finished

View File

@ -1,24 +1,10 @@
[gd_resource type="Resource" script_class="SaveGame" load_steps=3 format=3 uid="uid://bgplfqxa852wo"]
[gd_resource type="Resource" script_class="SaveGame" load_steps=2 format=3 uid="uid://bgplfqxa852wo"]
[ext_resource type="Script" uid="uid://d06gpwuxmkxkt" path="res://dev-util/savegame.gd" id="1_jr18u"]
[ext_resource type="Texture2D" uid="uid://bk5ja14r7r6i4" path="res://import/interface-elements/empty_save_slot.png" id="2_b2tdf"]
[resource]
script = ExtResource("1_jr18u")
filepath = "DEBUG"
unique_save_name = "DEBUG"
current_room = 0
mementos_complete = 1
board_state = {
"cards": {},
"randoms": [],
"stickies": {}
}
is_childhood_board_complete = false
thumbnail = ExtResource("2_b2tdf")
last_saved = 1756993270
is_valid = true
is_demo = false
is_empty = true
save_manually = false
metadata/_custom_type_script = "uid://d06gpwuxmkxkt"

View File

@ -73,4 +73,5 @@ func unload():
## Called before a scene starts to allow room-specific preparation (e.g., animations)
## Override in subclasses to add custom scene preparation logic
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

View File

@ -172,7 +172,7 @@ func collect_memento() -> void:
is_collected = true
# Signal that a scene is starting (for music, etc.)
Scenes.begin_sequence(scene)
Scenes.begin_sequence(scene, false)
# Hide mouse and collapse other interactables BEFORE showing canvas
get_tree().call_group("interactables", "collapse")
@ -196,7 +196,7 @@ func collect_memento() -> void:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
# Signal that the scene is finished
Scenes.end_sequence(scene)
Scenes.end_sequence(scene, false)
if was_skipped:
scene_skipped.emit(-1)

View File

@ -31,10 +31,10 @@ func _ready() -> void:
view.scale = Vector3.ZERO
frame.modulate.a = 0.0
Scenes.player_enable.connect(_player_active) # TODO: do I have to clean this up?
_load_interaction.call_deferred()
_pull_save_state.call_deferred()
func _load_interaction() -> void:
func _pull_save_state() -> void:
if interaction:
playable = interaction.instantiate() as Control
canvas_layer.add_child(playable)
@ -107,13 +107,13 @@ func play_story() -> void:
var repeat := collected
collected = true
canvas_layer.show()
await playable.appear()
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)
Scenes.begin_sequence(playable.scene_id)
canvas_layer.show()
await playable.appear()
# Play the story
await playable.play()
@ -123,13 +123,12 @@ func play_story() -> void:
var picker := State.room.get_node("%Picker") as CardPicker
await picker.pick_cards(playable.scene_id)
Scenes.end_sequence(playable.scene_id) # todo: maybe later?
# Hide the CanvasLayer when done
await playable.vanish()
playable.vanish()
canvas_layer.hide()
Scenes.player_enable.emit(true)
Scenes.end_sequence(playable.scene_id, repeat) # todo: maybe later?
expand()

View File

@ -36,8 +36,8 @@ func _ready() -> void:
pass
# Called by CollectableUi when it starts playing a scene
func begin_sequence(scene_id: id) -> void:
print_debug(">>> Scenes.begin_sequence(%s)" % id.keys()[scene_id])
func begin_sequence(scene_id: id, repeat: bool) -> void:
print_debug(">>> Scenes.begin_sequence(%s)" % str(id))
# Disable player movement during cutscenes
player_enable.emit(false)
@ -46,14 +46,14 @@ func begin_sequence(scene_id: id) -> void:
started_sequences = started_sequences | (1 << scene_id)
# Emit signal for other systems (music, animations, etc.)
scene_starting.emit(scene_id, is_sequence_repeating(scene_id))
scene_starting.emit(scene_id, repeat)
# Called by CollectableUi when it finishes playing a scene
func end_sequence(scene_id: id) -> void:
print_debug(">>> Scenes.end_sequence(%s)" % id.keys()[scene_id])
func end_sequence(scene_id: id, repeat: bool) -> void:
print_debug(">>> Scenes.end_sequence(%s)" % str(id))
# Emit signal before clearing state
scene_finished.emit(scene_id, is_sequence_repeating(scene_id))
scene_finished.emit(scene_id, repeat)
# Mark as completed
completed_sequences = completed_sequences | (1 << scene_id)