diff --git a/src/base-environments/youth_room/youth_room.gd b/src/base-environments/youth_room/youth_room.gd index f0f547f..cad7bde 100644 --- a/src/base-environments/youth_room/youth_room.gd +++ b/src/base-environments/youth_room/youth_room.gd @@ -35,11 +35,15 @@ func _play_intro_scene() -> void: func get_ready(): await get_tree().process_frame - pull_save_state(State.save_game) - card_board.board_completed.connect(func(): - save_game.is_childhood_board_complete = true - save_room()) + %DoorInteractable.show() + if not save_game.is_childhood_board_complete: + save_game.is_childhood_board_complete = true + save_room() + ) + + + pull_save_state(State.save_game) card_board.closed.connect(save_room) diff --git a/src/base-environments/youth_room/youth_room.tscn b/src/base-environments/youth_room/youth_room.tscn index afb1642..f63b2a7 100644 --- a/src/base-environments/youth_room/youth_room.tscn +++ b/src/base-environments/youth_room/youth_room.tscn @@ -1907,7 +1907,9 @@ transform = Transform3D(1, 0, 2.9802322e-08, 0, 1, 0, -2.9802322e-08, 0, 1, -0.0 transform = Transform3D(0.99999976, 0, 0, 0, 1, 0, 0, 0, 0.99999976, 0.10009599, -0.040801764, -0.19775379) [node name="DoorInteractable" parent="logic" instance=ExtResource("22_ks23q")] +unique_name_in_owner = true transform = Transform3D(-0.9999984, 0, 8.7422585e-08, 0, 1, 0, -8.7422585e-08, 0, -0.9999984, 0.42437345, 0.9173807, -0.95442796) +visible = false interaction = ExtResource("11_5bsh1") billboard = false diff --git a/src/logic-scenes/board/card-board.gd b/src/logic-scenes/board/card-board.gd index 133b260..fefb744 100644 --- a/src/logic-scenes/board/card-board.gd +++ b/src/logic-scenes/board/card-board.gd @@ -27,7 +27,7 @@ enum {NAVIGATE, ASSIGN, DRAG} func play(): - _check_completion() # check completion one extra time on on enter + check_board_completion() await closed _finalize_board_state() @@ -104,7 +104,7 @@ func _process(delta: float): func _check_completion() -> void: if is_board_complete(): board_was_completed = true - give_lore_feedback() + board_completed.emit() ## Finalizes board state before closing (ends drags, cleans up transitions) @@ -114,6 +114,7 @@ func _finalize_board_state() -> void: _end_drag(selection) for item in notes: item.is_dragged = false + for item in cards: item.is_dragged = false @@ -507,10 +508,11 @@ func initialise_from_save(savegame: SaveGame) -> void: sticky.position = position + size / 2.0 push_warning(" Sticky '%s' - no saved position, using center" % sticky.name) - print_debug("CardBoard: Load complete!") # Re-sort by positions for correct z-ordering - _sort_by_positions() + _sort_by_positions() + print_debug("CardBoard: Load complete!") + _check_completion() # === Computed Properties === diff --git a/src/logic-scenes/board/physics-board.tscn b/src/logic-scenes/board/physics-board.tscn index b30624c..d19e72b 100644 --- a/src/logic-scenes/board/physics-board.tscn +++ b/src/logic-scenes/board/physics-board.tscn @@ -147,8 +147,8 @@ _data = { } [node name="board" type="PanelContainer"] -z_index = -10 material = SubResource("ShaderMaterial_ttqei") +clip_contents = true anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 diff --git a/src/logic-scenes/card_burner/card_burner.gd b/src/logic-scenes/card_burner/card_burner.gd index 4d0ac3e..55af57f 100644 --- a/src/logic-scenes/card_burner/card_burner.gd +++ b/src/logic-scenes/card_burner/card_burner.gd @@ -18,7 +18,8 @@ func _ready(): func vanish(): super.vanish() await Main.curtain.black() # Go straight to loading screen - await Main.curtain.close() # Go straight to loading screen + Main.load_subway() + ## Main play coroutine - simple linear flow for burning a card func play() -> void: diff --git a/src/logic-scenes/interactable/interactable.gd b/src/logic-scenes/interactable/interactable.gd index d6dfd92..812e7f7 100644 --- a/src/logic-scenes/interactable/interactable.gd +++ b/src/logic-scenes/interactable/interactable.gd @@ -15,6 +15,7 @@ var playable : Playable = null @export var billboard : bool = true var active : bool = false + var shown : bool = false var hover : bool = false var collected : bool = false: diff --git a/src/logic-scenes/player_controller/player_controller.gd b/src/logic-scenes/player_controller/player_controller.gd index 8285c6c..e45f1f9 100644 --- a/src/logic-scenes/player_controller/player_controller.gd +++ b/src/logic-scenes/player_controller/player_controller.gd @@ -177,8 +177,9 @@ var has_entered:bool = false: delay_passed = false var delay_passed:bool = false -func _on_ray_entered(_area): +func _on_ray_entered(_area : Area3D): var parent := _area.get_parent() as Interactable + if not parent.visible: return assert(parent != null, "Ray entered non-interactable area!") printt("ray entered", parent.name, parent) parent.hover = true @@ -188,6 +189,7 @@ func _on_ray_entered(_area): func _on_ray_exited(_area): var parent := _area.get_parent() as Interactable + if not parent.visible: return printt("ray exited", parent.name, parent) parent.hover = false # Switch back to default cursor when not hovering diff --git a/src/singletons/main/main.gd b/src/singletons/main/main.gd index cdeb530..f0a5a13 100644 --- a/src/singletons/main/main.gd +++ b/src/singletons/main/main.gd @@ -74,7 +74,17 @@ func start_game(save: SaveGame) -> void: await _load_room(room_path) await State.room.play() -func _load_room(next_path: String) -> bool: + +func load_subway(): + await curtain.close() + if State.room: + State.room.queue_free() + await _load_room(transition_room_path) + await State.room.play() + + + +func _load_room(scene_path: String) -> void: await curtain.close() %Loading.play() @@ -82,10 +92,10 @@ func _load_room(next_path: String) -> bool: State.room.unload() State.room = null - ResourceLoader.load_threaded_request(next_path, "PackedScene", true) + ResourceLoader.load_threaded_request(scene_path, "PackedScene", true) while true: await get_tree().process_frame - var state := ResourceLoader.load_threaded_get_status(next_path) + var state := ResourceLoader.load_threaded_get_status(scene_path) match state: ResourceLoader.THREAD_LOAD_LOADED: var next_scene := ResourceLoader.load_threaded_get(youth_room_path) as PackedScene @@ -94,8 +104,9 @@ func _load_room(next_path: String) -> bool: await get_tree().process_frame await State.room.get_ready() %Loading.stop() - return true + return ResourceLoader.THREAD_LOAD_FAILED: push_error("Failed to load room.") break - return false + + assert(false, "Couldn't load room %s" % scene_path)