diff --git a/src/base-environments/youth_room/room_handle.gd b/src/base-environments/youth_room/room_handle.gd index 8822c0af..829a90f8 100644 --- a/src/base-environments/youth_room/room_handle.gd +++ b/src/base-environments/youth_room/room_handle.gd @@ -1,39 +1,28 @@ -extends Node3D +extends RoomTemplate -# Referencing the current State of the Scene. -enum Modes { - FREEZE, - WALKING, - COLLECTING, - LISTENING, - SORTING -} - -signal freeze -signal unfreeze signal ini_room -signal resume_room -var current_mode: int = Modes.FREEZE: - set(new_mode): - if not current_mode == new_mode: - current_mode = _update_scene(new_mode) +@onready var mask_memento: Collectable_Ui = %MaskMemento.ui +@onready var clothes_memento: Collectable_Ui = %ClothesMemento.ui +@onready var comic_memento: Collectable_Ui = %ComicMemento.ui +@onready var ceiling_memento: Collectable_Ui = %CeilingMemento.ui +@onready var board_trigger: InteractiveSprite = %MindBoard +@onready var door_trigger: InteractiveSprite = %DoorTrigger +@onready var card_board: CardBoard = %Board +@onready var card_picker: CardPicker = %Picker -func start(): - $logic/PlayerController.process_mode = Node.PROCESS_MODE_INHERIT - emit_signal("ini_room") - current_mode = Modes.WALKING +func start(save: SaveGame = SaveGame.new()): + save_game = save -func _update_scene(new_mode) -> int: - if current_mode == Modes.FREEZE: - emit_signal("freeze") - elif new_mode == Modes.FREEZE: - emit_signal("freeze") + # Setting Memento user interface elemnts as collected based on the savegame. + mask_memento.collected = save_game.mementos_complete && 1 >> Scenes.id.YOUTH_CHILDHOOD > 0 + clothes_memento.collected = save_game.mementos_complete && 1 >> Scenes.id.YOUTH_JUI_JUTSU > 0 + comic_memento.collected = save_game.mementos_complete && 1 >> Scenes.id.YOUTH_VOICE_TRAINING > 0 + ceiling_memento.collected = save_game.mementos_complete && 1 >> Scenes.id.YOUTH_DRAEVEN > 0 + + $logic/PlayerController.process_mode = Node.PROCESS_MODE_INHERIT + ini_room.emit() - return new_mode - -func is_self(node: Node) -> bool: - return self == node func get_ready(): self.show() @@ -46,4 +35,11 @@ func _ready(): if get_parent() == get_tree().root: get_ready() start() - + card_picker.cards_picked.connect(card_board.populate_board) + +func pull_save_state(save: SaveGame) -> void: + save.board_state = card_board.get_save_dict() + +func _on_scene_finished(id: int): + save_game.mementos_complete &= 1 << id + save_room() diff --git a/src/base-environments/youth_room/youth_room.tscn b/src/base-environments/youth_room/youth_room.tscn index 6fc55b4b..fb3ced52 100644 --- a/src/base-environments/youth_room/youth_room.tscn +++ b/src/base-environments/youth_room/youth_room.tscn @@ -1587,19 +1587,19 @@ func _on_ini_room(): pass func on_childhood_done(): - get_tree().call_group(\"animation_player\", \"scene_finished\", Scenes.id.YOUTH_CHILDHOOD, is_repeating) + get_tree().call_group(\"scene_actors\", \"scene_finished\", Scenes.id.YOUTH_CHILDHOOD, is_repeating) $childhood.hide() func on_voice_training_done(): - get_tree().call_group(\"animation_player\", \"scene_finished\", Scenes.id.YOUTH_VOICE_TRAINING, is_repeating) + get_tree().call_group(\"scene_actors\", \"scene_finished\", Scenes.id.YOUTH_VOICE_TRAINING, is_repeating) $\"Voice Training\".hide() func on_jui_jutsu_done(): - get_tree().call_group(\"animation_player\", \"scene_finished\", Scenes.id.YOUTH_JUI_JUTSU, is_repeating) + get_tree().call_group(\"scene_actors\", \"scene_finished\", Scenes.id.YOUTH_JUI_JUTSU, is_repeating) $jui_jutsu.hide() func on_draeven_done(): - get_tree().call_group(\"animation_player\", \"scene_finished\", Scenes.id.YOUTH_DRAEVEN, is_repeating) + get_tree().call_group(\"scene_actors\", \"scene_finished\", Scenes.id.YOUTH_DRAEVEN, is_repeating) $draeven.hide() queue(\"intro\") @@ -1784,26 +1784,26 @@ turbulence_noise_strength = 0.1 size = Vector3(1.81843, 2.13395, 0.0774798) [sub_resource type="ViewportTexture" id="ViewportTexture_3mgqk"] -viewport_path = NodePath("logic/Mask-interaction/UiWrapper/UiSprite/SubViewport") +viewport_path = NodePath("logic/MaskMemento/UiWrapper/UiSprite/SubViewport") [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_72g2i"] radius = 0.342951 height = 1.08154 [sub_resource type="ViewportTexture" id="ViewportTexture_7hana"] -viewport_path = NodePath("logic/clothes_interaction/UiWrapper/UiSprite/SubViewport") +viewport_path = NodePath("logic/ClothesMemento/UiWrapper/UiSprite/SubViewport") [sub_resource type="ViewportTexture" id="ViewportTexture_nn6wl"] -viewport_path = NodePath("logic/Comic-interaction/UiWrapper/UiSprite/SubViewport") +viewport_path = NodePath("logic/ComicMemento/UiWrapper/UiSprite/SubViewport") [sub_resource type="ViewportTexture" id="ViewportTexture_8rywf"] -viewport_path = NodePath("logic/Draeven-interaction/UiWrapper/UiSprite/SubViewport") +viewport_path = NodePath("logic/CeilingMemento/UiWrapper/UiSprite/SubViewport") [sub_resource type="SphereShape3D" id="SphereShape3D_c7buh"] radius = 0.469631 [sub_resource type="ViewportTexture" id="ViewportTexture_hdmps"] -viewport_path = NodePath("logic/Mind Board/UiWrapper/UiSprite/SubViewport") +viewport_path = NodePath("logic/MindBoard/UiWrapper/UiSprite/SubViewport") [sub_resource type="Animation" id="Animation_xum02"] length = 0.001 @@ -2348,7 +2348,7 @@ func hide(): visible = false " -[node name="youth room" type="Node3D"] +[node name="youth room" type="Node3D" groups=["serializable"]] script = ExtResource("1_aitp0") [node name="logic" type="Node3D" parent="."] @@ -2540,12 +2540,13 @@ ordering your thoughts. This is as far as the demo goes. Press x or [ ] to wrap up." -[node name="picker" parent="logic/UI" groups=["animation_player"] instance=ExtResource("19_a4n1o")] +[node name="Picker" parent="logic/UI" groups=["scene_actors"] instance=ExtResource("19_a4n1o")] unique_name_in_owner = true visible = false layout_mode = 1 -[node name="board" parent="logic/UI" instance=ExtResource("4_gyjxx")] +[node name="Board" parent="logic/UI" instance=ExtResource("4_gyjxx")] +unique_name_in_owner = true visible = false layout_mode = 1 @@ -2555,7 +2556,8 @@ layout_mode = 1 mouse_filter = 2 script = SubResource("GDScript_uy50s") -[node name="ScenePlayer" type="AnimationPlayer" parent="logic" groups=["animation_player"]] +[node name="ScenePlayer" type="AnimationPlayer" parent="logic" groups=["scene_actors"]] +unique_name_in_owner = true libraries = { "": SubResource("AnimationLibrary_ilekd") } @@ -3080,150 +3082,154 @@ light_energy = 100.0 light_size = 20.0 omni_range = 16.8518 -[node name="Mask-interaction" type="Area3D" parent="logic" groups=["interactables"]] +[node name="MaskMemento" type="Area3D" parent="logic" groups=["interactables"]] +unique_name_in_owner = true transform = Transform3D(-0.863025, 0, 0.50516, 0, 1, 0, -0.50516, 0, -0.863025, 0.0754588, 0.948372, 2.42068) collision_layer = 16 script = ExtResource("11_6fwv8") -[node name="collectable_particles" parent="logic/Mask-interaction" instance=ExtResource("12_qxx2k")] +[node name="collectable_particles" parent="logic/MaskMemento" instance=ExtResource("12_qxx2k")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00898492, -0.14171, 0.152755) visible = false -[node name="UiWrapper" type="Area3D" parent="logic/Mask-interaction"] +[node name="UiWrapper" type="Area3D" parent="logic/MaskMemento"] transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, -2.38419e-07, 0, 0.0718942) script = ExtResource("11_7uxd8") -[node name="UI_click_collider" type="CollisionShape3D" parent="logic/Mask-interaction/UiWrapper"] +[node name="UI_click_collider" type="CollisionShape3D" parent="logic/MaskMemento/UiWrapper"] transform = Transform3D(2.56, -5.96046e-08, 4.76837e-07, 1.78814e-07, 2.56, -4.17233e-07, -2.38419e-07, -5.96046e-08, 2.56, 0, 1.90735e-06, 0.238397) shape = SubResource("BoxShape3D_cb3g8") -[node name="UiSprite" type="Sprite3D" parent="logic/Mask-interaction/UiWrapper"] +[node name="UiSprite" type="Sprite3D" parent="logic/MaskMemento/UiWrapper"] transform = Transform3D(1, 0, 2.98023e-08, 0, 1, 0, -2.98023e-08, 0, 1, -9.53674e-07, 0, 0.61076) pixel_size = 0.015 no_depth_test = true texture = SubResource("ViewportTexture_3mgqk") -[node name="SubViewport" type="SubViewport" parent="logic/Mask-interaction/UiWrapper/UiSprite"] +[node name="SubViewport" type="SubViewport" parent="logic/MaskMemento/UiWrapper/UiSprite"] transparent_bg = true render_target_update_mode = 4 -[node name="Collectable_ui" parent="logic/Mask-interaction/UiWrapper/UiSprite/SubViewport" instance=ExtResource("11_jxai0")] +[node name="Collectable_ui" parent="logic/MaskMemento/UiWrapper/UiSprite/SubViewport" instance=ExtResource("11_jxai0")] visible = false scene = 0 is_story = true item_name = "my old Mask" content_notes = "conflicts, eating issues, alienation, swearing, ableism" -[node name="HoverDetect" type="CollisionShape3D" parent="logic/Mask-interaction"] +[node name="HoverDetect" type="CollisionShape3D" parent="logic/MaskMemento"] shape = SubResource("CapsuleShape3D_72g2i") -[node name="clothes_interaction" type="Area3D" parent="logic" groups=["interactables"]] +[node name="ClothesMemento" type="Area3D" parent="logic" groups=["interactables"]] +unique_name_in_owner = true transform = Transform3D(0.86043, 0, -0.509567, 0, 1, 0, 0.509567, 0, 0.86043, 1.47102, 1.17096, -0.629588) collision_layer = 16 script = ExtResource("11_6fwv8") -[node name="collectable_particles" parent="logic/clothes_interaction" instance=ExtResource("12_qxx2k")] +[node name="collectable_particles" parent="logic/ClothesMemento" instance=ExtResource("12_qxx2k")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00898492, -0.14171, 0.152755) visible = false -[node name="UiWrapper" type="Area3D" parent="logic/clothes_interaction"] +[node name="UiWrapper" type="Area3D" parent="logic/ClothesMemento"] transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0) script = ExtResource("11_7uxd8") -[node name="UI_click_collider" type="CollisionShape3D" parent="logic/clothes_interaction/UiWrapper"] +[node name="UI_click_collider" type="CollisionShape3D" parent="logic/ClothesMemento/UiWrapper"] transform = Transform3D(2.56, -5.96046e-08, 4.76837e-07, 1.78814e-07, 2.56, -4.17233e-07, -2.38419e-07, -5.96046e-08, 2.56, 0, 1.90735e-06, 0.238397) shape = SubResource("BoxShape3D_cb3g8") -[node name="UiSprite" type="Sprite3D" parent="logic/clothes_interaction/UiWrapper"] +[node name="UiSprite" type="Sprite3D" parent="logic/ClothesMemento/UiWrapper"] transform = Transform3D(1, 0, 2.4869e-14, 0, 1, 0, -2.4869e-14, 0, 1, 0, 0, 0.610758) pixel_size = 0.015 no_depth_test = true texture = SubResource("ViewportTexture_7hana") -[node name="SubViewport" type="SubViewport" parent="logic/clothes_interaction/UiWrapper/UiSprite"] +[node name="SubViewport" type="SubViewport" parent="logic/ClothesMemento/UiWrapper/UiSprite"] transparent_bg = true size = Vector2i(400, 350) render_target_update_mode = 4 -[node name="Collectable_ui" parent="logic/clothes_interaction/UiWrapper/UiSprite/SubViewport" instance=ExtResource("11_jxai0")] +[node name="Collectable_ui" parent="logic/ClothesMemento/UiWrapper/UiSprite/SubViewport" instance=ExtResource("11_jxai0")] visible = false scene = 2 is_story = true item_name = "Sport Clothes" content_notes = "Body Issues, gender Dysphoria, Relationships, Rape, dissociation, self-sabotaging thoughts, Fighting Sport, Swearing" -[node name="HoverDetect" type="CollisionShape3D" parent="logic/clothes_interaction"] +[node name="HoverDetect" type="CollisionShape3D" parent="logic/ClothesMemento"] transform = Transform3D(1, 0, 2.98023e-08, 0, 1, 0, -2.98023e-08, 0, 1, 0, -0.237872, 0) shape = SubResource("CapsuleShape3D_72g2i") -[node name="Comic-interaction" type="Area3D" parent="logic" groups=["interactables"]] +[node name="ComicMemento" type="Area3D" parent="logic" groups=["interactables"]] +unique_name_in_owner = true transform = Transform3D(0.969944, 0, 0.243327, 0, 1, 0, -0.243327, 0, 0.969944, 2.91664, 0.595014, -0.857358) collision_layer = 16 script = ExtResource("11_6fwv8") -[node name="collectable_particles" parent="logic/Comic-interaction" instance=ExtResource("12_qxx2k")] +[node name="collectable_particles" parent="logic/ComicMemento" instance=ExtResource("12_qxx2k")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00898492, -0.14171, 0.152755) visible = false -[node name="UiWrapper" type="Area3D" parent="logic/Comic-interaction"] +[node name="UiWrapper" type="Area3D" parent="logic/ComicMemento"] transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0) script = ExtResource("11_7uxd8") -[node name="UI_click_collider" type="CollisionShape3D" parent="logic/Comic-interaction/UiWrapper"] +[node name="UI_click_collider" type="CollisionShape3D" parent="logic/ComicMemento/UiWrapper"] transform = Transform3D(2.56, -5.96046e-08, 4.76837e-07, 1.78814e-07, 2.56, -4.17233e-07, -2.38419e-07, -5.96046e-08, 2.56, 0, 1.90735e-06, 0.238397) shape = SubResource("BoxShape3D_cb3g8") -[node name="UiSprite" type="Sprite3D" parent="logic/Comic-interaction/UiWrapper"] +[node name="UiSprite" type="Sprite3D" parent="logic/ComicMemento/UiWrapper"] transform = Transform3D(1, 0, 2.4869e-14, 0, 1, 0, -2.4869e-14, 0, 1, 0, 0, 0.610758) pixel_size = 0.015 no_depth_test = true texture = SubResource("ViewportTexture_nn6wl") -[node name="SubViewport" type="SubViewport" parent="logic/Comic-interaction/UiWrapper/UiSprite"] +[node name="SubViewport" type="SubViewport" parent="logic/ComicMemento/UiWrapper/UiSprite"] transparent_bg = true size = Vector2i(400, 350) render_target_update_mode = 4 -[node name="Collectable_ui" parent="logic/Comic-interaction/UiWrapper/UiSprite/SubViewport" instance=ExtResource("11_jxai0")] +[node name="Collectable_ui" parent="logic/ComicMemento/UiWrapper/UiSprite/SubViewport" instance=ExtResource("11_jxai0")] visible = false scene = 1 is_story = true item_name = "comic stash" content_notes = "internalised mysoginy, genitals, bullying, fictional guns" -[node name="HoverDetect" type="CollisionShape3D" parent="logic/Comic-interaction"] +[node name="HoverDetect" type="CollisionShape3D" parent="logic/ComicMemento"] transform = Transform3D(1, 0, 2.98023e-08, 0, 1, 0, -2.98023e-08, 0, 1, 0, -0.237872, 0) shape = SubResource("CapsuleShape3D_72g2i") -[node name="Draeven-interaction" type="Area3D" parent="logic" groups=["interactables"]] +[node name="CeilingMemento" type="Area3D" parent="logic" groups=["interactables"]] +unique_name_in_owner = true transform = Transform3D(0.86043, 0, -0.509567, 0, 1, 0, 0.509567, 0, 0.86043, 0.122875, 2.03863, -0.132712) collision_layer = 16 script = ExtResource("11_6fwv8") -[node name="collectable_particles" parent="logic/Draeven-interaction" instance=ExtResource("12_qxx2k")] +[node name="collectable_particles" parent="logic/CeilingMemento" instance=ExtResource("12_qxx2k")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00898492, -0.14171, 0.152755) visible = false -[node name="UiWrapper" type="Area3D" parent="logic/Draeven-interaction"] +[node name="UiWrapper" type="Area3D" parent="logic/CeilingMemento"] transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0) script = ExtResource("11_7uxd8") -[node name="UI_click_collider" type="CollisionShape3D" parent="logic/Draeven-interaction/UiWrapper"] +[node name="UI_click_collider" type="CollisionShape3D" parent="logic/CeilingMemento/UiWrapper"] transform = Transform3D(2.56, -5.96046e-08, 4.76837e-07, 1.78814e-07, 2.56, -4.17233e-07, -2.38419e-07, -5.96046e-08, 2.56, 0, 1.90735e-06, 0.238397) shape = SubResource("BoxShape3D_cb3g8") -[node name="UiSprite" type="Sprite3D" parent="logic/Draeven-interaction/UiWrapper"] +[node name="UiSprite" type="Sprite3D" parent="logic/CeilingMemento/UiWrapper"] transform = Transform3D(1, 0, 2.4869e-14, 0, 1, 0, -2.4869e-14, 0, 1, 0, 0, 0.610758) pixel_size = 0.015 no_depth_test = true texture = SubResource("ViewportTexture_8rywf") -[node name="SubViewport" type="SubViewport" parent="logic/Draeven-interaction/UiWrapper/UiSprite"] +[node name="SubViewport" type="SubViewport" parent="logic/CeilingMemento/UiWrapper/UiSprite"] transparent_bg = true size = Vector2i(400, 350) render_target_update_mode = 4 -[node name="Collectable_ui" parent="logic/Draeven-interaction/UiWrapper/UiSprite/SubViewport" instance=ExtResource("11_jxai0")] +[node name="Collectable_ui" parent="logic/CeilingMemento/UiWrapper/UiSprite/SubViewport" instance=ExtResource("11_jxai0")] visible = false scene = 3 is_story = true @@ -3231,44 +3237,84 @@ collected = true item_name = "Starlight" content_notes = "Alienation" -[node name="HoverDetect" type="CollisionShape3D" parent="logic/Draeven-interaction"] +[node name="HoverDetect" type="CollisionShape3D" parent="logic/CeilingMemento"] transform = Transform3D(1, 0, 2.98023e-08, 0, 1, 0, -2.98023e-08, 0, 1, 0, -0.237872, 0) shape = SubResource("SphereShape3D_c7buh") -[node name="Mind Board" type="Area3D" parent="logic" groups=["interactables"]] +[node name="MindBoard" type="Area3D" parent="logic" groups=["interactables"]] +unique_name_in_owner = true transform = Transform3D(-4.37114e-08, 0, 0.999999, 0, 1, 0, -0.999999, 0, -4.37114e-08, -0.907206, 1.17661, 1.74337) collision_layer = 16 script = ExtResource("11_6fwv8") -[node name="collectable_particles" parent="logic/Mind Board" instance=ExtResource("12_qxx2k")] +[node name="collectable_particles" parent="logic/MindBoard" instance=ExtResource("12_qxx2k")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00898492, -0.14171, 0.152755) visible = false -[node name="UiWrapper" type="Area3D" parent="logic/Mind Board"] +[node name="UiWrapper" type="Area3D" parent="logic/MindBoard"] transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0) script = ExtResource("11_7uxd8") billboard = false -[node name="UI_click_collider" type="CollisionShape3D" parent="logic/Mind Board/UiWrapper"] +[node name="UI_click_collider" type="CollisionShape3D" parent="logic/MindBoard/UiWrapper"] transform = Transform3D(2.56, -5.96046e-08, 4.76837e-07, 1.78814e-07, 2.56, -4.17233e-07, -2.38419e-07, -5.96046e-08, 2.56, 0, 1.90735e-06, 0.238397) shape = SubResource("BoxShape3D_cb3g8") -[node name="UiSprite" type="Sprite3D" parent="logic/Mind Board/UiWrapper"] +[node name="UiSprite" type="Sprite3D" parent="logic/MindBoard/UiWrapper"] transform = Transform3D(1, 0, 2.4869e-14, 0, 1, 0, -2.4869e-14, 0, 1, 0, 0, 0.610758) pixel_size = 0.015 no_depth_test = true texture = SubResource("ViewportTexture_hdmps") -[node name="SubViewport" type="SubViewport" parent="logic/Mind Board/UiWrapper/UiSprite"] +[node name="SubViewport" type="SubViewport" parent="logic/MindBoard/UiWrapper/UiSprite"] transparent_bg = true size = Vector2i(400, 350) render_target_update_mode = 4 -[node name="Collectable_ui" parent="logic/Mind Board/UiWrapper/UiSprite/SubViewport" instance=ExtResource("11_jxai0")] +[node name="Collectable_ui" parent="logic/MindBoard/UiWrapper/UiSprite/SubViewport" instance=ExtResource("11_jxai0")] visible = false item_name = "Mind Board" -[node name="HoverDetect" type="CollisionShape3D" parent="logic/Mind Board"] +[node name="HoverDetect" type="CollisionShape3D" parent="logic/MindBoard"] +transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0) +shape = SubResource("CapsuleShape3D_72g2i") + +[node name="DoorTrigger" type="Area3D" parent="logic" groups=["interactables"]] +unique_name_in_owner = true +transform = Transform3D(-4.37114e-08, 0, 0.999999, 0, 1, 0, -0.999999, 0, -4.37114e-08, 0.09841, 1.17661, -0.865982) +visible = false +collision_layer = 16 +script = ExtResource("11_6fwv8") + +[node name="collectable_particles" parent="logic/DoorTrigger" instance=ExtResource("12_qxx2k")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00898492, -0.14171, 0.152755) +visible = false + +[node name="UiWrapper" type="Area3D" parent="logic/DoorTrigger"] +transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0) +script = ExtResource("11_7uxd8") +billboard = false + +[node name="UI_click_collider" type="CollisionShape3D" parent="logic/DoorTrigger/UiWrapper"] +transform = Transform3D(2.56, -5.96046e-08, 4.76837e-07, 1.78814e-07, 2.56, -4.17233e-07, -2.38419e-07, -5.96046e-08, 2.56, 0, 1.90735e-06, 0.238397) +shape = SubResource("BoxShape3D_cb3g8") + +[node name="UiSprite" type="Sprite3D" parent="logic/DoorTrigger/UiWrapper"] +transform = Transform3D(1, 0, 2.4869e-14, 0, 1, 0, -2.4869e-14, 0, 1, 0, 0, 0.610758) +pixel_size = 0.015 +no_depth_test = true +texture = SubResource("ViewportTexture_hdmps") + +[node name="SubViewport" type="SubViewport" parent="logic/DoorTrigger/UiWrapper/UiSprite"] +transparent_bg = true +size = Vector2i(400, 350) +render_target_update_mode = 4 + +[node name="Collectable_ui" parent="logic/DoorTrigger/UiWrapper/UiSprite/SubViewport" instance=ExtResource("11_jxai0")] +visible = false +item_name = "Mind Board" + +[node name="HoverDetect" type="CollisionShape3D" parent="logic/DoorTrigger"] transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0) shape = SubResource("CapsuleShape3D_72g2i") @@ -3416,7 +3462,7 @@ shadow_enabled = true omni_range = 2.17653 omni_attenuation = 1.41421 -[node name="light_animation" type="AnimationPlayer" parent="visuals/lights" groups=["animation_player"]] +[node name="light_animation" type="AnimationPlayer" parent="visuals/lights" groups=["scene_actors"]] libraries = { "": SubResource("AnimationLibrary_k8op5") } @@ -3502,7 +3548,7 @@ script = SubResource("GDScript_yn0pl") transform = Transform3D(-0.080852, 0, -1.22083e-08, 0, 0.080852, 0, 1.22083e-08, 0, -0.080852, 1.03861, 1.5471, 2.86542) texture = SubResource("ViewportTexture_hwb6d") -[node name="WorldEnvironment" type="WorldEnvironment" parent="." groups=["animation_player"]] +[node name="WorldEnvironment" type="WorldEnvironment" parent="." groups=["scene_actors"]] environment = SubResource("Environment_pllnm") camera_attributes = SubResource("CameraAttributesPractical_26mp0") script = SubResource("GDScript_wb8kg") @@ -3589,7 +3635,8 @@ light_array = Array[Vector3]([Vector3(-0.545, 0.915, 1.035), Vector3(-0.47, 0.85 [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"] -[connection signal="board_completed" from="logic/UI/board" to="logic/UI/ending_button" method="show"] +[connection signal="cards_picked" from="logic/UI/Picker" to="logic/UI/Board" method="populate_board"] +[connection signal="board_completed" from="logic/UI/Board" to="logic/UI/ending_button" method="show"] [connection signal="skip" from="logic/ScenePlayer/childhood/PanelContainer/skip_control" to="logic/ScenePlayer" method="on_childhood_done"] [connection signal="skip" from="logic/ScenePlayer/childhood/PanelContainer/skip_control" to="logic/ScenePlayer" method="play" binds= ["RESET"]] [connection signal="skip" from="logic/ScenePlayer/Voice Training/PanelContainer/skip_control2" to="logic/ScenePlayer" method="on_voice_training_done"] @@ -3601,13 +3648,15 @@ light_array = Array[Vector3]([Vector3(-0.545, 0.915, 1.035), Vector3(-0.47, 0.85 [connection signal="skip" from="logic/ScenePlayer/jui_jutsu/PanelContainer/skip_control3" to="logic/ScenePlayer" method="play" binds= ["RESET"]] [connection signal="skip" from="logic/ScenePlayer/draeven/PanelContainer/skip_control4" to="logic/ScenePlayer" method="on_draeven_done"] [connection signal="skip" from="logic/ScenePlayer/draeven/PanelContainer/skip_control4" to="logic/ScenePlayer" method="play" binds= ["RESET"]] -[connection signal="input_event" from="logic/Mask-interaction/UiWrapper" to="logic/Mask-interaction/UiWrapper" method="_on_input_event"] -[connection signal="scene_skipped" from="logic/Mask-interaction/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/board" method="on_scene_skipped"] -[connection signal="input_event" from="logic/clothes_interaction/UiWrapper" to="logic/clothes_interaction/UiWrapper" method="_on_input_event"] -[connection signal="scene_skipped" from="logic/clothes_interaction/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/board" method="on_scene_skipped"] -[connection signal="input_event" from="logic/Comic-interaction/UiWrapper" to="logic/Comic-interaction/UiWrapper" method="_on_input_event"] -[connection signal="scene_skipped" from="logic/Comic-interaction/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/board" method="on_scene_skipped"] -[connection signal="input_event" from="logic/Draeven-interaction/UiWrapper" to="logic/Draeven-interaction/UiWrapper" method="_on_input_event"] -[connection signal="scene_skipped" from="logic/Draeven-interaction/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/board" method="on_scene_skipped"] -[connection signal="input_event" from="logic/Mind Board/UiWrapper" to="logic/Mind Board/UiWrapper" method="_on_input_event"] -[connection signal="open_board" from="logic/Mind Board/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/board" method="claim_focus"] +[connection signal="input_event" from="logic/MaskMemento/UiWrapper" to="logic/MaskMemento/UiWrapper" method="_on_input_event"] +[connection signal="scene_skipped" from="logic/MaskMemento/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/Board" method="on_scene_skipped"] +[connection signal="input_event" from="logic/ClothesMemento/UiWrapper" to="logic/ClothesMemento/UiWrapper" method="_on_input_event"] +[connection signal="scene_skipped" from="logic/ClothesMemento/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/Board" method="on_scene_skipped"] +[connection signal="input_event" from="logic/ComicMemento/UiWrapper" to="logic/ComicMemento/UiWrapper" method="_on_input_event"] +[connection signal="scene_skipped" from="logic/ComicMemento/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/Board" method="on_scene_skipped"] +[connection signal="input_event" from="logic/CeilingMemento/UiWrapper" to="logic/CeilingMemento/UiWrapper" method="_on_input_event"] +[connection signal="scene_skipped" from="logic/CeilingMemento/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/Board" method="on_scene_skipped"] +[connection signal="input_event" from="logic/MindBoard/UiWrapper" to="logic/MindBoard/UiWrapper" method="_on_input_event"] +[connection signal="open_board" from="logic/MindBoard/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/Board" method="claim_focus"] +[connection signal="input_event" from="logic/DoorTrigger/UiWrapper" to="logic/DoorTrigger/UiWrapper" method="_on_input_event"] +[connection signal="open_board" from="logic/DoorTrigger/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/Board" method="claim_focus"] diff --git a/src/dev-util/room_template.gd b/src/dev-util/room_template.gd new file mode 100644 index 00000000..d858d1e2 --- /dev/null +++ b/src/dev-util/room_template.gd @@ -0,0 +1,10 @@ +class_name RoomTemplate extends Node3D + +@export var save_game:SaveGame = null + +func pull_save_state(save: SaveGame) -> void: + pass + +func save_room(): + pull_save_state(save_game) + save_game.save_to_file.call_deferred(get_tree().root.get_texture()) diff --git a/src/dev-util/savegame.gd b/src/dev-util/savegame.gd index 96804ffe..ac2f6ad0 100644 --- a/src/dev-util/savegame.gd +++ b/src/dev-util/savegame.gd @@ -6,29 +6,24 @@ class_name SaveGame extends Resource @export var unique_save_name: String = "frame_of_mind_save_slot_%d_%s_%s" % [save_slot_id, Time.get_date_string_from_system(), Time.get_time_string_from_system()] @export var current_room: State.rooms = 0 @export var mementos_complete: int = 0 -@export var board_state: Dictionary -@export var thumbnail: Image = Image.load_from_file("res://import/interface-elements/empty_save_slot.png") +@export var board_state: Dictionary = {} +var thumbnail: Image = Image.load_from_file("res://import/interface-elements/empty_save_slot.png") @export var last_saved: Dictionary = Time.get_datetime_dict_from_system() @export var is_save_file_valid: bool = false +# FIXME: for some reason this does not prevent the property from being saved. +func _validate_property(property: Dictionary): + if property.name == "thumbnail": + property.usage != PROPERTY_USAGE_STORAGE + + func _init(filepath = "") -> void: if filepath == "": filepath = "usr://saves/%s" % unique_save_name read_save_file() -func _get_save_dict() -> Dictionary: - return { - "save_slot_id": save_slot_id, - "unique_save_name": unique_save_name, - "current_room": current_room, - "mementos_complete": mementos_complete, - "board_state": board_state, - "last_saved": last_saved - } - - func read_save_file(): if FileAccess.file_exists("%s.json:" % filepath): @@ -59,7 +54,21 @@ func read_save_file(): thumbnail = tmp_img -func save_file(current_screen: ImageTexture): + +func _get_save_dict() -> Dictionary: + return { + "save_slot_id": save_slot_id, + "unique_save_name": unique_save_name, + "current_room": current_room, + "mementos_complete": mementos_complete, + "board_state": board_state, + "last_saved": last_saved + } + + +func save_to_file(current_screen: Texture): + last_saved + thumbnail = current_screen.get_image() current_screen.resize(384, 261, Image.INTERPOLATE_LANCZOS) diff --git a/src/logic-scenes/collectable/collectable_ui.gd b/src/logic-scenes/collectable/collectable_ui.gd index c7cd1879..acd3fd67 100644 --- a/src/logic-scenes/collectable/collectable_ui.gd +++ b/src/logic-scenes/collectable/collectable_ui.gd @@ -130,7 +130,7 @@ func _on_pick_button_pressed(): print("card collected!") if scene != null: State.leave_stage(self) - get_tree().call_group("animation_player", "play_scene", scene, collected) + get_tree().call_group("scene_actors", "play_scene", scene, collected) if skipped: emit_signal("scene_skipped", -1) collected = true else: diff --git a/src/logic-scenes/player_controller/player_controller.gd b/src/logic-scenes/player_controller/player_controller.gd index a3e10958..83a08fe1 100644 --- a/src/logic-scenes/player_controller/player_controller.gd +++ b/src/logic-scenes/player_controller/player_controller.gd @@ -77,7 +77,7 @@ func _ready(): func _on_ini_room(): State.take_stage(self) - get_tree().call_group("animation_player", "play_scene", Scenes.id.YOUTH_DRAEVEN, false) + get_tree().call_group("scene_actors", "play_scene", Scenes.id.YOUTH_DRAEVEN, false) State.queue_for_stage(self) func _process(_delta):