From fe115ecdd149e9a01901dd069eff94ab10fe95b9 Mon Sep 17 00:00:00 2001 From: betalars Date: Tue, 10 Jun 2025 21:09:47 +0200 Subject: [PATCH] hitfixes: remove unintentional audio mute during childhood scene, support skip events in burner ui, rework focus handling for player and collectables --- .../transition/first_platform.tscn | 3 +- .../youth_room/Collectable.gd | 18 ++-- .../youth_room/scnees/childhood.tscn | 102 +++++++----------- .../youth_room/scnees/voice_training.tscn | 78 +++++++------- .../youth_room/youth_room.tscn | 20 ++-- src/logic-scenes/card_burner/card_burner.tscn | 1 + src/logic-scenes/card_picker/card_picker.gd | 2 +- .../collectable/new_collectable_ui.gd | 8 +- .../player_controller/player_controller.gd | 47 ++++++-- .../player_controller/player_controller.tscn | 15 ++- 10 files changed, 161 insertions(+), 133 deletions(-) diff --git a/src/base-environments/transition/first_platform.tscn b/src/base-environments/transition/first_platform.tscn index 4c3dea0..5e52c2c 100644 --- a/src/base-environments/transition/first_platform.tscn +++ b/src/base-environments/transition/first_platform.tscn @@ -699,7 +699,8 @@ autoplay = "trailer" material_override = ExtResource("11_sy31e") [node name="subway_train" parent="." instance=ExtResource("12_dgbje")] -transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -20.3734, -0.125, -8.52174) +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -6.44337, -0.125, -8.52174) +visible = false [node name="VoxelGI" type="VoxelGI" parent="subway_train"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -25.5427, 1.26147, 5.72205e-06) diff --git a/src/base-environments/youth_room/Collectable.gd b/src/base-environments/youth_room/Collectable.gd index b20db10..afe47ec 100644 --- a/src/base-environments/youth_room/Collectable.gd +++ b/src/base-environments/youth_room/Collectable.gd @@ -10,7 +10,6 @@ var revealed: bool = false: revealed = reveal if reveal: wrapper.show() - ui.reveal() else: ui.vanish() await get_tree().create_timer(1).timeout @@ -33,12 +32,17 @@ func _on_mouse_exited(): ui.is_collapsed = true has_mouse = false -func reveal(): - revealed = true - # TODO: needs to check if it has mouse or player collider! - await get_tree().create_timer(10.0).timeout - if not has_mouse: - revealed = false +func try_reveal(for_player: Player) -> bool: + print("reveal ui!") + revealed = ui.try_reveal() + if revealed: + call_deferred("wait_for_ui_exit", for_player) + return revealed + + +func wait_for_ui_exit(for_player: Player): + await for_player.ui_exited + collapse() func collapse(): _on_mouse_exited() diff --git a/src/base-environments/youth_room/scnees/childhood.tscn b/src/base-environments/youth_room/scnees/childhood.tscn index 488b66b..1d11e7f 100644 --- a/src/base-environments/youth_room/scnees/childhood.tscn +++ b/src/base-environments/youth_room/scnees/childhood.tscn @@ -135,18 +135,6 @@ tracks/5/keys = { "update": 0, "values": [Color(1, 1, 1, 1)] } -tracks/6/type = "value" -tracks/6/imported = false -tracks/6/enabled = true -tracks/6/path = NodePath("%AnimationPlayer/Text:volume_db") -tracks/6/interp = 1 -tracks/6/loop_wrap = true -tracks/6/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [0.0] -} [sub_resource type="Animation" id="Animation_bgeog"] resource_name = "de" @@ -387,57 +375,6 @@ tracks/7/keys = { "update": 0, "values": [Color(1, 1, 1, 1)] } -tracks/8/type = "value" -tracks/8/imported = false -tracks/8/enabled = true -tracks/8/path = NodePath("%AnimationPlayer/Text:volume_db") -tracks/8/interp = 1 -tracks/8/loop_wrap = true -tracks/8/keys = { -"times": PackedFloat32Array(8.04, 9.95), -"transitions": PackedFloat32Array(1, 1), -"update": 0, -"values": [0.0, -80.0] -} - -[sub_resource type="Animation" id="Animation_x0d5q"] -resource_name = "vanish" -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("../../..:visible") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 1), -"transitions": PackedFloat32Array(1, 1), -"update": 1, -"values": [true, false] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("../../..:modulate") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0, 1), -"transitions": PackedFloat32Array(1, 1), -"update": 0, -"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] -} -tracks/2/type = "value" -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/path = NodePath(".:rotation") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/keys = { -"times": PackedFloat32Array(0, 1), -"transitions": PackedFloat32Array(2.73208, 1), -"update": 0, -"values": [0.349066, 0.698132] -} [sub_resource type="Animation" id="Animation_51c6s"] resource_name = "ini" @@ -515,6 +452,45 @@ tracks/5/keys = { "values": [Color(1, 1, 1, 1)] } +[sub_resource type="Animation" id="Animation_x0d5q"] +resource_name = "vanish" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("../../..:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("../../..:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:rotation") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(2.73208, 1), +"update": 0, +"values": [0.349066, 0.698132] +} + [sub_resource type="AnimationLibrary" id="AnimationLibrary_dc6th"] _data = { &"RESET": SubResource("Animation_ytihj"), diff --git a/src/base-environments/youth_room/scnees/voice_training.tscn b/src/base-environments/youth_room/scnees/voice_training.tscn index 069885b..22b74e1 100644 --- a/src/base-environments/youth_room/scnees/voice_training.tscn +++ b/src/base-environments/youth_room/scnees/voice_training.tscn @@ -435,45 +435,6 @@ tracks/11/keys = { "values": [Vector3(0.0349066, -2.51327, -0.00174533), Vector3(-0.0872665, -2.08043, 0.171042)] } -[sub_resource type="Animation" id="Animation_x0d5q"] -resource_name = "vanish" -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("../../..:visible") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 1), -"transitions": PackedFloat32Array(1, 1), -"update": 1, -"values": [true, false] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("../../..:modulate") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0, 1), -"transitions": PackedFloat32Array(1, 1), -"update": 0, -"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] -} -tracks/2/type = "value" -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/path = NodePath(".:rotation") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/keys = { -"times": PackedFloat32Array(0, 1), -"transitions": PackedFloat32Array(2.73208, 1), -"update": 0, -"values": [0.349066, 0.698132] -} - [sub_resource type="Animation" id="Animation_kn83e"] resource_name = "ini" length = 0.001 @@ -598,6 +559,45 @@ tracks/9/keys = { "values": [Vector3(-0.0872665, -2.08043, 0.171042)] } +[sub_resource type="Animation" id="Animation_x0d5q"] +resource_name = "vanish" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("../../..:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("../../..:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:rotation") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(2.73208, 1), +"update": 0, +"values": [0.349066, 0.698132] +} + [sub_resource type="AnimationLibrary" id="AnimationLibrary_dc6th"] _data = { &"RESET": SubResource("Animation_ytihj"), diff --git a/src/base-environments/youth_room/youth_room.tscn b/src/base-environments/youth_room/youth_room.tscn index 15df9d6..b772fbe 100644 --- a/src/base-environments/youth_room/youth_room.tscn +++ b/src/base-environments/youth_room/youth_room.tscn @@ -1881,6 +1881,7 @@ omni_range = 16.8518 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 +collision_mask = 0 script = ExtResource("11_6fwv8") [node name="collectable_particles" parent="logic/MaskMemento" instance=ExtResource("12_qxx2k")] @@ -1916,6 +1917,7 @@ shape = SubResource("CapsuleShape3D_72g2i") unique_name_in_owner = true transform = Transform3D(0.86043, 0, -0.509567, 0, 1, 0, 0.509567, 0, 0.86043, 1.36586, 1.17096, -0.636599) collision_layer = 16 +collision_mask = 0 script = ExtResource("11_6fwv8") [node name="collectable_particles" parent="logic/ClothesMemento" instance=ExtResource("12_qxx2k")] @@ -1954,6 +1956,7 @@ shape = SubResource("CapsuleShape3D_72g2i") 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 +collision_mask = 0 script = ExtResource("11_6fwv8") [node name="collectable_particles" parent="logic/ComicMemento" instance=ExtResource("12_qxx2k")] @@ -1992,8 +1995,8 @@ shape = SubResource("CapsuleShape3D_72g2i") unique_name_in_owner = true process_mode = 4 transform = Transform3D(0.86043, 0, -0.509567, 0, 1, 0, 0.509567, 0, 0.86043, 0.122875, 4.03863, -0.132712) -visible = false collision_layer = 16 +collision_mask = 0 script = ExtResource("11_6fwv8") [node name="collectable_particles" parent="logic/CeilingMemento" instance=ExtResource("12_qxx2k")] @@ -2031,6 +2034,7 @@ shape = SubResource("SphereShape3D_c7buh") 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 +collision_mask = 0 script = ExtResource("11_6fwv8") [node name="collectable_particles" parent="logic/MindBoard" instance=ExtResource("12_qxx2k")] @@ -2139,32 +2143,32 @@ bus = &"outside-rain" [node name="visuals" type="Node3D" parent="."] -[node name="CSGCombiner3D" type="CSGCombiner3D" parent="visuals"] +[node name="Shadow" type="CSGCombiner3D" parent="visuals"] cast_shadow = 3 calculate_tangents = false -[node name="CSGBox3D" type="CSGBox3D" parent="visuals/CSGCombiner3D"] +[node name="CSGBox3D" type="CSGBox3D" parent="visuals/Shadow"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.34613, 1.23087, 2.97923) size = Vector3(5.26758, 2.69583, 0.137207) -[node name="CSGBox3D2" type="CSGBox3D" parent="visuals/CSGCombiner3D"] +[node name="CSGBox3D2" type="CSGBox3D" parent="visuals/Shadow"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.441227, 2.48778, 0.766643) size = Vector3(3.47876, 0.182022, 4.56238) -[node name="CSGBox3D6" type="CSGBox3D" parent="visuals/CSGCombiner3D"] +[node name="CSGBox3D6" type="CSGBox3D" parent="visuals/Shadow"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.21313, 1.23861, 0.766643) size = Vector3(0.170044, 2.68037, 4.56238) -[node name="CSGBox3D4" type="CSGBox3D" parent="visuals/CSGCombiner3D"] +[node name="CSGBox3D4" type="CSGBox3D" parent="visuals/Shadow"] transform = Transform3D(0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 0, 0, 1, 3.1589, 1.73312, 0.766643) size = Vector3(2.57013, 0.182022, 4.56238) -[node name="CSGBox3D5" type="CSGBox3D" parent="visuals/CSGCombiner3D"] +[node name="CSGBox3D5" type="CSGBox3D" parent="visuals/Shadow"] transform = Transform3D(0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 0, 0, 1, 3.09781, 1.7764, -0.332882) operation = 2 size = Vector3(1.25306, 0.312046, 0.893661) -[node name="CSGBox3D3" type="CSGBox3D" parent="visuals/CSGCombiner3D"] +[node name="CSGBox3D3" type="CSGBox3D" parent="visuals/Shadow"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.977913, 1.52551, 2.97298) operation = 2 calculate_tangents = false diff --git a/src/logic-scenes/card_burner/card_burner.tscn b/src/logic-scenes/card_burner/card_burner.tscn index 5be7936..bb91cb0 100644 --- a/src/logic-scenes/card_burner/card_burner.tscn +++ b/src/logic-scenes/card_burner/card_burner.tscn @@ -185,6 +185,7 @@ offset_bottom = 244.0 grow_horizontal = 2 [node name="ActionPrompt" type="TextureRect" parent="Control/HSplitContainer"] +unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 texture = ExtResource("3_ckmi5") diff --git a/src/logic-scenes/card_picker/card_picker.gd b/src/logic-scenes/card_picker/card_picker.gd index 7caebdf..ee09685 100644 --- a/src/logic-scenes/card_picker/card_picker.gd +++ b/src/logic-scenes/card_picker/card_picker.gd @@ -199,7 +199,7 @@ func pick(id: int): for anim in anim_players: anim.play("unshuffle") - await get_tree().create_timer(3).timeout + await yield_to if not card_anim_skipped: transition() func transition(): diff --git a/src/logic-scenes/collectable/new_collectable_ui.gd b/src/logic-scenes/collectable/new_collectable_ui.gd index 77cfee0..b4eab66 100644 --- a/src/logic-scenes/collectable/new_collectable_ui.gd +++ b/src/logic-scenes/collectable/new_collectable_ui.gd @@ -165,13 +165,15 @@ func update_state(): is_exit = is_exit _on_context_updated() -func reveal(): - if is_exit and not State.active_save_game.is_childhood_board_complete: return +func try_reveal() -> bool: + if is_exit and not State.active_save_game.is_childhood_board_complete: return false if not visible: update_state() visible = true animation_player.play("reveal") - + return true + return false + #func _process(_delta: float) -> void: # if not visible or Engine.is_editor_hint(): return # if Input.is_action_just_pressed("collect_memento_ui"): diff --git a/src/logic-scenes/player_controller/player_controller.gd b/src/logic-scenes/player_controller/player_controller.gd index 4170ee9..2026e28 100644 --- a/src/logic-scenes/player_controller/player_controller.gd +++ b/src/logic-scenes/player_controller/player_controller.gd @@ -60,6 +60,7 @@ var on_crouch_cooldown:bool = false @onready var mount: Node3D = $Yaw/Pitch/Mount @onready var camera: Camera3D = $Yaw/Pitch/Mount/Camera3D @onready var focus_ray: RayCast3D = $Yaw/Pitch/Mount/Camera3D/RayCast3D +@onready var ui_prober: Area3D = $Yaw/Pitch/Mount/Camera3D/UiProber var zoomed:bool = false: set(zoom): @@ -72,25 +73,21 @@ var zoomed:bool = false: zoom_tween.tween_property(camera, "fov", camera.fov*2.0, 0.5) zoomed = zoom signal ui_entered -var has_entered:bool = false signal ui_exited func _ready(): _handle_jitter(0) - + ui_prober.area_entered.connect(_on_ray_entered) + ui_prober.area_exited.connect(_on_ray_exited) func _process(_delta): - if focus_ray.get_collider() != null and not has_entered: - emit_signal("ui_entered") - has_entered = true - focus_ray.get_collider().reveal() - if has_stage: if has_entered: if focus_ray.get_collider() == null: - emit_signal("ui_exited") - has_entered = false + pass + #emit_signal("ui_exited") + #dhas_entered = false if Input.is_action_just_pressed("ui_accept"): State.pass_stage_to(focus_ray.get_collider()) else: @@ -98,7 +95,39 @@ func _process(_delta): zoomed = true elif Input.is_action_just_released("zoom_in_controller"): zoomed = false + +var has_entered:bool = false: + set(val): + if val != has_entered: + if val: + ui_entered.emit() + else: + ui_exited.emit() + has_entered = val + if not has_entered: + delay_passed = false +var delay_passed:bool = false + +func _on_ray_entered(_area): + if not has_entered: + var collision_object = focus_ray.get_collider() + if collision_object is InteractiveSprite: + has_entered = collision_object.try_reveal(self) + + await get_tree().create_timer(1.0).timeout + if focus_ray.get_collider() is InteractiveSprite: + delay_passed = true + else: + has_entered = false + else: + print("You are standing in front of a wall") + +func _on_ray_exited(area): + if delay_passed and area is InteractiveSprite: + has_entered = false + + func _physics_process(delta:float): if has_stage: _handle_movement(delta) diff --git a/src/logic-scenes/player_controller/player_controller.tscn b/src/logic-scenes/player_controller/player_controller.tscn index fdab39f..bcf8aa7 100644 --- a/src/logic-scenes/player_controller/player_controller.tscn +++ b/src/logic-scenes/player_controller/player_controller.tscn @@ -1,10 +1,13 @@ -[gd_scene load_steps=8 format=3 uid="uid://mkccbig41bqb"] +[gd_scene load_steps=9 format=3 uid="uid://mkccbig41bqb"] [ext_resource type="Script" uid="uid://bk618uyhghswx" path="res://logic-scenes/player_controller/player_controller.gd" id="1_0b4mi"] [sub_resource type="PhysicsMaterial" id="10"] friction = 0.0 +[sub_resource type="SeparationRayShape3D" id="SeparationRayShape3D_hpoj0"] +length = 1.29801 + [sub_resource type="SphereShape3D" id="8"] radius = 0.307047 @@ -125,7 +128,15 @@ current = true target_position = Vector3(0, 0, -1.3) collision_mask = 17 collide_with_areas = true -collide_with_bodies = false + +[node name="UiProber" type="Area3D" parent="Yaw/Pitch/Mount/Camera3D"] +transform = Transform3D(1, 0, 0, 0, 1, 2.98023e-08, 0, -2.98023e-08, 1, 0, 0, 0) +collision_layer = 0 +collision_mask = 16 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Yaw/Pitch/Mount/Camera3D/UiProber"] +transform = Transform3D(-1, 0, -8.74229e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0) +shape = SubResource("SeparationRayShape3D_hpoj0") [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)