diff --git a/src/base-environments/youth_room/interactive_sprite.gd b/src/base-environments/youth_room/interactive_sprite.gd index db2eede..97f4c78 100644 --- a/src/base-environments/youth_room/interactive_sprite.gd +++ b/src/base-environments/youth_room/interactive_sprite.gd @@ -1,5 +1,7 @@ class_name InteractiveSprite extends Area3D +@export var interaction_ui: PackedScene = null + @onready var pass_to_actor: = $UiWrapper/UiSprite/SubViewport/CollectableUi @onready var wrapper := $UiWrapper @onready var ui: CollectableUi = $UiWrapper/UiSprite/SubViewport.get_child(0) @@ -30,19 +32,18 @@ var has_mouse: bool = false # Called when the node enters the scene tree for the first time. func _ready(): - mouse_entered.connect(_on_mouse_entered) - - # Wire up the CollectableUi with the CanvasLayer for story playback - if ui: - ui.canvas_layer = %CanvasLayer - # Find and wire the StoryPlayable if not already set - if ui.story_playable == null: - for child in %CanvasLayer.get_children(): - if child is StoryPlayable: - ui.story_playable = child - break - # Connect playback_finished to restore player control - ui.playback_finished.connect(_on_playback_finished) + if interaction_ui: + %CanvasLayer.add_child(interaction_ui.instantiate()) + + ui.canvas_layer = %CanvasLayer + # Find and wire the StoryPlayable if not already set + if ui.story_playable == null: + for child in %CanvasLayer.get_children(): + if child is StoryPlayable: + ui.story_playable = child + break + # Connect playback_finished to restore player control + ui.playback_finished.connect(_on_playback_finished) func _on_mouse_entered(): if not Scenes.is_playing: diff --git a/src/base-environments/youth_room/youth_room.gd b/src/base-environments/youth_room/youth_room.gd index f55897d..387f5ba 100644 --- a/src/base-environments/youth_room/youth_room.gd +++ b/src/base-environments/youth_room/youth_room.gd @@ -13,13 +13,13 @@ extends RoomTemplate func start_room(): %UI.show() $logic/PlayerController.process_mode = Node.PROCESS_MODE_INHERIT - + if not Scenes.is_sequence_repeating(Scenes.id.YOUTH_DRAEVEN): # Play intro scene directly (not triggered by CollectableUi) await _play_intro_scene() else: %LightAnimation.lights_on() - + # Give player control after intro (or immediately if repeating) %PlayerController.has_stage = true @@ -27,16 +27,16 @@ func start_room(): func _play_intro_scene() -> void: # The intro scene is auto-played, not triggered by CollectableUi var intro_playable: StoryPlayable = $logic/ScenePlayer/draven - + Scenes.begin_sequence(Scenes.id.YOUTH_DRAEVEN) - + Input.mouse_mode = Input.MOUSE_MODE_HIDDEN - + # Play the story (StoryPlayable handles its own visibility via animations) await intro_playable.play() - + Input.mouse_mode = Input.MOUSE_MODE_VISIBLE - + Scenes.end_sequence(Scenes.id.YOUTH_DRAEVEN) diff --git a/src/base-environments/youth_room/youth_room.tscn b/src/base-environments/youth_room/youth_room.tscn index a4f6191..0eda798 100644 --- a/src/base-environments/youth_room/youth_room.tscn +++ b/src/base-environments/youth_room/youth_room.tscn @@ -1893,33 +1893,24 @@ omni_range = 16.8518 [node name="MaskMemento" parent="logic" instance=ExtResource("30_ypa88")] transform = Transform3D(-0.8630245, 0, 0.5051597, 0, 1, 0, -0.5051597, 0, -0.8630245, 0.0754588, 0.948372, 2.42068) - -[node name="childhood" parent="logic/MaskMemento/CanvasLayer" index="0" instance=ExtResource("12_viwxf")] +interaction_ui = ExtResource("12_viwxf") [node name="ClothesMemento" parent="logic" instance=ExtResource("30_ypa88")] transform = Transform3D(0.8604294, 0, -0.5095667, 0, 1, 0, 0.5095667, 0, 0.8604294, 1.3658599, 1.17096, -0.6365988) - -[node name="JuiJutsu" parent="logic/ClothesMemento/CanvasLayer" index="0" instance=ExtResource("12_x3dlb")] +interaction_ui = ExtResource("12_x3dlb") [node name="ComicMemento" parent="logic" instance=ExtResource("30_ypa88")] transform = Transform3D(0.9699434, 0, 0.24332686, 0, 1, 0, -0.24332686, 0, 0.9699434, 2.91664, 0.595014, -0.75655603) - -[node name="voice_training" parent="logic/ComicMemento/CanvasLayer" index="0" instance=ExtResource("13_v3447")] -story_array = [] -paragraph_lengths = [1] +interaction_ui = ExtResource("13_v3447") [node name="CeilingMemento" parent="logic" instance=ExtResource("30_ypa88")] transform = Transform3D(0.71489924, 0, 0.6992255, 0, 1, 0, -0.6992255, 0, 0.71489924, -0.13478619, 2.0720484, -0.42032808) - -[node name="draven" parent="logic/CeilingMemento/CanvasLayer" index="0" instance=ExtResource("19_d3c7p")] -story_array = [] -paragraph_lengths = [1] +interaction_ui = ExtResource("19_d3c7p") [node name="MindBoard" parent="logic" instance=ExtResource("30_ypa88")] unique_name_in_owner = true transform = Transform3D(-4.3711374e-08, 0, 0.9999984, 0, 1, 0, -0.9999984, 0, -4.3711374e-08, -0.907206, 1.17661, 1.74337) - -[node name="board" parent="logic/MindBoard/CanvasLayer" index="0" instance=ExtResource("4_gyjxx")] +interaction_ui = ExtResource("4_gyjxx") [node name="Door" parent="logic" instance=ExtResource("30_ypa88")] unique_name_in_owner = true @@ -2183,10 +2174,3 @@ data = ExtResource("40_ea6x8") [connection signal="body_exited" from="logic/Bed and Ladders/reset_failover" to="logic/PlayerController" method="_on_bed_exit"] [connection signal="pressed" from="logic/UI/ending_button" to="logic/UI/ending_button" method="hide"] [connection signal="pressed" from="logic/UI/ending_button" to="logic/UI/ending" method="show"] - -[editable path="logic/MaskMemento"] -[editable path="logic/ClothesMemento"] -[editable path="logic/ComicMemento"] -[editable path="logic/CeilingMemento"] -[editable path="logic/MindBoard"] -[editable path="logic/Door"] diff --git a/src/logic-scenes/collectable/collectable_ui.gd b/src/logic-scenes/collectable/collectable_ui.gd index 7f77290..0153d17 100644 --- a/src/logic-scenes/collectable/collectable_ui.gd +++ b/src/logic-scenes/collectable/collectable_ui.gd @@ -1,13 +1,11 @@ extends CenterContainer class_name CollectableUi +@onready var canvas_layer: CanvasLayer = %CanvasLayer + ## The StoryPlayable to play when this memento is collected. ## Auto-discovered from the owner's %CanvasLayer, or can be set manually. -@export var story_playable: StoryPlayable - -## Reference to the CanvasLayer containing the story_playable. -## Auto-discovered in _ready() if not set. -var canvas_layer: CanvasLayer +var story_playable: StoryPlayable @export var has_stage: bool = false: set(focused): @@ -154,21 +152,9 @@ func _ready() -> void: %CollectButton.pressed.connect(collect_memento) ##TODO: add functions for remaining buttons - # Auto-discover story_playable and canvas_layer from scene hierarchy - _discover_story_playable() - update_state() -## Ensure canvas_layer is set if story_playable was set via export. -## InteractiveSprite._ready() handles the main wiring for inherited scenes. -func _discover_story_playable() -> void: - if story_playable != null and canvas_layer == null: - # story_playable set via export, find its parent CanvasLayer - var parent = story_playable.get_parent() - if parent is CanvasLayer: - canvas_layer = parent - func _on_context_updated() -> void: %SkipButton.visible = State.allow_skipping %SummaryButton.visible = State.provide_summaries @@ -252,15 +238,13 @@ func collect_memento() -> void: Input.mouse_mode = Input.MOUSE_MODE_HIDDEN # Show the CanvasLayer so the story is visible full-screen - if canvas_layer: - canvas_layer.show() + canvas_layer.show() # Play the story await story_playable.play() # Hide the CanvasLayer when done - if canvas_layer: - canvas_layer.hide() + canvas_layer.hide() # Restore mouse to captured mode (player controller will be given back control) Input.mouse_mode = Input.MOUSE_MODE_CAPTURED diff --git a/src/logic-scenes/interactive_sprite/interactive_sprite.tscn b/src/logic-scenes/interactive_sprite/interactive_sprite.tscn index 92b291d..e4d1ce5 100644 --- a/src/logic-scenes/interactive_sprite/interactive_sprite.tscn +++ b/src/logic-scenes/interactive_sprite/interactive_sprite.tscn @@ -12,8 +12,8 @@ [sub_resource type="ViewportTexture" id="ViewportTexture_uwc8q"] viewport_path = NodePath("UiWrapper/UiSprite/SubViewport") -[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_v8gd7"] -height = 1.5 +[sub_resource type="BoxShape3D" id="BoxShape3D_uwc8q"] +size = Vector3(1, 1, 0.14892578) [node name="Memento" type="Area3D" groups=["interactables"]] transform = Transform3D(0.9999994, 0, 0, 0, 1, 0, 0, 0, 0.9999994, 0, 0, 0) @@ -59,8 +59,8 @@ region_enabled = true region_rect = Rect2(735.5, 0, 995.5, 1024) [node name="HoverDetect" type="CollisionShape3D" parent="."] -transform = Transform3D(-4.3711356e-08, -0.9999997, 0, 0.9999993, -4.3711374e-08, 0, 0, 0, 0.99999976, 0, 0, 0) -shape = SubResource("CapsuleShape3D_v8gd7") +transform = Transform3D(-4.3711356e-08, -0.9999997, 0, 0.9999993, -4.3711374e-08, 0, 0, 0, 0.99999976, 0, 0, 0.060790993) +shape = SubResource("BoxShape3D_uwc8q") [node name="CanvasLayer" type="CanvasLayer" parent="."] unique_name_in_owner = true