diff --git a/design/youth-construction.blend b/design/youth-construction.blend index 9ecc1e0a..ff6189b8 100644 --- a/design/youth-construction.blend +++ b/design/youth-construction.blend @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de1d29c840236eef2ffe74842b6ae286ce7dd92ff24598be61c0005fb9129a25 -size 163233992 +oid sha256:3231856cc075014577f23c345c8e5200cb28050df92d77c14ec4eae5442979aa +size 194242060 diff --git a/design/youth-construction.blend1 b/design/youth-construction.blend1 index 5be81ce5..6a23bf08 100644 --- a/design/youth-construction.blend1 +++ b/design/youth-construction.blend1 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7aa05e5e4ade583767311926813e5d1fab01fe534a561516367f960e13ad47b -size 163245280 +oid sha256:51b77108291de0ad5ff81320199ee7217c8ba3790f5e5d8b8bc28aa3fb4b6389 +size 194239356 diff --git a/src/base-environments/youth_room/room_handle.gd b/src/base-environments/youth_room/room_handle.gd index d70ef8ee..c55d4fa9 100644 --- a/src/base-environments/youth_room/room_handle.gd +++ b/src/base-environments/youth_room/room_handle.gd @@ -28,7 +28,7 @@ func _process(delta): func start(): $light_animation.play("light_up") $AudioPlayer.play("intro") - State.assign_focus_to($PlayerController) + State.pass_focus_to($PlayerController) current_mode = Modes.WALKING func _update_scene(new_mode) -> int: @@ -37,7 +37,6 @@ func _update_scene(new_mode) -> int: elif new_mode == Modes.FREEZE: emit_signal("freeze") - return new_mode func _unhandled_input(event): diff --git a/src/base-environments/youth_room/youth_room.tscn b/src/base-environments/youth_room/youth_room.tscn index ff35d2c0..0c6614f4 100644 --- a/src/base-environments/youth_room/youth_room.tscn +++ b/src/base-environments/youth_room/youth_room.tscn @@ -1,11 +1,13 @@ -[gd_scene load_steps=48 format=3 uid="uid://b3b0gyvklqn50"] +[gd_scene load_steps=53 format=3 uid="uid://b3b0gyvklqn50"] [ext_resource type="Script" path="res://base-environments/youth_room/room_handle.gd" id="1_aitp0"] [ext_resource type="PackedScene" uid="uid://c0i4ydmxtxfho" path="res://base-environments/youth_room/import/youth_room.glb" id="1_jf3oi"] [ext_resource type="AudioStream" uid="uid://1h6k2d8q1kw3" path="res://base-environments/youth_room/import/sounds/rain_on_window.mp3" id="2_3haaq"] +[ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="2_21x33"] [ext_resource type="Texture2D" uid="uid://cs6gtn285a4al" path="res://dev-util/logo_background.png" id="3_1mw2j"] [ext_resource type="PackedScene" uid="uid://mkccbig41bqb" path="res://logic-scenes/player_controller/player_controller.tscn" id="3_foj4y"] [ext_resource type="AudioStream" uid="uid://bbpo1hu35yer8" path="res://base-environments/youth_room/import/sounds/thunder.mp3" id="3_wcypa"] +[ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="3_xqd4w"] [ext_resource type="AudioStream" uid="uid://cudna8k7fw06t" path="res://base-environments/youth_room/audio/Moving Loop.wav" id="8_egnow"] [ext_resource type="AudioStream" uid="uid://bwh60165c3saj" path="res://base-environments/youth_room/audio/lisa_youth_voice.ogg" id="9_dqdgk"] [ext_resource type="AudioStream" uid="uid://cl74a68tjwinh" path="res://base-environments/youth_room/audio/Youth Loop.wav" id="9_i8mqk"] @@ -15,7 +17,8 @@ [ext_resource type="PackedScene" uid="uid://d3pb25xuef2t2" path="res://logic-scenes/collectable/collectable_ui.tscn" id="11_jxai0"] [ext_resource type="PackedScene" uid="uid://bdnesuqroi7ss" path="res://vfx/collectable_particles.tscn" id="12_qxx2k"] [ext_resource type="Texture2D" uid="uid://d005qvnbnishb" path="res://import/interface-elements/cursor_grab.png" id="13_lqj71"] -[ext_resource type="Script" path="res://base-environments/youth_room/catch_all.gd" id="16_tddlc"] +[ext_resource type="PackedScene" uid="uid://brk4hjdf2x81a" path="res://logic-scenes/card_picker/card_picker.tscn" id="19_a4n1o"] +[ext_resource type="ArrayMesh" uid="uid://bfc3d4g40n0wy" path="res://logic-scenes/collectable/import/old-mask.res" id="19_jr2bb"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_kcdrx"] sky_top_color = Color(0, 0, 1, 1) @@ -64,10 +67,28 @@ adjustment_enabled = true [sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_26mp0"] auto_exposure_enabled = true auto_exposure_scale = 0.2 +dof_blur_far_enabled = true +dof_blur_far_distance = 0.4 +dof_blur_far_transition = 0.2 dof_blur_near_distance = 0.79 -dof_blur_amount = 0.4 +dof_blur_amount = 0.0 auto_exposure_min_sensitivity = 100.0 +[sub_resource type="GDScript" id="GDScript_wb8kg"] +script/source = "extends WorldEnvironment + +func _ready(): + focus_env() + +func focus_env(): + var dof_strength_tween: Tween = create_tween() + dof_strength_tween.tween_property(camera_attributes, \"dof_blur_amount\", 0, 1) + +func focus_object(): + var dof_strength_tween: Tween = create_tween() + dof_strength_tween.tween_property(camera_attributes, \"dof_blur_amount\", 0.6, 1) +" + [sub_resource type="GDScript" id="GDScript_35dmj"] script/source = "extends SpotLight3D @@ -94,6 +115,10 @@ func _process(delta): func switch_on(): var tween:Tween = create_tween() tween.tween_property(self, \"litnes\", 1, 10) + +func switch_off(): + var tween:Tween = create_tween() + tween.tween_property(self, \"litnes\", 0, 1) " [sub_resource type="GDScript" id="GDScript_xqa3d"] @@ -136,7 +161,7 @@ tracks/0/keys = { tracks/1/type = "method" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("SpotLight3D") +tracks/1/path = NodePath("desk_light") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { @@ -148,6 +173,36 @@ tracks/1/keys = { }] } +[sub_resource type="Animation" id="Animation_wa80i"] +resource_name = "lights_out" +length = 2.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("OmniLight3D2:light_energy") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [1.0, 0.0] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("desk_light") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"switch_off" +}] +} + [sub_resource type="Animation" id="Animation_upogh"] resource_name = "menu" tracks/0/type = "value" @@ -160,13 +215,14 @@ tracks/0/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, -"values": [1.0] +"values": [0.0] } [sub_resource type="AnimationLibrary" id="AnimationLibrary_k8op5"] _data = { "RESET": SubResource("Animation_hqls1"), "light_up": SubResource("Animation_hxk3n"), +"lights_out": SubResource("Animation_wa80i"), "menu": SubResource("Animation_upogh") } @@ -232,6 +288,78 @@ tracks/4/keys = { "update": 0, "values": [0.0] } +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("AudioPlayer/childhood/PanelContainer/VBoxContainer/ScrollContainer/Label:visible_ratio") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("AudioPlayer/childhood/PanelContainer/VBoxContainer/ScrollContainer:scroll_vertical") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("AudioPlayer/childhood/PanelContainer/VBoxContainer/ScrollContainer:mouse_filter") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [1] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("AudioPlayer/childhood/PanelContainer/VBoxContainer/ScrollContainer:custom_minimum_size") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(800, 750)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("AudioPlayer/childhood:modulate") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("AudioPlayer/childhood/PanelContainer:self_modulate") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} [sub_resource type="Animation" id="Animation_g5l1m"] resource_name = "childhood" @@ -275,6 +403,92 @@ tracks/2/keys = { "times": PackedFloat32Array(1.6) } tracks/2/use_blend = true +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("AudioPlayer/childhood/PanelContainer/VBoxContainer/ScrollContainer/Label:visible_ratio") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0.3, 0.8, 3, 14.6, 17.2, 26.4, 28.6, 36.3, 36.8, 50.0759, 51, 53.4, 54.7, 60.8, 61.7, 66.8, 67.8, 74.7, 76.6, 78.3, 81, 81.6, 87.2), +"transitions": PackedFloat32Array(1, 1, 0.615572, 1, 0.435275, 1, 0.615572, 1, 0.594604, 1, 0.378929, 1, 0.63728, 1, 0.535887, 1, 1, 1, 0.435275, 0.63728, 1, 1, 1), +"update": 0, +"values": [0.0, 0.014, 0.014, 0.15, 0.153, 0.287, 0.287, 0.38, 0.38, 0.528, 0.528, 0.563, 0.563, 0.663, 0.663, 0.746, 0.746, 0.859, 0.859, 0.876, 0.92, 0.92, 1.0] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("AudioPlayer/childhood/PanelContainer/VBoxContainer/ScrollContainer:scroll_vertical") +tracks/4/interp = 2 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(74.8, 76.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0, 74] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("AudioPlayer/childhood/PanelContainer/VBoxContainer/ScrollContainer:mouse_filter") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 90), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [2, 0] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("AudioPlayer/childhood/PanelContainer/VBoxContainer/ScrollContainer:custom_minimum_size") +tracks/6/interp = 2 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(0.466516, 1), +"update": 0, +"values": [Vector2(800, 750), Vector2(800, 800)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("AudioPlayer/childhood:modulate") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.4, 91.7, 92.6), +"transitions": PackedFloat32Array(1, 1, 1.93187, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("AudioPlayer/childhood/PanelContainer:self_modulate") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(89.3, 91.8), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/9/type = "method" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath(".") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(91.9), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"_on_childhood_done" +}] +} [sub_resource type="Animation" id="Animation_as75l"] resource_name = "childhood_intro" @@ -561,17 +775,19 @@ _data = { [sub_resource type="GDScript" id="GDScript_tfc2r"] script/source = "extends AnimationPlayer - func start_soundtrack(): $Moving.play(70) $Childhood.play(70) $VoiceTraining.play(70) + +func _on_childhood_collected(): + play(\"childhood\") " [sub_resource type="BoxShape3D" id="BoxShape3D_cb3g8"] size = Vector3(1.81843, 2.13395, 0.0774798) -[sub_resource type="ViewportTexture" id="ViewportTexture_gwx6q"] +[sub_resource type="ViewportTexture" id="ViewportTexture_7hana"] viewport_path = NodePath("Collectable/UiWrapper/UiSprite/SubViewport") [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_72g2i"] @@ -620,6 +836,9 @@ size = Vector3(1, 0.305693, 0.775269) [node name="youth room" type="Node3D"] script = ExtResource("1_aitp0") +[node name="picker" parent="." instance=ExtResource("19_a4n1o")] +visible = false + [node name="youth_room" parent="." instance=ExtResource("1_jf3oi")] [node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="youth_room"] @@ -640,9 +859,10 @@ bus = &"sfx" [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_pllnm") camera_attributes = SubResource("CameraAttributesPractical_26mp0") +script = SubResource("GDScript_wb8kg") -[node name="SpotLight3D" type="SpotLight3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 0.416868, 0.908967, 0, -0.908967, 0.416868, -0.599038, 1.39757, 1.64821) +[node name="desk_light" type="SpotLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.30009, 0.953911, 0, -0.953911, 0.30009, -0.599038, 1.39757, 1.64821) light_color = Color(0.94902, 0.737255, 0.627451, 1) light_energy = 8.0 light_size = 0.1 @@ -653,7 +873,7 @@ spot_angle = 58.1539 spot_angle_attenuation = 0.812252 script = SubResource("GDScript_35dmj") -[node name="OmniLight3D" type="OmniLight3D" parent="SpotLight3D"] +[node name="OmniLight3D" type="OmniLight3D" parent="desk_light"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.127422, -0.00326544, -0.389614) light_color = Color(0.952941, 0.662745, 0.54902, 1) light_energy = 0.5 @@ -664,7 +884,7 @@ shadow_blur = 0.5 omni_range = 5.48365 omni_attenuation = 0.90125 -[node name="OmniLight3D2" type="OmniLight3D" parent="SpotLight3D"] +[node name="OmniLight3D2" type="OmniLight3D" parent="desk_light"] light_color = Color(0.94902, 0.737255, 0.627451, 1) light_energy = 0.5 omni_range = 0.147682 @@ -783,10 +1003,9 @@ libraries = { } [node name="PlayerController" parent="." groups=["camera_owner"] instance=ExtResource("3_foj4y")] -transform = Transform3D(0.686123, 0, 0.727485, 0, 1, 0, -0.727485, 0, 0.686123, 1.14815, 1.19209e-07, 0.730062) +transform = Transform3D(0.686123, 0, 0.727485, 0, 1, 0, -0.727485, 0, 0.686123, 1.04786, 2.38418e-07, 1.14663) [node name="AudioPlayer" type="AnimationPlayer" parent="."] -autoplay = "RESET" libraries = { "": SubResource("AnimationLibrary_ilekd") } @@ -804,6 +1023,78 @@ bus = &"music" stream = ExtResource("9_i8mqk") bus = &"music" +[node name="childhood" type="CenterContainer" parent="AudioPlayer"] +modulate = Color(1, 1, 1, 0) +self_modulate = Color(1, 1, 1, 0.923078) +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -424.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="PanelContainer" type="PanelContainer" parent="AudioPlayer/childhood"] +layout_mode = 2 + +[node name="StartFrame" type="TextureRect" parent="AudioPlayer/childhood/PanelContainer"] +custom_minimum_size = Vector2(0, 900) +layout_mode = 2 +size_flags_vertical = 0 +texture = ExtResource("2_21x33") +expand_mode = 2 +stretch_mode = 4 + +[node name="Panel" type="PanelContainer" parent="AudioPlayer/childhood/PanelContainer/StartFrame"] +show_behind_parent = true +layout_mode = 2 +offset_left = 199.0 +offset_top = -112.0 +offset_right = 1039.0 +offset_bottom = 697.0 +rotation = 0.459022 + +[node name="VBoxContainer" type="VBoxContainer" parent="AudioPlayer/childhood/PanelContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="AudioPlayer/childhood/PanelContainer/VBoxContainer"] +layout_mode = 2 +theme_type_variation = &"HeaderLarge" +text = " Childhood" + +[node name="ScrollContainer" type="ScrollContainer" parent="AudioPlayer/childhood/PanelContainer/VBoxContainer"] +custom_minimum_size = Vector2(800, 750) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +horizontal_scroll_mode = 0 +vertical_scroll_mode = 3 + +[node name="Label" type="Label" parent="AudioPlayer/childhood/PanelContainer/VBoxContainer/ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Oh, my old mask. I have so many good memories about theatre club. I would stand on my bed for entire afternoons, weeks on end, practicing my lines. Pretending to be on the big stage ... my mom would get mad at me, when she had to call me three or four times for dinner. I just … didn’t like the interruptions. We both were often mad at each other. + +Dinner was difficult. I just couldn’t bring myself to eat, because I couldn’t deal with the bread and my mom. She was always so worried. ‘Lisa, you forgot your homework, Lisa why won’t you play with the other girls, Lisa why didn’t Steffi invite you to her birthday, Lisa this, Lisa that.’ + +But I was fine. She just wouldn’t listen. +Yes, I didn’t do homework, but my teachers didn’t mind it as much with me - which the other kids wouldn’t shut up about. But like … they also made fun of me reading school books and talking to my teachers during breaks. + +But at least I could fucking talk to teachers and they had stuff to say. Mr Thomas probably even understood me better than my own mom. + +He said I was gifted. He said I just didn’t need homework for good grades. And he also made sure to always include extra credits. So my silly slip-ups wouldn’t get me a B." +autowrap_mode = 3 +visible_characters = 0 +visible_characters_behavior = 1 +visible_ratio = 0.0 + +[node name="StartBottom" type="TextureRect" parent="AudioPlayer/childhood/PanelContainer/VBoxContainer"] +custom_minimum_size = Vector2(0, 64) +layout_mode = 2 +size_flags_vertical = 8 +texture = ExtResource("3_xqd4w") +expand_mode = 2 +stretch_mode = 4 + [node name="VoiceTraining" type="AudioStreamPlayer" parent="AudioPlayer"] stream = ExtResource("10_wwwdq") bus = &"music" @@ -816,7 +1107,7 @@ bus = &"music" bus = &"music" [node name="Collectable" type="Area3D" parent="." groups=["collectables"]] -transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -0.940637, 1.34703, 0.817837) +transform = Transform3D(-0.863025, 0, 0.50516, 0, 1, 0, -0.50516, 0, -0.863025, 0.121309, 0.803665, 2.4765) collision_layer = 16 script = ExtResource("11_6fwv8") @@ -824,8 +1115,7 @@ script = ExtResource("11_6fwv8") transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00898492, -0.14171, 0.152755) [node name="UiWrapper" type="Area3D" parent="Collectable"] -transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, -2.38419e-07, 0, 0.071894) -visible = false +transform = Transform3D(0.1, -1.86265e-09, 0, 0, 0.0906676, 0.0421827, 0, -0.0421827, 0.0906676, -2.38419e-07, 0, 0.0718942) script = ExtResource("11_7uxd8") [node name="UI_click_collider" type="CollisionShape3D" parent="Collectable/UiWrapper"] @@ -836,7 +1126,7 @@ shape = SubResource("BoxShape3D_cb3g8") 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_gwx6q") +texture = SubResource("ViewportTexture_7hana") [node name="SubViewport" type="SubViewport" parent="Collectable/UiWrapper/UiSprite"] transparent_bg = true @@ -844,6 +1134,7 @@ size = Vector2i(300, 350) render_target_update_mode = 4 [node name="Collectable_ui" parent="Collectable/UiWrapper/UiSprite/SubViewport" instance=ExtResource("11_jxai0")] +visible = false is_story = true item_name = "my old Mask" content_notes = "CN: testing testing 123" @@ -917,6 +1208,7 @@ grow_vertical = 2 mouse_filter = 1 [node name="Mouse" type="CenterContainer" parent="SceneUI"] +visible = false layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -925,15 +1217,33 @@ grow_horizontal = 2 grow_vertical = 2 [node name="TextureRect" type="TextureRect" parent="SceneUI/Mouse"] +visible = false layout_mode = 2 texture = ExtResource("13_lqj71") -[node name="catch_all" type="Node3D" parent="."] -script = ExtResource("16_tddlc") +[node name="old-mask" type="Node3D" parent="."] + +[node name="old_mask" type="MeshInstance3D" parent="old-mask"] +transform = Transform3D(-0.51156, -0.746323, -0.425804, 0.144568, -0.563249, 0.813542, -0.846999, 0.354618, 0.396029, -0.0221631, 0.492276, 2.56703) +mesh = ExtResource("19_jr2bb") +skeleton = NodePath("") + +[node name="OmniLight3D" type="OmniLight3D" parent="old-mask/old_mask"] +transform = Transform3D(1, -3.8743e-07, 5.96046e-08, 3.57628e-07, 1, 8.9407e-08, -5.96046e-08, -8.9407e-08, 1, 0.083235, -0.219628, 0.176047) +light_color = Color(0.972549, 0.752941, 0.592157, 1) +light_energy = 0.1 +light_specular = 0.0 +omni_range = 0.457129 +omni_attenuation = 0.659754 [connection signal="ui_entered" from="PlayerController" to="SceneUI" method="show"] [connection signal="ui_exited" from="PlayerController" to="SceneUI" method="hide"] +[connection signal="animation_finished" from="AudioPlayer" to="PlayerController" method="_on_childhood_done"] [connection signal="input_event" from="Collectable/UiWrapper" to="Collectable/UiWrapper" method="_on_input_event" flags=18] +[connection signal="card_collected" from="Collectable/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="." method="_on_childhood_collected"] +[connection signal="card_collected" from="Collectable/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="WorldEnvironment" method="focus_object"] +[connection signal="card_collected" from="Collectable/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="PlayerController" method="_on_childhood_collected"] +[connection signal="card_collected" from="Collectable/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="AudioPlayer" method="_on_childhood_collected"] [connection signal="body_entered" from="Bed and Ladders/ladder_trigger" to="PlayerController" method="_on_bed_enter"] [connection signal="body_entered" from="Bed and Ladders/ladder_trigger" to="Bed and Ladders/ladder" method="raise"] [connection signal="body_exited" from="Bed and Ladders/ladder_reset" to="PlayerController" method="_on_bed_exit"] diff --git a/src/dev-util/board of devs.tscn b/src/dev-util/board of devs.tscn index b79b9e95..4787897a 100644 --- a/src/dev-util/board of devs.tscn +++ b/src/dev-util/board of devs.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=4 format=3 uid="uid://bvowj4l8dtceu"] +[gd_scene load_steps=3 format=3 uid="uid://bvowj4l8dtceu"] [ext_resource type="PackedScene" uid="uid://dy5rd437h5hsw" path="res://logic-scenes/board/card.tscn" id="1_xrckx"] [ext_resource type="PackedScene" uid="uid://vkcdj8c3ytbq" path="res://logic-scenes/board/post-it.tscn" id="2_ucudl"] diff --git a/src/logic-scenes/board/void_card.tscn b/src/logic-scenes/board/void_card.tscn index ed78f9b9..6480c943 100644 --- a/src/logic-scenes/board/void_card.tscn +++ b/src/logic-scenes/board/void_card.tscn @@ -156,6 +156,7 @@ clip_children = 2 position = Vector2(150, 110) scale = Vector2(0.6, 0.6) sprite_frames = SubResource("SpriteFrames_ckivt") +frame = 2 script = SubResource("GDScript_8bs16") [node name="GPUParticles2D" type="GPUParticles2D" parent="BackgroundSprite"] diff --git a/src/logic-scenes/card_picker/card_picker.gd b/src/logic-scenes/card_picker/card_picker.gd index 17c2c2cf..7afdd1d6 100644 --- a/src/logic-scenes/card_picker/card_picker.gd +++ b/src/logic-scenes/card_picker/card_picker.gd @@ -10,6 +10,15 @@ enum { @onready var debug_board:Control = $"board of devs" +var has_focus = false: + set(focus): + if not focus == has_focus: + if focus: + for player in anim_players: player.play("reveal") + selection_state = CARDS # fixme + self.show() + has_focus = focus + var selection_state var anim_players:Array @@ -37,14 +46,14 @@ func _ready(): for control in card_controls: options.append(control.get_child(1)) anim_players.append(control.get_child(0)) - selection_state = CARDS + selection_state = INI fill_card_slots() func fill_card_slots(): for i in range($cards.get_child_count()): var card:Card = $cards.get_child(i).get_child(1) - card.replace_with(debug_board.get_child(2).get_child(i) as Card) + card.replace_with(debug_board.get_child(0).get_child(i) as Card) func fill_post_slots(): var post_its: Array[PostIt] = [] @@ -56,19 +65,15 @@ func fill_post_slots(): options[i].replace_with(post_its[i]) func _unhandled_input(event): - if event.is_action_pressed("ui_up") or event.is_action_pressed("ui_left") or event.is_action_pressed("ui_focus_next"): - curr_selection_id -= 1 - elif event.is_action_pressed("ui_down") or event.is_action_pressed("ui_right") or event.is_action_pressed("ui_focus_prev"): - curr_selection_id += 1 - if event.is_action_pressed("ui_accept"): - pick(curr_selection_id) - -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta): - pass + if has_focus: + if event.is_action_pressed("ui_up") or event.is_action_pressed("ui_left") or event.is_action_pressed("ui_focus_next"): + curr_selection_id -= 1 + elif event.is_action_pressed("ui_down") or event.is_action_pressed("ui_right") or event.is_action_pressed("ui_focus_prev"): + curr_selection_id += 1 + if event.is_action_pressed("ui_accept"): + pick(curr_selection_id) func pick(id: int): - print("meep") if id == -1: curr_selection_id = 0 return diff --git a/src/logic-scenes/card_picker/card_picker.tscn b/src/logic-scenes/card_picker/card_picker.tscn index 8948153d..454e0931 100644 --- a/src/logic-scenes/card_picker/card_picker.tscn +++ b/src/logic-scenes/card_picker/card_picker.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=62 format=3 uid="uid://brk4hjdf2x81a"] +[gd_scene load_steps=65 format=3 uid="uid://brk4hjdf2x81a"] [ext_resource type="Script" path="res://logic-scenes/card_picker/card_picker.gd" id="1_pjntm"] [ext_resource type="PackedScene" uid="uid://dy5rd437h5hsw" path="res://logic-scenes/board/card.tscn" id="2_dqebt"] @@ -208,11 +208,40 @@ tracks/1/keys = { "values": [-0.109599, 0.5044, 3.4924] } +[sub_resource type="Animation" id="Animation_3304u"] +resource_name = "reveal" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(0.435275, 1), +"update": 0, +"values": [Vector2(0, 256), Vector2(-317, 25)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(0.435275, 1), +"update": 0, +"values": [0.174533, -0.109599] +} + [sub_resource type="AnimationLibrary" id="AnimationLibrary_gdxmh"] _data = { "RESET": SubResource("Animation_dinvx"), "deselect": SubResource("Animation_4dp1g"), "pick": SubResource("Animation_76klu"), +"reveal": SubResource("Animation_3304u"), "select": SubResource("Animation_ldr2c"), "shuffle": SubResource("Animation_abihp"), "unshuffle": SubResource("Animation_d68d2") @@ -397,11 +426,40 @@ tracks/1/keys = { "values": [0.0, 0.0436332, 3.22362] } +[sub_resource type="Animation" id="Animation_orrwn"] +resource_name = "reveal" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0.1, 0.4), +"transitions": PackedFloat32Array(0.517633, 1), +"update": 0, +"values": [Vector2(0, 256), Vector2(0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.1, 0.4), +"transitions": PackedFloat32Array(0.517633, 1), +"update": 0, +"values": [0.349066, 0.0] +} + [sub_resource type="AnimationLibrary" id="AnimationLibrary_oxheu"] _data = { "RESET": SubResource("Animation_pcher"), "deselect": SubResource("Animation_5q97d"), "pick": SubResource("Animation_16dsw"), +"reveal": SubResource("Animation_orrwn"), "select": SubResource("Animation_2c94q"), "shuffle": SubResource("Animation_pdic8"), "unshuffle": SubResource("Animation_sa974") @@ -610,11 +668,40 @@ tracks/1/keys = { "values": [0.10472, 0.0436332, 3.22362] } +[sub_resource type="Animation" id="Animation_ep22n"] +resource_name = "reveal" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0.2, 0.5), +"transitions": PackedFloat32Array(0.482968, 1), +"update": 0, +"values": [Vector2(0, 256), Vector2(315, 22)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.2, 0.5), +"transitions": PackedFloat32Array(0.482968, 1), +"update": 0, +"values": [0.349066, 0.10472] +} + [sub_resource type="AnimationLibrary" id="AnimationLibrary_8blxm"] _data = { "RESET": SubResource("Animation_pf55g"), "deselect": SubResource("Animation_6ar8x"), "pick": SubResource("Animation_wp0c8"), +"reveal": SubResource("Animation_ep22n"), "select": SubResource("Animation_pcu23"), "shuffle": SubResource("Animation_vu874"), "unshuffle": SubResource("Animation_mj8e0") @@ -1376,6 +1463,7 @@ script = ExtResource("1_pjntm") layout_mode = 2 [node name="label" type="Label" parent="Control"] +visible = false layout_mode = 2 offset_left = -359.0 offset_top = -256.0 diff --git a/src/logic-scenes/collectable/collectable_ui.gd b/src/logic-scenes/collectable/collectable_ui.gd index 8a296082..d7847d0e 100644 --- a/src/logic-scenes/collectable/collectable_ui.gd +++ b/src/logic-scenes/collectable/collectable_ui.gd @@ -4,7 +4,7 @@ class_name Collectable_Ui @export var collapsed = true: set(collapse): - if is_inside_tree(): + if is_inside_tree() and not Engine.is_editor_hint(): if State.reduce_motion: collapsed = false return @@ -25,21 +25,19 @@ class_name Collectable_Ui if has_focus == focused: return if focused: - has_focus = State.request_focus(self) - if has_focus: - collapsed = false - if collected: - $Panel/Content/Buttons/VBoxContainer/put_back.grab_focus() - else: - $Panel/Content/Buttons/VBoxContainer/collect_or_listen.grab_focus() + has_focus = true + print(visible) + if not visible: show() + collapsed = false + if collected: + $Panel/Content/Buttons/VBoxContainer/put_back.grab_focus() + else: + $Panel/Content/Buttons/VBoxContainer/collect_or_listen.grab_focus() elif has_focus: - has_focus = false # How did we get here? - State.focus_cleared(self) + has_focus = false get_viewport().gui_release_focus() - hide() + #hide() - if not visible: - show() @export var collected: bool = false: @@ -72,6 +70,8 @@ class_name Collectable_Ui if is_inside_tree(): $Content/Name.text = new_notes +signal card_collected + # Called when the node enters the scene tree for the first time. func _ready(): #$Panel/Content/ContentNotes.visible = State.show_content_notes @@ -80,11 +80,15 @@ func _ready(): if visible and not collapsed: _show_buttons() func _hide_buttons(): - if not State.reduce_motion: $AnimationPlayer.play_backwards("show_buttons") + if is_inside_tree(): + if not State.reduce_motion: $AnimationPlayer.play_backwards("show_buttons") func _show_buttons(): - if State.reduce_motion: - $AnimationPlayer.play("show_buttons") + if is_inside_tree(): + if not State.reduce_motion: + $AnimationPlayer.play("show_buttons") + else: + $AnimationPlayer.play("RESET") else: $AnimationPlayer.play("RESET") @@ -106,4 +110,12 @@ func show(): tween.tween_property(self, "modulate", Color(1, 1, 1), 0.4) func _yoink_focus(): - State.request_focus(self, true) + return # fixme + if not has_focus: + State.request_focus_for(self, true) + +func _on_pick_button_pressed(): + hide() + print("card collected!") + emit_signal("card_collected") + State.drop_focus(self) diff --git a/src/logic-scenes/collectable/collectable_ui.tscn b/src/logic-scenes/collectable/collectable_ui.tscn index 57eede90..c2217bf8 100644 --- a/src/logic-scenes/collectable/collectable_ui.tscn +++ b/src/logic-scenes/collectable/collectable_ui.tscn @@ -171,6 +171,7 @@ libraries = { [connection signal="resized" from="Panel/Content/Buttons/VBoxContainer" to="Panel/Content/Buttons" method="_on_v_box_container_resized"] [connection signal="focus_entered" from="Panel/Content/Buttons/VBoxContainer/collect_or_listen" to="." method="_yoink_focus"] +[connection signal="pressed" from="Panel/Content/Buttons/VBoxContainer/collect_or_listen" to="." method="_on_pick_button_pressed"] [connection signal="focus_entered" from="Panel/Content/Buttons/VBoxContainer/Summary" to="." method="_yoink_focus"] [connection signal="focus_entered" from="Panel/Content/Buttons/VBoxContainer/skip" to="." method="_yoink_focus"] [connection signal="focus_entered" from="Panel/Content/Buttons/VBoxContainer/put_back" to="." method="_yoink_focus"] diff --git a/src/logic-scenes/collectable/import/old-mask.glb b/src/logic-scenes/collectable/import/old-mask.glb new file mode 100644 index 00000000..bc9b4177 --- /dev/null +++ b/src/logic-scenes/collectable/import/old-mask.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a301ac3f55787b5e80a6da93318dcbd6552d6ea898af29c395bb8d4941be8f7 +size 369876 diff --git a/src/logic-scenes/collectable/import/old-mask.glb.import b/src/logic-scenes/collectable/import/old-mask.glb.import new file mode 100644 index 00000000..b3d28435 --- /dev/null +++ b/src/logic-scenes/collectable/import/old-mask.glb.import @@ -0,0 +1,51 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bixvvxjlt1g24" +path="res://.godot/imported/old-mask.glb-1316622a7340cbc9493e3e0eb9b621cd.scn" + +[deps] + +source_file="res://logic-scenes/collectable/import/old-mask.glb" +dest_files=["res://.godot/imported/old-mask.glb-1316622a7340cbc9493e3e0eb9b621cd.scn"] + +[params] + +nodes/root_type="Node3D" +nodes/root_name="Scene Root" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +import_script/path="" +_subresources={ +"materials": { +"desk-utilities": { +"use_external/enabled": true, +"use_external/path": "res://base-environments/youth_room/import/materials/desk-utilities.tres" +} +}, +"meshes": { +"old-mask_old_mask": { +"generate/lightmap_uv": 0, +"generate/lods": 0, +"generate/shadow_meshes": 0, +"lods/normal_merge_angle": 60.0, +"lods/normal_split_angle": 25.0, +"save_to_file/enabled": true, +"save_to_file/make_streamable": "", +"save_to_file/path": "res://logic-scenes/collectable/import/old-mask.res" +} +} +} +gltf/embedded_image_handling=1 diff --git a/src/logic-scenes/collectable/import/old-mask.res b/src/logic-scenes/collectable/import/old-mask.res new file mode 100644 index 00000000..2447d034 Binary files /dev/null and b/src/logic-scenes/collectable/import/old-mask.res differ diff --git a/src/logic-scenes/player_controller/player_controller.gd b/src/logic-scenes/player_controller/player_controller.gd index b85d2a54..0ba9fee8 100644 --- a/src/logic-scenes/player_controller/player_controller.gd +++ b/src/logic-scenes/player_controller/player_controller.gd @@ -1,11 +1,11 @@ extends RigidBody3D -var has_focus: bool = false : +var has_focus: bool = false: set(focused): if has_focus != focused: if focused: - has_focus = State.request_focus(self) - if is_inside_tree() and has_focus: + has_focus = true + if is_inside_tree(): camera.make_current() get_viewport().gui_release_focus() Input.mouse_mode = Input.MOUSE_MODE_CAPTURED @@ -24,7 +24,6 @@ var has_focus: bool = false : else: jitter_strength = 0 has_focus = false - State.focus_cleared(self) sleeping = has_focus @@ -64,7 +63,7 @@ var has_entered:bool = false signal ui_exited func _ready(): - if has_focus: _handle_jitter(0) + _handle_jitter(0) func _process(delta): @@ -77,7 +76,7 @@ func _process(delta): emit_signal("ui_exited") has_entered = false if Input.is_action_just_pressed("ui_accept"): - State.assign_focus_to(focus_ray.get_collider()) + State.pass_focus_to(focus_ray.get_collider()) func _physics_process(delta:float): if has_focus: @@ -108,7 +107,7 @@ func _handle_movement(delta:float): func _handle_rotation(delta:float): var smoothness = min(3, 60.0/Engine.get_frames_per_second()) - var input_speed = Vector2( Input.get_action_strength("look_right")-Input.get_action_strength("look_left"), Input.get_action_strength("look_down")-Input.get_action_strength("look_up")) * gamepad_response + var input_speed = Vector2( Input.get_action_strength("look_right")-Input.get_action_strength("look_left"), Input.get_action_strength("look_up")-Input.get_action_strength("look_down")) * gamepad_response if current_mouse_rotation.length()>0: input_speed = current_mouse_rotation @@ -150,14 +149,14 @@ func _unhandled_input(event:InputEvent): _handle_mouse_input(event) get_viewport().set_input_as_handled() if event is InputEventMouseButton and has_entered: - has_focus = false - get_viewport().set_input_as_handled() - if event.is_action("ui_accept"): - State.assign_focus_to(focus_ray.get_collider()) + State.free_focus() get_viewport().set_input_as_handled() + #if event.is_action_pressed("ui_accept"): + # State.pass_focus_to(focus_ray.get_collider()) + # get_viewport().set_input_as_handled() func _on_empty_click(): - State.pass_focus_to(self) + State.request_focus_for(self, true) func _on_bed_enter(_body): if not (crouched or on_crouch_cooldown): diff --git a/src/logic-scenes/player_controller/player_controller.tscn b/src/logic-scenes/player_controller/player_controller.tscn index 1832b4eb..387a0ad1 100644 --- a/src/logic-scenes/player_controller/player_controller.tscn +++ b/src/logic-scenes/player_controller/player_controller.tscn @@ -1,10 +1,18 @@ -[gd_scene load_steps=8 format=3 uid="uid://mkccbig41bqb"] +[gd_scene load_steps=11 format=3 uid="uid://mkccbig41bqb"] [ext_resource type="Script" path="res://logic-scenes/player_controller/player_controller.gd" id="1_0b4mi"] +[ext_resource type="ArrayMesh" uid="uid://bfc3d4g40n0wy" path="res://logic-scenes/collectable/import/old-mask.res" id="2_vnej0"] [sub_resource type="PhysicsMaterial" id="10"] friction = 0.0 +[sub_resource type="GDScript" id="GDScript_r0b38"] +script/source = "extends MeshInstance3D + +func _process(delta): + rotate_y(delta/3) +" + [sub_resource type="SphereShape3D" id="8"] radius = 0.307047 @@ -34,6 +42,114 @@ tracks/1/keys = { "update": 0, "values": [Vector3(0, 0, 0)] } +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Yaw/Pitch/Mount/Camera3D/memory mount/old_mask2:rotation") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(5.96046e-08, 1.74846e-07, -7.10543e-15)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Yaw/Pitch/Mount/Camera3D/memory mount:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0.11067, -0.0251684, -0.309266)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Yaw/Pitch/Mount/Camera3D/memory mount:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(1.49012e-07, 0, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Yaw/Pitch/Mount/Camera3D/SpotLight3D:light_energy") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.4] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Yaw/Pitch/Mount/Camera3D/SpotLight3D2:light_energy") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.5] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Yaw/Pitch/Mount/Camera3D/SpotLight3D:visible") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Yaw/Pitch/Mount/Camera3D/SpotLight3D2:layers") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [1] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Yaw/Pitch/Mount/Camera3D/SpotLight3D2:visible") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Yaw/Pitch/Mount/Camera3D/memory mount/old_mask2:visible") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} [sub_resource type="Animation" id="12"] resource_name = "crouch" @@ -63,6 +179,106 @@ tracks/1/keys = { "values": [Vector3(0, 0, 0), Vector3(-30, 0, -10), Vector3(-20, 0, 3), Vector3(0, 0, 0), Vector3(0, 0, 0)] } +[sub_resource type="Animation" id="Animation_5o0sk"] +resource_name = "mask_reveal" +length = 3.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Yaw/Pitch/Mount/Camera3D/memory mount:position") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 3), +"transitions": PackedFloat32Array(0.366021, 1), +"update": 0, +"values": [Vector3(0.376781, -0.521269, -0.513588), Vector3(0.18, -0.025, -0.309)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Yaw/Pitch/Mount/Camera3D/memory mount:rotation") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 3), +"transitions": PackedFloat32Array(1, 0.378929), +"update": 0, +"values": [Vector3(0, -0.698132, 0), Vector3(1.49012e-07, 0, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Yaw/Pitch/Mount/Camera3D/SpotLight3D:light_energy") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0.8, 3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.4] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Yaw/Pitch/Mount/Camera3D/SpotLight3D2:light_energy") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0.2, 3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 1.5] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Yaw/Pitch/Mount/Camera3D/SpotLight3D:visible") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Yaw/Pitch/Mount/Camera3D/SpotLight3D2:layers") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [1] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Yaw/Pitch/Mount/Camera3D/SpotLight3D2:visible") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Yaw/Pitch/Mount/Camera3D/memory mount/old_mask2:visible") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} + [sub_resource type="Animation" id="14"] resource_name = "stand_up" length = 3.0 @@ -95,6 +311,7 @@ tracks/1/keys = { _data = { "RESET": SubResource("11"), "crouch": SubResource("12"), +"mask_reveal": SubResource("Animation_5o0sk"), "stand_up": SubResource("14") } @@ -126,12 +343,49 @@ collision_mask = 17 collide_with_areas = true collide_with_bodies = false +[node name="memory mount" type="Node3D" parent="Yaw/Pitch/Mount/Camera3D"] +transform = Transform3D(0.8, 0, 0, 0, 0.8, -7.15258e-08, 0, 1.1921e-07, 0.48, 0.11067, -0.0251684, -0.309266) + +[node name="old_mask2" type="MeshInstance3D" parent="Yaw/Pitch/Mount/Camera3D/memory mount"] +transform = Transform3D(1, 1.75271e-14, 1.74846e-07, -7.10543e-15, 1, -5.96046e-08, -1.74846e-07, 5.96046e-08, 1, 0.0250661, 0, 0) +visible = false +mesh = ExtResource("2_vnej0") +skeleton = NodePath("") +script = SubResource("GDScript_r0b38") + +[node name="OmniLight3D" type="OmniLight3D" parent="Yaw/Pitch/Mount/Camera3D/memory mount/old_mask2"] +transform = Transform3D(1, -3.8743e-07, 5.96046e-08, 3.57628e-07, 1, 8.9407e-08, -5.96046e-08, -8.9407e-08, 1, 0.083235, -0.219628, 0.176047) +light_color = Color(0.972549, 0.752941, 0.592157, 1) +light_energy = 0.1 +light_specular = 0.0 +omni_range = 0.457129 +omni_attenuation = 0.659754 + +[node name="SpotLight3D" type="SpotLight3D" parent="Yaw/Pitch/Mount/Camera3D"] +transform = Transform3D(0.584488, 0.621177, -0.522028, 0.363951, 0.374307, 0.852897, 0.725199, -0.688501, -0.00729993, 0.0601956, 0.21754, -0.271749) +visible = false +light_color = Color(0.97599, 0.669299, 0.509314, 1) +light_energy = 0.4 +light_size = 0.1 +shadow_enabled = true +spot_range = 0.394683 +spot_angle = 27.7927 + +[node name="SpotLight3D2" type="SpotLight3D" parent="Yaw/Pitch/Mount/Camera3D"] +transform = Transform3D(0.456583, 0.0747244, 0.886537, 0.819566, -0.423063, -0.386432, 0.346185, 0.903014, -0.254405, 0.475638, -0.147216, -0.329875) +visible = false +light_color = Color(0.317647, 0.427451, 1, 1) +light_energy = 1.5 +light_size = 0.1 +shadow_enabled = true +spot_range = 0.624277 +spot_angle = 22.1657 + [node name="PlayerCollision" type="CollisionShape3D" parent="."] transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0.322255, 0) shape = SubResource("8") [node name="PlayerAnimationPlayer" type="AnimationPlayer" parent="."] -autoplay = "RESET" libraries = { "": SubResource("AnimationLibrary_xbx3w") } diff --git a/src/logic-scenes/startup/startup.tscn b/src/logic-scenes/startup/startup.tscn index e814f558..d2196bb8 100644 --- a/src/logic-scenes/startup/startup.tscn +++ b/src/logic-scenes/startup/startup.tscn @@ -1,9 +1,9 @@ [gd_scene load_steps=10 format=3 uid="uid://gldtxysavetf"] -[ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://logic-scenes/startup/start_frame.png" id="1_8giso"] +[ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="1_8giso"] [ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/messy.theme" id="1_b01tw"] [ext_resource type="Script" path="res://logic-scenes/startup/volume_sliders.gd" id="3_q2gbh"] -[ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://logic-scenes/startup/start_bottom.png" id="3_s5ssh"] +[ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="3_s5ssh"] [sub_resource type="GDScript" id="GDScript_ia432"] script/source = "extends TabContainer diff --git a/src/logic-scenes/themes/messy.theme b/src/logic-scenes/themes/messy.theme index 831306c2..c2deff12 100644 Binary files a/src/logic-scenes/themes/messy.theme and b/src/logic-scenes/themes/messy.theme differ diff --git a/src/main.tscn b/src/main.tscn index 990fc15a..68d8ec99 100644 --- a/src/main.tscn +++ b/src/main.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=8 format=3 uid="uid://befxf8uruwnrl"] [ext_resource type="Texture2D" uid="uid://balmcptv73l2j" path="res://dev-util/menu_background.png" id="1_0oiki"] -[ext_resource type="PackedScene" uid="uid://df3ppd08g84f3" path="res://logic-scenes/startup/startup.tscn" id="1_v5rpm"] +[ext_resource type="PackedScene" uid="uid://gldtxysavetf" path="res://logic-scenes/startup/startup.tscn" id="1_v5rpm"] [ext_resource type="PackedScene" uid="uid://b3b0gyvklqn50" path="res://base-environments/youth_room/youth_room.tscn" id="2_23ia3"] [ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/messy.theme" id="3_8hrj7"] [ext_resource type="Texture2D" uid="uid://d3ewjumh0b0g6" path="res://logic-scenes/main menu/logo.png" id="4_kslkj"] @@ -23,6 +23,8 @@ texture = ExtResource("1_0oiki") [node name="Startup Menu" parent="." instance=ExtResource("1_v5rpm")] visible = false +[node name="youth room" parent="." instance=ExtResource("2_23ia3")] + [node name="Main Menu" type="Panel" parent="."] anchors_preset = 15 anchor_right = 1.0 @@ -63,7 +65,5 @@ grow_vertical = 2 layout_mode = 2 text = "new Game" -[node name="youth room" parent="." instance=ExtResource("2_23ia3")] - -[connection signal="pressed" from="Main Menu/PanelContainer/Button" to="Main Menu" method="hide"] [connection signal="pressed" from="Main Menu/PanelContainer/Button" to="youth room" method="start"] +[connection signal="pressed" from="Main Menu/PanelContainer/Button" to="Main Menu" method="hide"] diff --git a/src/project.godot b/src/project.godot index e8ee0b39..c4203ab5 100644 --- a/src/project.godot +++ b/src/project.godot @@ -38,6 +38,14 @@ theme/custom="res://logic-scenes/themes/messy.theme" [input] +ui_accept={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":4194309,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":4194310,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":32,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null) +] +} player_right={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null) diff --git a/src/singletons/global_state.gd b/src/singletons/global_state.gd index e5d38be3..16ff66fc 100644 --- a/src/singletons/global_state.gd +++ b/src/singletons/global_state.gd @@ -12,57 +12,54 @@ var allow_skipping: bool = false var focus_list:Array = [] var lock_focus: bool = false -func request_focus(new_focus: Node, reclaim_focus: bool = false) -> bool: - - assert(is_instance_valid(new_focus)) +# Intented for use when me wants focus for itself, can reclaim focus, thus dropping the stack that focused. +func request_focus_for(me: Object, reclaim: bool = false) -> bool: + if reclaim: + focus_list.front().has_focus = false + if focus_list.has(me): + while focus_list.pop_front() != me: break + me.has_focus = true + return me.has_focus + push_warning(me, " wanted to reclaim focus, but was not on list.") + return pass_focus_to(me) + +# Element no longer wants focus, if Element itself is also dropped, this option can be chosen aswell. +func drop_focus(of:Object, dropObject: bool = false) -> bool: if lock_focus or get_tree().paused: - push_warning(new_focus.name, " attempted to get focus while tree was paused or fokus had been locked.") - return false + push_error(of, " wanted to drop focus while it was locked or tree is paused.") - if not focus_list.size() == 0: _pass_focus_of(focus_list[0]) + if not dropObject: of.has_focus = false - if reclaim_focus: - if focus_list.has(new_focus): - while not focus_list[0] == new_focus: focus_list.pop_front() - return true - else: - focus_list.push_front(new_focus) - push_warning(new_focus.name, " attempted to reclaim focus it did not previousely have.") - return true + focus_list.erase(of) + + focus_list.front().has_focus = true + + return false + +func get_current_focus(): return focus_list.front() + +# Used to put a new target on top of the Focus Stack. +func pass_focus_to(target:Object) -> bool: + if "focus_forward" in target: + pass_focus_to(target.focus_forward) + if lock_focus or get_tree().paused: + push_error(target, " requested focus while it was locked or tree is paused.") + elif !is_instance_valid(target): + push_error("Focus instance not valid") + elif !"has_focus" in target: + push_error(target, " has no has focus method") else: - focus_list.append(new_focus) - return true + if not focus_list.front() == null: focus_list.front().has_focus = false + target.has_focus = true + if target.has_focus: + focus_list.push_front(target) + assert(focus_list.size() < 100) + return true + return false -func assign_focus_to(focusable: Node) -> bool: - if "focus_forward" in focusable: - assign_focus_to(focusable.focus_forward) - if "has_focus" in focusable: - if not focus_list.size() == 0: - _pass_focus_of(focus_list[0]) - focusable.has_focus = true - return true - else: return false +# Currently focused element loses focus, but remains in stack. +func free_focus(): + if not focus_list.front() == null: focus_list.front().has_focus = false -func pass_focus_to_unkown(from: Node): - pass - -func drop_own_focus(node: Node): - if focus_list[0] == node: - focus_list.pop_front().has_focus = false - assert(focus_list.size() == 0) - focus_list[0].has_focus = true - else: - push_warning(node.name + " attempted to drop focus while not owning it.") - -func clear_focus_stack_and_focus_on(focus: Node): - assert(is_instance_valid(focus)) - if focus_list.size() > 0: focus_list[0].has_focus = false - focus_list = [focus] - focus.has_focus = true - -func _pass_focus_of(previous_focus: Node): - previous_focus.has_focus = false - -func focus_cleared(from: Node): - if from == focus_list[0]: - push_warning(from.name, " cleared focus without validating!") +func queue_for_focus(target: Object, index: int): + focus_list.insert(index, target)