From 6f22839c0e5e3149ddf23616165a09f5e8fb15f3 Mon Sep 17 00:00:00 2001 From: Sascha Date: Thu, 6 Jun 2024 09:43:15 +0200 Subject: [PATCH] interactable area and chest --- packed-scenes/chest.tscn | 189 +++++++++++++++++- packed-scenes/chest_with_gold.tscn | 8 +- packed-scenes/interaction.tscn | 11 + packed-scenes/interaction_manager.tscn | 20 ++ packed-scenes/knight_new.tscn | 100 ++++----- project.godot | 15 ++ resources/audio/chest_open.mp3 | Bin 0 -> 59712 bytes resources/audio/chest_open.mp3.import | 19 ++ resources/audio/take_gold.mp3 | Bin 0 -> 6120 bytes resources/audio/take_gold.mp3.import | 19 ++ resources/fonts/Kenney Future Narrow.ttf | Bin 0 -> 34180 bytes .../fonts/Kenney Future Narrow.ttf.import | 34 ++++ resources/themes/standard_theme.tres | 19 ++ scenes/game.tscn | 28 ++- scripts/audio_manager.gd | 7 + scripts/chest.gd | 33 ++- scripts/game_manager.gd | 11 +- scripts/interaction_area.gd | 13 ++ scripts/interaction_manager.gd | 43 ++++ scripts/item.gd | 3 +- scripts/player.gd | 2 + 21 files changed, 489 insertions(+), 85 deletions(-) create mode 100644 packed-scenes/interaction.tscn create mode 100644 packed-scenes/interaction_manager.tscn create mode 100644 resources/audio/chest_open.mp3 create mode 100644 resources/audio/chest_open.mp3.import create mode 100644 resources/audio/take_gold.mp3 create mode 100644 resources/audio/take_gold.mp3.import create mode 100644 resources/fonts/Kenney Future Narrow.ttf create mode 100644 resources/fonts/Kenney Future Narrow.ttf.import create mode 100644 resources/themes/standard_theme.tres create mode 100644 scripts/audio_manager.gd create mode 100644 scripts/interaction_area.gd create mode 100644 scripts/interaction_manager.gd diff --git a/packed-scenes/chest.tscn b/packed-scenes/chest.tscn index c431b54..39c7f80 100644 --- a/packed-scenes/chest.tscn +++ b/packed-scenes/chest.tscn @@ -1,7 +1,11 @@ -[gd_scene load_steps=11 format=4 uid="uid://bkh0th4s2lkcq"] +[gd_scene load_steps=21 format=4 uid="uid://bkh0th4s2lkcq"] [ext_resource type="Texture2D" uid="uid://dvkrw7iq1wb3d" path="res://resources/models/dungeon/dungeon_texture.png" id="1_3aqkg"] [ext_resource type="Script" path="res://scripts/chest.gd" id="1_jught"] +[ext_resource type="PackedScene" uid="uid://dt6h2uw768kid" path="res://resources/models/dungeon/coin_stack_medium.gltf" id="2_resnj"] +[ext_resource type="Script" path="res://scripts/interaction_area.gd" id="3_hc073"] +[ext_resource type="AudioStream" uid="uid://0ciymc2gsrej" path="res://resources/audio/chest_open.mp3" id="4_4q6dc"] +[ext_resource type="AudioStream" uid="uid://djf2sghx7jiqx" path="res://resources/audio/take_gold.mp3" id="6_dsxoh"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_p1j55"] resource_name = "texture" @@ -81,15 +85,173 @@ points = PackedVector3Array(-0.107852, -0.178405, 1.14663, 0.620402, 0.631019, 1 [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_jo100"] points = PackedVector3Array(-0.601464, 0.00410026, -0.579101, -0.780496, -2.38419e-07, -0.489792, -0.756106, 0.6, -0.473792, 0.756106, 0.6, -0.473792, -0.756106, 0.6, 0.471062, 0.780496, -2.38419e-07, -0.489792, -0.628065, 0.00283438, 0.577834, 0.756106, 0.6, 0.471062, 0.780496, -2.38419e-07, 0.485541, 0.610178, 0.512188, -0.587813, -0.634558, 0.512209, 0.583578, -0.780496, -2.38419e-07, 0.485541, -0.610178, 0.512188, -0.587813, 0.601464, 0.00410026, -0.579101, 0.634558, 0.512209, 0.583578, 0.535759, 0.0977865, 0.63093, -0.535892, 0.0977351, 0.631081, 0.628065, 0.00283438, 0.577834) +[sub_resource type="SphereShape3D" id="SphereShape3D_rt4xi"] +radius = 3.0 + +[sub_resource type="Animation" id="Animation_6mglt"] +resource_name = "open" +length = 2.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("chest/chest_lid:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0.4995, 1.4985), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector3(0, 0, 0), Vector3(-1.309, 0, 0)] +} +tracks/1/type = "audio" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("FSX") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_4q6dc") +}], +"times": PackedFloat32Array(0) +} +tracks/1/use_blend = true + +[sub_resource type="Animation" id="Animation_8vvhc"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("chest/chest_lid:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("coin_stack_medium:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("coin_stack_medium:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_dfx3x"] +resource_name = "close" +length = 2.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("chest/chest_lid:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1.4985), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector3(-1.309, 0, 0), Vector3(0, 0, 0)] +} +tracks/1/type = "audio" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("FSX") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("4_4q6dc") +}], +"times": PackedFloat32Array(0) +} +tracks/1/use_blend = true + +[sub_resource type="Animation" id="Animation_p5ip6"] +resource_name = "take_gold" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("coin_stack_medium:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2997, 0.5994), +"transitions": PackedFloat32Array(1, 1, 0.5), +"update": 0, +"values": [Vector3(0, 0, 0), Vector3(0, 0.6, 0), Vector3(0, 1, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("coin_stack_medium:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} +tracks/2/type = "audio" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("FSX") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"clips": [{ +"end_offset": 0.0, +"start_offset": 0.0, +"stream": ExtResource("6_dsxoh") +}], +"times": PackedFloat32Array(0.3663) +} +tracks/2/use_blend = true + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_joilv"] +_data = { +"RESET": SubResource("Animation_8vvhc"), +"close": SubResource("Animation_dfx3x"), +"open": SubResource("Animation_6mglt"), +"take_gold": SubResource("Animation_p5ip6") +} + [node name="Chest" type="Node3D"] script = ExtResource("1_jught") +state = 2 + +[node name="coin_stack_medium" parent="." instance=ExtResource("2_resnj")] +transform = Transform3D(0.75, 0, 0, 0, 0.75, 0, 0, 0, 0.75, 0, 0, 0) [node name="chest" type="MeshInstance3D" parent="."] mesh = SubResource("ArrayMesh_r7iwd") skeleton = NodePath("") -[node name="chest_lid" type="RigidBody3D" parent="chest"] -transform = Transform3D(1, 0, 0, 0, 0.258819, 0.965926, 0, -0.965926, 0.258819, 0, 0.5, -0.564883) +[node name="chest_lid" type="StaticBody3D" parent="chest"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, -0.564883) [node name="chest_lid" type="MeshInstance3D" parent="chest/chest_lid"] mesh = SubResource("ArrayMesh_ce6sc") @@ -105,3 +267,24 @@ shape = SubResource("ConvexPolygonShape3D_leqax") [node name="CollisionShape3D" type="CollisionShape3D" parent="chest/StaticBody3D"] shape = SubResource("ConvexPolygonShape3D_jo100") + +[node name="InteractionArea" type="Area3D" parent="."] +collision_layer = 0 +collision_mask = 4 +script = ExtResource("3_hc073") +action_name = "open" + +[node name="CollisionShape3D" type="CollisionShape3D" parent="InteractionArea"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) +shape = SubResource("SphereShape3D_rt4xi") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_joilv") +} + +[node name="FSX" type="AudioStreamPlayer3D" parent="."] +bus = &"SFX" + +[connection signal="body_entered" from="InteractionArea" to="InteractionArea" method="_on_body_entered"] +[connection signal="body_exited" from="InteractionArea" to="InteractionArea" method="_on_body_exited"] diff --git a/packed-scenes/chest_with_gold.tscn b/packed-scenes/chest_with_gold.tscn index 502a4d6..5c63800 100644 --- a/packed-scenes/chest_with_gold.tscn +++ b/packed-scenes/chest_with_gold.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=13 format=4 uid="uid://cxwpwnl17j7wd"] +[gd_scene load_steps=12 format=4 uid="uid://c8tec0l3liet0"] [ext_resource type="Texture2D" uid="uid://dvkrw7iq1wb3d" path="res://resources/models/dungeon/dungeon_texture.png" id="1_36wbj"] [ext_resource type="Script" path="res://scripts/chest.gd" id="1_eabtu"] @@ -82,9 +82,6 @@ points = PackedVector3Array(-0.107852, -0.178405, 1.14663, 0.620402, 0.631019, 1 [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_jo100"] points = PackedVector3Array(-0.601464, 0.00410026, -0.579101, -0.780496, -2.38419e-07, -0.489792, -0.756106, 0.6, -0.473792, 0.756106, 0.6, -0.473792, -0.756106, 0.6, 0.471062, 0.780496, -2.38419e-07, -0.489792, -0.628065, 0.00283438, 0.577834, 0.756106, 0.6, 0.471062, 0.780496, -2.38419e-07, 0.485541, 0.610178, 0.512188, -0.587813, -0.634558, 0.512209, 0.583578, -0.780496, -2.38419e-07, 0.485541, -0.610178, 0.512188, -0.587813, 0.601464, 0.00410026, -0.579101, 0.634558, 0.512209, 0.583578, 0.535759, 0.0977865, 0.63093, -0.535892, 0.0977351, 0.631081, 0.628065, 0.00283438, 0.577834) -[sub_resource type="SphereShape3D" id="SphereShape3D_ckb4i"] -radius = 2.0 - [node name="Chest_with_Gold" type="RigidBody3D"] collision_layer = 0 collision_mask = 4 @@ -117,7 +114,4 @@ shape = SubResource("ConvexPolygonShape3D_jo100") [node name="coin_stack_medium" parent="chest" instance=ExtResource("2_phmxy")] transform = Transform3D(0.75, 0, 0, 0, 0.75, 0, 0, 0, 0.75, 0, 0, 0) -[node name="InteractRadius" type="CollisionShape3D" parent="."] -shape = SubResource("SphereShape3D_ckb4i") - [connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/packed-scenes/interaction.tscn b/packed-scenes/interaction.tscn new file mode 100644 index 0000000..60a0d17 --- /dev/null +++ b/packed-scenes/interaction.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=2 format=3 uid="uid://daqtia6ln838s"] + +[ext_resource type="Script" path="res://scripts/interaction_area.gd" id="1_m1y0h"] + +[node name="Area3D" type="Area3D"] +collision_layer = 0 +collision_mask = 4 +script = ExtResource("1_m1y0h") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] +[connection signal="body_exited" from="." to="." method="_on_body_exited"] diff --git a/packed-scenes/interaction_manager.tscn b/packed-scenes/interaction_manager.tscn new file mode 100644 index 0000000..a99ff2b --- /dev/null +++ b/packed-scenes/interaction_manager.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=3 format=3 uid="uid://b23cxmfx1hioo"] + +[ext_resource type="Script" path="res://scripts/interaction_manager.gd" id="1_cc3nr"] +[ext_resource type="Theme" uid="uid://b3faaa6kmpthu" path="res://resources/themes/standard_theme.tres" id="1_i2bdl"] + +[node name="InteractionManager" type="Node2D"] +script = ExtResource("1_cc3nr") + +[node name="Label" type="Label" parent="."] +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -75.0 +offset_right = 75.0 +offset_bottom = 23.0 +grow_horizontal = 2 +theme = ExtResource("1_i2bdl") +text = "[E] or [Y] to interact" +horizontal_alignment = 1 +vertical_alignment = 1 diff --git a/packed-scenes/knight_new.tscn b/packed-scenes/knight_new.tscn index 83d6e40..6b943b3 100644 --- a/packed-scenes/knight_new.tscn +++ b/packed-scenes/knight_new.tscn @@ -31663,43 +31663,43 @@ bones/0/name = "root" bones/0/parent = -1 bones/0/rest = Transform3D(1, 0, 2.38419e-07, 0, 1, 0, -2.38419e-07, 0, 1, 0, 0, 0) bones/0/enabled = true -bones/0/position = Vector3(0, 0.000121526, 0) +bones/0/position = Vector3(0, 2.41992e-05, 0) bones/0/rotation = Quaternion(-1.16323e-11, 0.000338143, 2.01478e-11, 1) bones/0/scale = Vector3(1, 1, 1) bones/1/name = "hips" bones/1/parent = 0 bones/1/rest = Transform3D(1, 0, -2.38419e-07, 0, 1, 0, 2.38419e-07, 0, 1, 0, 0.405663, 0) bones/1/enabled = true -bones/1/position = Vector3(-4.83338e-19, 0.377602, -1.15236e-25) -bones/1/rotation = Quaternion(0.000323529, 0.0430087, -5.88971e-05, 0.999075) +bones/1/position = Vector3(-7.38028e-20, 0.37912, 4.99586e-19) +bones/1/rotation = Quaternion(0.000325067, 0.0430087, -5.8962e-05, 0.999075) bones/1/scale = Vector3(1, 1, 1) bones/2/name = "spine" bones/2/parent = 1 bones/2/rest = Transform3D(1, 0, 1.42109e-14, 0, 1, 0, -1.42109e-14, 0, 1, 0, 0.191978, 0) bones/2/enabled = true bones/2/position = Vector3(0, 0.191978, 0) -bones/2/rotation = Quaternion(0.000391297, 0.000311601, 2.56913e-06, 1) +bones/2/rotation = Quaternion(0.000396529, -0.000289032, 4.72153e-05, 1) bones/2/scale = Vector3(1, 1, 1) bones/3/name = "chest" bones/3/parent = 2 bones/3/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.374988, 0) bones/3/enabled = true bones/3/position = Vector3(0, 0.374988, 0) -bones/3/rotation = Quaternion(0.000149023, -9.25788e-05, 8.7603e-05, 1) +bones/3/rotation = Quaternion(0.000159246, -0.000103164, 3.32076e-05, 1) bones/3/scale = Vector3(1, 1, 1) bones/4/name = "upperarm.l" bones/4/parent = 3 bones/4/rest = Transform3D(0.0572842, 0.998357, -3.57628e-07, -3.57628e-07, 4.76837e-07, 1, 0.998357, -0.0572841, 4.76837e-07, 0.212007, 0.134132, 8.40246e-08) bones/4/enabled = true -bones/4/position = Vector3(0.212005, 0.134099, -0.000163966) -bones/4/rotation = Quaternion(-0.552527, -0.0628344, -0.65543, 0.511054) +bones/4/position = Vector3(0.211948, 0.13407, -0.000148596) +bones/4/rotation = Quaternion(-0.55649, -0.05814, -0.63764, 0.529485) bones/4/scale = Vector3(0.999999, 0.999999, 1) bones/5/name = "lowerarm.l" bones/5/parent = 4 bones/5/rest = Transform3D(0.993887, 0.110402, -1.19007e-07, -0.110402, 0.993887, 3.28831e-09, 1.18643e-07, 9.87045e-09, 1, -3.21966e-09, 0.241897, -1.19406e-07) bones/5/enabled = true bones/5/position = Vector3(-3.21966e-09, 0.241897, -1.19406e-07) -bones/5/rotation = Quaternion(1.49383e-08, -5.48466e-08, -0.479221, 0.877694) +bones/5/rotation = Quaternion(2.54806e-08, -5.37804e-08, -0.51068, 0.859771) bones/5/scale = Vector3(1, 1, 1) bones/6/name = "wrist.l" bones/6/parent = 5 @@ -31713,14 +31713,14 @@ bones/7/parent = 6 bones/7/rest = Transform3D(1, 1.09104e-05, 2.66204e-07, -1.09104e-05, 1, -2.40181e-09, -2.66204e-07, 2.39891e-09, 1, 9.08162e-13, 0.0738258, 2.22045e-16) bones/7/enabled = true bones/7/position = Vector3(9.08162e-13, 0.0738258, 2.22045e-16) -bones/7/rotation = Quaternion(-0.315857, -0.33068, 0.13427, 0.879123) +bones/7/rotation = Quaternion(-0.320803, -0.333883, 0.148833, 0.87376) bones/7/scale = Vector3(1, 1, 1) bones/8/name = "handslot.l" bones/8/parent = 7 bones/8/rest = Transform3D(-1.19209e-07, 1, -2.22045e-16, -1, -1.19209e-07, -4.55307e-09, -4.55307e-09, -2.22045e-16, 1, 8.34815e-10, 0.0961251, -0.0575001) bones/8/enabled = true bones/8/position = Vector3(5.50255e-10, 0.0961252, -0.0575) -bones/8/rotation = Quaternion(0.00147644, 0.00183216, -0.700464, 0.713684) +bones/8/rotation = Quaternion(0.000275242, 0.000655316, -0.7049, 0.709306) bones/8/scale = Vector3(1, 1, 1) bones/9/name = "1H_Sword_Offhand" bones/9/parent = 8 @@ -31761,15 +31761,15 @@ bones/14/name = "upperarm.r" bones/14/parent = 3 bones/14/rest = Transform3D(0.0572841, -0.998357, 4.47035e-07, 5.06639e-07, 4.17232e-07, 1, -0.998357, -0.0572842, 4.76837e-07, -0.212007, 0.134132, 8.40246e-08) bones/14/enabled = true -bones/14/position = Vector3(-0.211923, 0.134058, -0.000142039) -bones/14/rotation = Quaternion(-0.611953, 0.0826341, 0.62799, 0.473617) +bones/14/position = Vector3(-0.21198, 0.134087, -0.000157408) +bones/14/rotation = Quaternion(-0.614501, 0.078681, 0.613368, 0.489875) bones/14/scale = Vector3(0.999999, 0.999999, 1) bones/15/name = "lowerarm.r" bones/15/parent = 14 bones/15/rest = Transform3D(0.993887, -0.110402, 1.19007e-07, 0.110402, 0.993887, 3.28831e-09, -1.18643e-07, 9.87045e-09, 1, -7.12186e-11, 0.241897, -1.19406e-07) bones/15/enabled = true bones/15/position = Vector3(-7.12186e-11, 0.241897, -1.19406e-07) -bones/15/rotation = Quaternion(2.94223e-08, 4.73025e-08, 0.50259, 0.864525) +bones/15/rotation = Quaternion(1.41217e-08, 6.13461e-08, 0.532996, 0.846118) bones/15/scale = Vector3(1, 1, 1) bones/16/name = "wrist.r" bones/16/parent = 15 @@ -31783,14 +31783,14 @@ bones/17/parent = 16 bones/17/rest = Transform3D(1, -1.09104e-05, -1.78637e-07, 1.09104e-05, 1, -2.40084e-09, 1.78637e-07, 2.39889e-09, 1, 1.33227e-15, 0.0738258, 2.22045e-16) bones/17/enabled = true bones/17/position = Vector3(1.33227e-15, 0.0738258, 2.22045e-16) -bones/17/rotation = Quaternion(-0.314677, 0.305344, -0.215132, 0.872618) +bones/17/rotation = Quaternion(-0.319393, 0.309859, -0.230593, 0.865333) bones/17/scale = Vector3(1, 1, 1) bones/18/name = "handslot.r" bones/18/parent = 17 bones/18/rest = Transform3D(-1.19209e-07, -1, 2.22045e-16, 1, -1.19209e-07, -4.55301e-09, 4.55301e-09, -2.22045e-16, 1, -8.34815e-10, 0.0961251, -0.0575001) bones/18/enabled = true bones/18/position = Vector3(-1.55245e-08, 0.0961251, -0.0575) -bones/18/rotation = Quaternion(0.00408105, 0.00498637, 0.701992, 0.712156) +bones/18/rotation = Quaternion(0.00124669, 0.0016181, 0.704974, 0.70923) bones/18/scale = Vector3(1, 1, 1) bones/19/name = "1H_Sword" bones/19/parent = 18 @@ -31811,7 +31811,7 @@ bones/21/parent = 3 bones/21/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.268797, 0) bones/21/enabled = true bones/21/position = Vector3(0, 0.268797, 0) -bones/21/rotation = Quaternion(-0.000444694, -0.0316317, 5.30677e-05, 0.9995) +bones/21/rotation = Quaternion(-0.000435698, -0.0311305, 2.28049e-05, 0.999515) bones/21/scale = Vector3(1, 1, 1) bones/22/name = "Knight_Helmet" bones/22/parent = 21 @@ -31831,71 +31831,71 @@ bones/24/name = "upperleg.l" bones/24/parent = 1 bones/24/rest = Transform3D(1, -1.42215e-07, -2.65602e-08, -1.43052e-07, -0.999396, -0.0347412, -2.16035e-08, 0.0347411, -0.999398, 0.170945, 0.113587, 1.39233e-08) bones/24/enabled = true -bones/24/position = Vector3(0.170945, 0.113587, 0.000332375) -bones/24/rotation = Quaternion(0.991297, 0.0828455, 0.0772256, 0.0671017) +bones/24/position = Vector3(0.170945, 0.113587, 5.75323e-05) +bones/24/rotation = Quaternion(0.991697, 0.0828187, 0.0768218, 0.0614492) bones/24/scale = Vector3(1, 1, 1) bones/25/name = "lowerleg.l" bones/25/parent = 24 bones/25/rest = Transform3D(1, 1.6129e-07, 1.20856e-07, -1.3212e-07, 0.977433, -0.211248, -1.52201e-07, 0.211248, 0.977433, 3.57982e-09, 0.227077, -6.13986e-09) bones/25/enabled = true bones/25/position = Vector3(3.57982e-09, 0.227077, -6.13986e-09) -bones/25/rotation = Quaternion(0.338143, 5.85639e-08, -2.39959e-07, 0.941095) +bones/25/rotation = Quaternion(0.327776, 5.96002e-08, -2.26571e-07, 0.944755) bones/25/scale = Vector3(1, 1, 1) bones/26/name = "foot.l" bones/26/parent = 25 bones/26/rest = Transform3D(1, 4.64335e-08, 6.01239e-08, -7.59277e-08, 0.585515, 0.810661, 2.4383e-09, -0.810662, 0.585514, 1.83222e-10, 0.149437, 9.66537e-10) bones/26/enabled = true bones/26/position = Vector3(1.83222e-10, 0.149437, 9.66537e-10) -bones/26/rotation = Quaternion(-0.591901, -0.203368, 0.066273, 0.777111) +bones/26/rotation = Quaternion(-0.584909, -0.204047, 0.0640241, 0.782398) bones/26/scale = Vector3(1, 1, 0.999999) bones/27/name = "toes.l" bones/27/parent = 26 bones/27/rest = Transform3D(-1, -1.75424e-09, 1.51741e-07, -1.10452e-07, 0.694106, -0.719873, -1.04062e-07, -0.719873, -0.694106, -2.1306e-10, 0.16565, 5.17174e-09) bones/27/enabled = true bones/27/position = Vector3(-2.1306e-10, 0.16565, 5.17174e-09) -bones/27/rotation = Quaternion(-9.81783e-09, 0.920355, -0.391084, 7.8284e-08) +bones/27/rotation = Quaternion(-9.81294e-09, 0.920355, -0.391084, 7.82799e-08) bones/27/scale = Vector3(1, 1, 1) bones/28/name = "upperleg.r" bones/28/parent = 1 bones/28/rest = Transform3D(1, 1.49611e-07, -6.08626e-08, 1.47406e-07, -0.999396, -0.0347412, -6.60234e-08, 0.0347411, -0.999398, -0.170945, 0.113587, 1.39233e-08) bones/28/enabled = true -bones/28/position = Vector3(-0.170945, 0.113587, -0.000332344) -bones/28/rotation = Quaternion(0.993671, -0.0319328, 0.030236, 0.103365) +bones/28/position = Vector3(-0.170945, 0.113587, -5.75007e-05) +bones/28/rotation = Quaternion(0.994084, -0.0316526, 0.0303498, 0.099372) bones/28/scale = Vector3(1, 1, 1) bones/29/name = "lowerleg.r" bones/29/parent = 28 bones/29/rest = Transform3D(1, -1.6129e-07, -1.20856e-07, 1.3212e-07, 0.977433, -0.211248, 1.52201e-07, 0.211248, 0.977433, -3.57982e-09, 0.227077, -6.13986e-09) bones/29/enabled = true bones/29/position = Vector3(-3.57982e-09, 0.227077, -6.13986e-09) -bones/29/rotation = Quaternion(0.389819, -6.07636e-08, 2.72684e-07, 0.920892) +bones/29/rotation = Quaternion(0.377137, -6.0943e-08, 2.63572e-07, 0.926158) bones/29/scale = Vector3(1, 1, 1) bones/30/name = "foot.r" bones/30/parent = 29 bones/30/rest = Transform3D(1, -1.55132e-07, 2.93521e-07, -1.47115e-07, 0.585515, 0.810661, -2.97621e-07, -0.810662, 0.585514, -1.83221e-10, 0.149437, 9.66542e-10) bones/30/enabled = true bones/30/position = Vector3(-1.83221e-10, 0.149437, 9.66542e-10) -bones/30/rotation = Quaternion(-0.619068, 0.112917, -0.0186948, 0.776953) +bones/30/rotation = Quaternion(-0.613984, 0.113126, -0.0175029, 0.780974) bones/30/scale = Vector3(1, 1, 0.999999) bones/31/name = "toes.r" bones/31/parent = 30 bones/31/rest = Transform3D(-1, 1.75425e-09, -1.51741e-07, 1.10452e-07, 0.694106, -0.719873, 1.04062e-07, -0.719873, -0.694106, 2.13058e-10, 0.16565, 5.17174e-09) bones/31/enabled = true bones/31/position = Vector3(2.13058e-10, 0.16565, 5.17174e-09) -bones/31/rotation = Quaternion(3.01755e-08, 0.920321, -0.391164, -6.94879e-08) +bones/31/rotation = Quaternion(3.03024e-08, 0.920283, -0.391254, -6.95318e-08) bones/31/scale = Vector3(1, 1, 1) bones/32/name = "kneeIK.l" bones/32/parent = 0 bones/32/rest = Transform3D(1, -2.59151e-07, -3.89414e-07, -3.89414e-07, 0, -1, 2.59151e-07, 1, 0, 0.170945, 0.29231, 0.575812) bones/32/enabled = true -bones/32/position = Vector3(0.170945, 0.29234, 0.575842) +bones/32/position = Vector3(0.170945, 0.292574, 0.576076) bones/32/rotation = Quaternion(0.707107, -2.29309e-07, -4.60484e-08, 0.707107) bones/32/scale = Vector3(1, 1, 1) bones/33/name = "control-toe-roll.l" bones/33/parent = 0 bones/33/rest = Transform3D(1, 1.99485e-07, -3.55271e-14, 3.55271e-14, 0, 1, 1.99485e-07, -1, 0, 0.170945, 0.0259903, 0.245789) bones/33/enabled = true -bones/33/position = Vector3(0.202077, 0.0270646, 0.206499) -bones/33/rotation = Quaternion(-0.708087, -7.04115e-08, -7.06461e-08, 0.706125) +bones/33/position = Vector3(0.202077, 0.0260981, 0.20424) +bones/33/rotation = Quaternion(-0.705425, -7.06765e-08, -7.03851e-08, 0.708785) bones/33/scale = Vector3(1, 1, 1) bones/34/name = "control-heel-roll.l" bones/34/parent = 33 @@ -31936,15 +31936,15 @@ bones/39/name = "kneeIK.r" bones/39/parent = 0 bones/39/rest = Transform3D(1, -2.59151e-07, 1.50996e-07, 1.50996e-07, 0, -1, 2.59151e-07, 1, 0, -0.170945, 0.29231, 0.575812) bones/39/enabled = true -bones/39/position = Vector3(-0.170945, 0.29234, 0.575842) +bones/39/position = Vector3(-0.170945, 0.292574, 0.576076) bones/39/rotation = Quaternion(0.707107, -3.82453e-08, 1.45016e-07, 0.707107) bones/39/scale = Vector3(1, 1, 1) bones/40/name = "control-toe-roll.r" bones/40/parent = 0 bones/40/rest = Transform3D(1, 1.99485e-07, 0, 0, 0, 1, 1.99485e-07, -1, 0, -0.170945, 0.0259903, 0.245789) bones/40/enabled = true -bones/40/position = Vector3(-0.170945, 0.0263623, 0.243382) -bones/40/rotation = Quaternion(-0.704773, -7.07744e-08, -7.02843e-08, 0.709433) +bones/40/position = Vector3(-0.170945, 0.0259013, 0.245703) +bones/40/rotation = Quaternion(-0.707008, -7.05389e-08, -7.05187e-08, 0.707206) bones/40/scale = Vector3(1, 1, 1) bones/41/name = "control-heel-roll.r" bones/41/parent = 40 @@ -31992,8 +31992,8 @@ bones/47/name = "handIK.l" bones/47/parent = 0 bones/47/rest = Transform3D(-2.38419e-07, 1, 0, 0, 0, 1, 1, 2.38419e-07, 0, 0.713181, 1.10676, 2.54914e-07) bones/47/enabled = true -bones/47/position = Vector3(0.520733, 0.768148, -0.0567701) -bones/47/rotation = Quaternion(0.795256, 0.00162756, 0.606272, 0.000384112) +bones/47/position = Vector3(0.520733, 0.781964, -0.0566607) +bones/47/rotation = Quaternion(0.79535, 0.00174166, 0.606148, 0.000416028) bones/47/scale = Vector3(1, 1, 1) bones/48/name = "elbowIK.r" bones/48/parent = 0 @@ -32006,12 +32006,12 @@ bones/49/name = "handIK.r" bones/49/parent = 0 bones/49/rest = Transform3D(1.19209e-07, -1, -1.19209e-07, 0, -1.19209e-07, 1, -1, -1.19209e-07, 0, -0.713182, 1.10676, -8.51573e-08) bones/49/enabled = true -bones/49/position = Vector3(-0.510854, 0.768148, 0.0598484) -bones/49/rotation = Quaternion(0.759123, -0.00140932, -0.650946, 0.00012078) +bones/49/position = Vector3(-0.510854, 0.781964, 0.0599578) +bones/49/rotation = Quaternion(0.759224, -0.00152137, -0.650828, 0.000159227) bones/49/scale = Vector3(1, 1, 1) [node name="1H_Sword_Offhand" type="BoneAttachment3D" parent="Rig/Skeleton3D"] -transform = Transform3D(-0.00182128, 0.263614, 0.964626, 0.999857, -0.015716, 0.00618367, 0.0167906, 0.9645, -0.263547, 0.512196, 0.615056, -0.0028324) +transform = Transform3D(-0.00272315, 0.263916, 0.964541, 0.999987, -0.00319168, 0.00369743, 0.00405475, 0.96454, -0.263904, 0.512751, 0.630897, -0.000571791) visible = false bone_name = "1H_Sword_Offhand" bone_idx = 9 @@ -32021,7 +32021,7 @@ mesh = SubResource("ArrayMesh_rvosg") skeleton = NodePath("") [node name="Badge_Shield" type="BoneAttachment3D" parent="Rig/Skeleton3D"] -transform = Transform3D(-0.00182126, 0.263613, 0.964626, 0.999857, -0.0157186, 0.00618434, 0.0167932, 0.9645, -0.263546, 0.662567, 0.61602, -0.0439154) +transform = Transform3D(-0.00272312, 0.263916, 0.964541, 0.999987, -0.00319421, 0.0036981, 0.00405737, 0.96454, -0.263904, 0.663108, 0.631473, -0.0417104) visible = false bone_name = "Badge_Shield" bone_idx = 10 @@ -32031,7 +32031,7 @@ mesh = SubResource("ArrayMesh_0xags") skeleton = NodePath("") [node name="Rectangle_Shield" type="BoneAttachment3D" parent="Rig/Skeleton3D"] -transform = Transform3D(-0.00182126, 0.263613, 0.964626, 0.999857, -0.0157186, 0.00618434, 0.0167932, 0.9645, -0.263546, 0.662567, 0.61602, -0.0439154) +transform = Transform3D(-0.00272312, 0.263916, 0.964541, 0.999987, -0.00319421, 0.0036981, 0.00405737, 0.96454, -0.263904, 0.663108, 0.631473, -0.0417104) visible = false bone_name = "Rectangle_Shield" bone_idx = 11 @@ -32041,7 +32041,7 @@ mesh = SubResource("ArrayMesh_qr44s") skeleton = NodePath("") [node name="Round_Shield" type="BoneAttachment3D" parent="Rig/Skeleton3D"] -transform = Transform3D(-0.00182126, 0.263613, 0.964626, 0.999857, -0.0157186, 0.00618434, 0.0167932, 0.9645, -0.263546, 0.662567, 0.61602, -0.0439154) +transform = Transform3D(-0.00272312, 0.263916, 0.964541, 0.999987, -0.00319421, 0.0036981, 0.00405737, 0.96454, -0.263904, 0.663108, 0.631473, -0.0417104) bone_name = "Round_Shield" bone_idx = 12 @@ -32050,7 +32050,7 @@ mesh = SubResource("ArrayMesh_bb24p") skeleton = NodePath("") [node name="Spike_Shield" type="BoneAttachment3D" parent="Rig/Skeleton3D"] -transform = Transform3D(-0.00182126, 0.263613, 0.964626, 0.999857, -0.0157186, 0.00618434, 0.0167932, 0.9645, -0.263546, 0.662567, 0.61602, -0.0439154) +transform = Transform3D(-0.00272312, 0.263916, 0.964541, 0.999987, -0.00319421, 0.0036981, 0.00405737, 0.96454, -0.263904, 0.663108, 0.631473, -0.0417104) bone_name = "Spike_Shield" bone_idx = 13 @@ -32059,7 +32059,7 @@ mesh = SubResource("ArrayMesh_jnwr3") skeleton = NodePath("") [node name="1H_Sword" type="BoneAttachment3D" parent="Rig/Skeleton3D"] -transform = Transform3D(-0.00114109, -0.164274, 0.986413, 0.999935, -0.011309, -0.000727692, 0.0112754, 0.986349, 0.164276, -0.496977, 0.619048, 0.138688) +transform = Transform3D(0.00085545, -0.155294, 0.987867, 0.999996, -0.00245593, -0.00125288, 0.00262118, 0.987864, 0.155291, -0.496188, 0.635042, 0.141202) bone_name = "1H_Sword" bone_idx = 19 @@ -32078,7 +32078,7 @@ shape = SubResource("CapsuleShape3D_nge0l") disabled = true [node name="2H_Sword" type="BoneAttachment3D" parent="Rig/Skeleton3D"] -transform = Transform3D(-0.00114111, -0.164274, 0.986413, 0.999935, -0.011309, -0.000727678, 0.0112755, 0.986349, 0.164276, -0.496977, 0.619048, 0.138688) +transform = Transform3D(0.000855434, -0.155294, 0.987867, 0.999996, -0.00245595, -0.00125287, 0.00262119, 0.987864, 0.155291, -0.496188, 0.635042, 0.141202) bone_name = "2H_Sword" bone_idx = 20 @@ -32087,7 +32087,7 @@ mesh = SubResource("ArrayMesh_ys2n7") skeleton = NodePath("") [node name="Knight_Helmet" type="BoneAttachment3D" parent="Rig/Skeleton3D"] -transform = Transform3D(0.999715, -9.50403e-05, 0.0238818, 0.000115347, 1, -0.000848912, -0.0238817, 0.000851424, 0.999714, 0.000125442, 1.18795, 0.00110022) +transform = Transform3D(0.99972, -1.14772e-05, 0.0236623, 3.27237e-05, 1, -0.000897519, -0.0236623, 0.000898042, 0.99972, 9.60435e-05, 1.18937, 0.00111621) bone_name = "Knight_Helmet" bone_idx = 22 @@ -32106,7 +32106,7 @@ transform = Transform3D(-0.999711, 2.27778e-05, 0.024046, 5.34939e-07, 1, -0.000 shape = SubResource("CapsuleShape3D_i3cyd") [node name="Knight_Cape" type="BoneAttachment3D" parent="Rig/Skeleton3D"] -transform = Transform3D(0.996204, 6.0286e-05, 0.0870478, 9.08447e-05, 0.999998, -0.00173222, -0.0870477, 0.00173355, 0.996203, 0.00012099, 1.18795, 0.00107768) +transform = Transform3D(0.99631, 8.17928e-05, 0.0858299, 7.00531e-05, 0.999998, -0.00176614, -0.0858299, 0.00176563, 0.996308, 9.31756e-05, 1.18937, 0.00109404) visible = false bone_name = "Knight_Cape" bone_idx = 23 @@ -32148,7 +32148,7 @@ libraries = { tree_root = SubResource("AnimationNodeStateMachine_vnar2") anim_player = NodePath("../AnimationPlayer") parameters/current_length = 1.06667 -parameters/current_position = 0.760561 +parameters/current_position = 0.280315 parameters/current_delta = 0.0166667 parameters/conditions/blocking = false parameters/conditions/grounded = false @@ -32188,14 +32188,14 @@ parameters/Hit_B/current_length = 0.866667 parameters/Hit_B/current_position = 0.866667 parameters/Hit_B/current_delta = 0.0202171 parameters/IWR/current_length = 1.06667 -parameters/IWR/current_position = 0.760561 +parameters/IWR/current_position = 0.280315 parameters/IWR/current_delta = 0.0166667 parameters/IWR/blend_position = Vector2(-0.000645578, 0.0027101) parameters/IWR/0/current_length = 1.06667 -parameters/IWR/0/current_position = 0.760561 +parameters/IWR/0/current_position = 0.280315 parameters/IWR/0/current_delta = 0.0166667 parameters/IWR/1/current_length = 0.8 -parameters/IWR/1/current_position = 0.761431 +parameters/IWR/1/current_position = 0.547855 parameters/IWR/1/current_delta = 0.0166667 parameters/IWR/2/current_length = 1.06667 parameters/IWR/2/current_position = 0.475417 @@ -32204,7 +32204,7 @@ parameters/IWR/3/current_length = 0.8 parameters/IWR/3/current_position = 0.446801 parameters/IWR/3/current_delta = 0.0166667 parameters/IWR/4/current_length = 0.8 -parameters/IWR/4/current_position = 0.761431 +parameters/IWR/4/current_position = 0.547855 parameters/IWR/4/current_delta = 0.0166667 parameters/Interact/current_length = 1.3 parameters/Interact/current_position = 1.3 diff --git a/project.godot b/project.godot index 5ff30df..96905e6 100644 --- a/project.godot +++ b/project.godot @@ -20,11 +20,20 @@ config/icon="res://resources/images/icon.svg" buses/default_bus_layout="res://resources/bus_layout.tres" +[autoload] + +GameManager="*res://scripts/game_manager.gd" +InteractionManager="*res://packed-scenes/interaction_manager.tscn" + [display] window/size/viewport_width=1280 window/size/viewport_height=800 +[global_group] + +player="" + [gui] theme/default_font_antialiasing=2 @@ -82,6 +91,12 @@ Menue={ "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":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } +interact={ +"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":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":true,"script":null) +] +} [layer_names] diff --git a/resources/audio/chest_open.mp3 b/resources/audio/chest_open.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..bd08eb44c8ea7a33ffb1c2662db48ccc74761150 GIT binary patch literal 59712 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 z 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

A^vzl_IUqX(B#|^a&5l) z^s@E26X&(?Q-uHtMYt@EUwVIduCwKTd_VoTPI9yHPOY$Fy-gKm?=`@AC%}} zcMk!QrSrP=N9F#Osa!dKJP4uV&K20jj2o};4s8FmI%;yW_w=iaq*q*K)sZB48O6Y# z)~K8Ah-K592B6n~&2riAp~z>P|M`dg0NA9c`LPJ@zghZtF6YT}YS3K-F4%Z=a#L1a z?_PNSf(sO(O$g3WOhr!B*YMQE@rh70(hj6$nJ_+6?>usLGyTx-TKJZHe2y>uH{0qL zz1(ZG2LvoM%P30il(t{;%u)mUoeAqXyAzG_@)}5VRj5g5SV@Wrs8KTJ=A-xoJa#50 zv#CMKX1{YlEB>v98e#a4F>8i!-C1W>?Rg>X5gN?z6w<;{p(!OEEf`}wsH#7BU)6UYi&RgW@2g$JaKPvK|#DRwvth}eVs!QS}+bvo~XhyKzbK3@jmql8O zta&XjOyPoT4pWUEri+#(l{iX(WHCbEAE7m+W=AV2)@M5o_^bYXTO3=)A;apiO1pgR zN*thm$b{s196RH@wHU!s%145({8A~z>^^lt1^7Ws+}V%YlXphT>&jem;%0%QX#-Lp z^V=#VKb9RH;!yii16lc&{i5Q(W=mXQ11^iaINq9GTIOD>T{RfJ(kp+&vlr^xI zY(8WpI_Yn#&rB76P!Yx$MkPSlVk85~i^NPiGiuKt9N@~6Q+Al9Jmtf6+LWm6$xdll zFsAVI|-eR-UY)O_VLx67`FBDZoX1!7Z524Uognhj^;K5#O;>c7+) z5Y&=}YnPwaH@l#@m^GCPA(U} z5%gk>l4}B+A3Y_}kXQCGm+40ttje1>8$#5Liz2NY@2S@J6!$hHk4yRaMj3wr23PZ8 zF<|~DWZEBN)L4wZno+()4$YXrZ829A-6M?L48GG_td+!)EJsSrKNd&=P_FN*gJNGy zZnFL$(_@8N$gUA3BorI)p}f-*STxsWuTs=#!Lrk>wSVGk32VocFONHiu!Z$+2}B=D zPF(lOa|mbttgAHpBDkNLb#=7Varjw*#kjGoUMY8;oiDbut1`)9R-=R@Jysyi4yH*@ zKnp1*eK%u}ecHy_BjzcHeakFuU6d-u7GLaN_jdsi1)neojgcKUsFFDTsyNv3V9NiE zgvQO2^KIJ{Q&ju575~DwRyn!|J*Uue1OPuNU+6p%VD=ifc zBY}6x$tQZO!5vBrjhfvG7)WdSWfZ+N6vBg@!W(eKDfS14zf1)>`=xJ5GWL8Hyj?`? z>|0qUPzaZCA+q)(7##=6)0|FLLk_(DTlPBt>km;dH56a-gVenN!lLH%PPik#m@Y-f z5l>33UeAwUUiupe_ImB^zyhS2r?Q_PpV*yJc#z|C!{hP@px#-2 zbZ_OV6r3Elo_;t@>|SDt4iKg0BNfG_2n?45&pkqQ3Gm=5c>Igh4!{EZ95)Un?{Nfz4XIeu(^)8;2kS zEG5zPo-i7elKd*YO$x+nW{g4}T{rw_0GaP_r5fXy@Dhrujv zP49rmwZ`zO|L{AyLw6WXjqh@$3TQu3A2z+P_fft4>w$Hb{b>dNPQblqWcB`A1&`~~ zjsC9Cja-e3hK1@>2K=y6OTr2FQOF=7Ge||*s!mQ!VVHN0#B&svAO z$vevJ{W4ERikU4Mco_FLGV;XIu*Lf%NeKTe_8M!t5=(hl!n6WT(d3XElwl>wFK`f| zkTrP{nEBkfmwDg9QLfj_{xn1x#|9uN#h-8LwGv`iv`_XAj;ux!*|vZ;vY_?;<6R}d z9q_jB`~^ZGHcNG4`@tz7r)YuqC3QBE6UrQoB-~77X%w!3tV$$w9v-uEPA{bl#fhH? z)RLYksnLFE;L%(9{FKIfAx+1UIp+O5LK>87I)Y8%6`phUaofklrX@QUl!|s}0?H&t zKw!IRwcujnQEc+T&uS>k(&+Hst?IaoZL~fQatak=h@r);_pW4TrgfRn&@i;IIhBfM z6(nvhPhU}$nfN**)uZo}XcVUvzRdNg?SDKGQ}Bj8jO-G@c)lGkghltCGl6UcM{R{% zLr(iy4#EdW3d=HE{iGAD?$)0ffX61+KDDuxmbZ$QFU=!aq7^ExrCdOaTp`eW(mJ~# z5Zw2sL4l%DG3x$fqk|Xhoa5Q$+c%EoOkJ0UU#Z7ATw&)I62rr~tC)Aj{NrtFo>!ht za$jG@uh5^Xs|_w1KaV`VD?b<1`zPtBSSlI?F;i5p&ZYKB1pcQF5247P)Ri2uDR%v8 zmHuCQU-cE$AGJ?+$54X~0|P@zBOoFSHN+4@NGjc(QZjT1NXyVAQqqioBHi5$l1d1Q zg!GHw-=FZic`x3x&c#{h>a4T(dOkaz{cIVtu4syk8OVMA5&K6bhkH1BfW}*2^^=@i z4gQq_v(KIqxO?$LuP$ChHat%%Y7eMe#;EElPBUpIl3tC6Irw7ZAsiy2+uu<^TWzlE z5QXlP?=Ptvu11c!`w8!+Usn-juk^lwhe>>Y^hfmL%Fc_mJOA9P^A~THRQJ8?_2Bs& zP>d-~n3n-mD^a}+RBwnZ@oHuz?@n%Dc;ySYrGe4 z&I@pqEE>b7o8O(b7&1H`q-BH&o42kjkTSB7p60-cT#OsfmSl>?8Yr-fs#+`fk?^b5aAPd5o%{#Jb0+)Aq4Cm7Axr_Z6Zz_fDW0 z#Cl2-nY;LPJoUi~o9RP$&*L0Di5ZMZ+*m?)iWrz9jX)=fIgJ!V2S0songc)(gF6e+ zIXXN9))bbi0i@E)8;XNwP5=UpS(iS`DqfYSydPgqY)1YThs{S4iZe81z8(-cNWxSV zXMQy#eQK2QosFr?DAL?v=@%fR_D^Tpx8uHSU)&gorOX^Fy2>CIk+2 z-fN~&a>?I%8lf;?4OyWZkfin}qFq-rxBG7JAfIbHLzunlf=;qvtHdRX+3W5K9z&2t zE=ux(MR>xDYAz4Z5VKu_?#_MD=OckA-HUtaXv|+;sz;)YU76sn@KtY9k%AOtYtLpL z&AG1}^m1}H46Ha7o!^pRSbPSx|5=+P`yfeg>A(Cj1P@!ge^Z6!n>T0kqkH>OvJv0c zhdnxu9~Qgc+c&`Rs74-_54SWm;H%x}%<_P>z6hR|5bvyZkHNg%+J|xt!{SPq=x)f% z++0_3_qWD6IL|8l^iF?zXgpQDkP^?B{SwdXkl=SvrI5^#NQn|IwNYqL$H#+@2;t`o zVbhMFYMxK{e62B{ktL_b8QsKn0u!Qm7#lR2J1dK2n3U`qi5;7w+k#a8*w8E1usDw1 z<#;dXiQ1gS4*K+V*HlYp=E_6<2)ZQ*qnl)(Bd4VjXoG0HM1|K}Z=b!KIhvmroV!}w z%h`+B7cFN*t59iyfeVEbv{c?aD%d2=*z4_%2QbtzhfL_sr9E!O1a;?~nuu3eQE}E4ru*Ek{DcNqWTQLBwut>&HvQnxBBdzjyBapV> zx!@}U)8<(Qi}vi@pT}Zv?(STxEv^<_maJXMbg`78LPO0e1qIu&1&c#n#(d2qgyLim zl7T^mze`v6-{`c&wVU7(kRX|Ntcuir+x$)EcwrPnxSY;y?e&r77){gJt(!KvF3hL4 zu4~fc`P%@lrS{^9)=dY44k7ew1mhjeU4v`zvn|)#+@RZ~+L@su+e`hl;Xod0Z?oPoJ!IhVCH#p^h`IH`uyU|K6ofE_*^3SGJQ$ZsaFS@AGKl5 zsTDqAWk;22tlT5eRPqLi{~U>+WP+n&c1IC5p!h2z+Hk`__HB4l~(N;&Ek6csqn$j_(B7!@Y`Z;eiN<8i)*suOd~ zNihVD?%Pj+MHs$@AAKT^j@vR_ORL-qt#@?W3AN16%woq5xq$)ud{bZZu$z!eJ_0?(|<}odik=V{FPA5j6N}@ zhXsI8(BPYPmOvzik3LK)a{OX#E}OXC17MT`JXh(~E_ zw;Ge=Hre#?n5_B}=9f&0`FZtri&a$1anjHPFR=gP58vJAr;i8j_k+s@?<_npXZP2f zdB#4>=pJ(Vki##GA|r)6fC!wRG8?|l&sXGODs%}*9@}6565`r|4yU)|2@^yB>=_N& zO9%``@Pue`=1*nT^-cqlNun)49;(Py-X3AFQ2=gWv{i;E4ty?8*c=>5cYe)B@<$-M zdZWZm^-1;H#pK|rnz)T+vh(;eXMtyJ>^eiL8q>0B$<}r?Q*i*%1VwtI@*iF>f0TF? z&gPG9LcAn;B~enhw7kaa&Xy$%d=iO`*2TshQAg|#VoJU7<22q zv_DEkvkw_fRCh`#Vf-4m#-1F#Yra{l$tZ`da(WU>qmR7239p*2X3H@@H*NKFnc5?; zHXebzCzroq0b+;?Ra3l))d0r0niyu^RRw20<`~6y_|OM%XOQ&IN69K4|GsnnHOCvvT$<2Y&7Ws5 z(?-$jiXGpJ?dmvH&cawTQNC8Z(>nVO1=eW{6^cwL*hl8WvHX|P|L|c8g@-TIZ%NFu z;ZN!ZG-r3v>=0tR?>}Pi(OS7jp}EQVX+nW%9=HxsUt-B$uTk#go!37V%DPwPT{BRB z;5_DVB&C+!{P~vuuU>laM|(Zh7+qXXp#lf=xM5`ApnTkyp_Z{UcBK8!RbtaR28)bi zD4w9?a5LwRP^-j51B+=D3FsgB?)I}M$)!RxBp+}GCty*5Pye7{_O(>M>mJ=?^c(Qnin!07dTa3Qk%T$3v}_4P`qe1X~=9pOkYU222MuA@(=F z7d{y?KAf+cu^wV5vuR!NQ4}avmbAR4Qi9;3NRe^#MIS_yRui$URX3%Mfm5H)+nnVa zy7Q_}fWo^gEtL52V@A95ibF7pOO;fJsG79NDYmQyF^JJGO8PK|4}kqo;nC!bj-L0? z>~KzH053-SN*c|>?ewjsG>IG@!D$=825@*mCyOJ}C~k8v+=!pe&w^Z7^@OaGtH0-0 zRa|WT&MH2`M4UpXCfmKKI9ll#Do#NO38JSrvUgr%M<~>lKLU||r;an^c|ake4fCkh zQXG1$?N0}*Gw+WBQ-{KK)pom9zkM`!<8z5 zF&|PssqjrcB#7!F?~NPOROx(n=NBlbeXeF%ilUb9rWq{IozZ<;Zevfaexw^}>yXb$ zQu*YK5ETa8f4xha?Xk40djO#Fk5FLyHSx;{wLS8YeYPE&bFJCYoY?*5qf>kql656X zHp-=|ADEWV>}TRbex58Fog>92XcQOV2}?#;#B$!rVzo zkV#VunpXKXvewXvB0?#%CYJnUsR{zd6@I}<$~ghyn0Rr^`~Bt*^7>%q{kLg)NfSH) zmHq(B8OF9+On(7w5@J}a31{l~(E z?4Y?0L!8w1R2{woS8Qc}y$cUo3{J2qpVhBY_kzcOZr>16^Eu&rh%+MpW<`E3^=jNtJ22(=15D86W0w zu`g%yER^i>oEE3mWRG2lonL=>(_-K2dUKU~ayLK1Gowz@R;#&o?)}+msLWmrRFI7w zFPsY6r+5KS(xuYnC-(h3%#AF8mGJ2M((|2oy4x&AL2$Rk?MHeTr*A=LE!gh8rQJ|tm?@h6z-8R<;m)ad&ig#(#7EJ)ogZmR;EZCgOrNloARz z`81%EfRCdK9yEi)^?rm`?rv?#CRAR-rj<@x3%$rV(*z=AGezZGb~wsC2G~$9ynd>> z2W}#SCLaa$>FVph2IONFR8Am(xAGTE65%doYsCv@gYd>v5iZN3+gta@8AD}v3I;A5 zecK(MPoKXYs(AvNheepnqAUCJUraw0q@hh+VYLd2V-~_Xx>D^)X~d-Onk|3W{G}pl z_t$uVQy@iA;f^Et+>!5(V2mrp^I9P6#U^$K!J^qgJt7PxgQOK{YFna$pY3WZv)( zAMW+fAE^90Uyg(NRDk9?a4mf7`}o0AWjUwVFNFdW0RW3e@e`XJv-1iULSD^bGuf3F z50&8)tU1p?RG(z3rC@abyP#PCr_S#%SM)C$s!Nam{6 z7o~N~wDJ~=Jke4Q#{vjEuB&eTT%Xx4qxNfZZu=(ZcdN=1qwb~my0}E&$b0QL8LV+Q z!HZxl5WSXC4=)`n3JVoC?90&zf0qk*&cg>p$|t6SwQ&oi?v$4{r4Yy7$I-Q3da`txnEsNeL3JXiL| zzPj(I`77habK*HBu{ok`B0B;4!eI7d9FRrOJH_f!PdD!N?@F?N`>JP_(kY=EDq=6RWK6hoYYp2Es4)+rBiwA~Hzxq|E2bJ-r zgr0VL8cooOiCJ%x~l2RDD<-*k(`tyl>LfstKJW|i2QM>-QXrEtQr&W(RO?8 zJXUt$V}h@#k$d_CTI<_9`zI}vJbrmel$Dp)^Ho7&!>ijD!7_mU z<|a^f4JtpH35Uj5r@AzT)f^4)SLjaWdc_n9Zo!(tEhnS0lPaSC}G`VJFsAvP%^5Pmvhn-(a_j3MAkO30CUmGR{UtNkg((_@HLppShwOPHRIdYx?;{;=6z_VU=5+MC*KGe2k3}*yE?)*K zA;YWfy3Chg;m5k=Y;V){n2X#$-(7rq{n~RBQITS#pEh^=h!+s?Bn5^PdDoAyh;w|| zR2sPwGh+D_=`Jp@n4W!lKoOVVK57M&O{(@7PkE)0W z8bS3aUBiII$a{Ra=TBncmguWmlCcN|#Vlx=<7QKmyZ_@yh5X{$zOQdIgfFtHV^!%& z^zw!JDJy)?o&D6P(1ocP27-M=1o#J}<1mZd+gYzSj?^U4C32KFs+7!mudHyK++>}K z?hX*$tyzjINN5g+KuM{mti_@h5ofum$Yf=-M%t%CtAw<6+~uIB$)Wv9gZ%ib(P+UI z;rqSmqkED`LN2D5lGF_J-b$lew3IsiXAQ z!RXM4DTH-}hLJ~>PI0T}@Ih9Asn&cC)kk$DF{T26b7R)?Q>y!saI;V3L0s*V%E!yG z1%F`{c@{1Tk0~VG#5fH2$P@7F)Tnhu>l8_~n_miuQYBipKHT2jJ9bcEbmAX*oAtf| zw-C1jxw%?e`A)TaLu20_U&PaBIBL7f7o8XQR($5S@-*OzVD%>>&@@pEh{WpLOK*y_%Ky|Hl765w-P3~1lkg*Ae=Z3 zyWjm1mPPRVlR)MHulDh$17t#Ch4NIN?LEV-7#$4I^-yjpzQW0(^rODN1t{>rUddTx z+GeGueUf9J(CS22`+w&P3J+)o-{fZb=Ep6mZq^m2xgh_KKdCa5V%>0p9ucTNdQ+h$ z-z=FgF4*%dWw|HKd4NA=@4MMEhZ=kw4iMj~w}ZxlXIi~0TtVT)@@ou{J;-HS8G~2d zH>vJ*M+><4i9*{ZA0vQW8PTa0!TiPpQturg6Rvh3wQk-#Unw7dUIK@b#dIi<&xt0b zB8NE>iMB!H!{5z_Yh-}KfS76A%CBJb%~{7Jm`RU9VG@r@(6pF~L?S;f+bo)lG@M7* z&7tz55Qzo*CRoYVP59T7?pT@$ho96$njBtR=ge zmQiMHg$KNSV5} z`9gB8J~sz_+F3knyDexlm}lU@kr9S{Xi7><*RxNp9*>JiQmwnGCT4L7ieGR zQzIjuI#kO#jlo{)rzU+SQ!hQFEOT5(l9eIAFZb zFPLJQWLCK)r;40!6c8f0pZ&+)*tIp41?=TAJn(U+sGH|I%mv-88T3S+SoaxaQTFTu(dSDl} zhzw^i9Kyxm6*gSjzmt)Zd;Jp` zZsy}?WYkdZ&x=tNyCqIcp%N+uO?d!F>0-biF`(-~(sGH)d@!fpA1ANa@#1>u@@Sb` z!#d~nHgnounW-ZnL2MVpne%wSBI{aQD+j`#unl(g)R~jK@`?aj?SJW|BtEm9mfw_2 z+m60{79=iyH*oXf$X4^^?T%mya(Xh;TD}sInGhxX4Jj+hD`#$nLx)Is>GHEz;#Z%` zljJ!-m4x!zu8qD(okgkWh{?omt<`K2c#We1ksMA02+=6FG9_2^YSPdUW5E!k2b(zl z+G>=u#B^}CsaWvp@+b-$J8H7Ga{j;g6L*CVem}o6>0jE+XV;ZUseAq}KOLmyD0VNR zDC_5K1(3o|v4!gy{a0^Nlm`ws%~L&n6NeusQ&Si!o9w8u znU#rIh)BJOsHf_4xHk`LK-r;JU>xBT5tCbDYzwH^?$ z0j{638E6(i-uMI;Yw+0-?`1(2^?Q_3lkR`Sr2i{gFBf8bIgk?&l(9W(u?GlG;QjEYe6O7i)w`QygcrjLV#=!MNPO+i9^6$8ibzyV`jN z0n3KgTBzdj_nZ&E-?kq6T)sL>eti*4y_aWkXRCEHHdcjP?O7=W;PVoL5wP-a1H&E#;&1s*N2|@DzQy;GopQ$gukh;_@I6w#R8e70~XHRH*9r*cpJG^m3mPAV!dETl#f=sRoCCexEc4l)SIOe zVQv%53FefnKl)QMjj16qN%U6R=a1?8C zID(1H2GUWHW^pm1Mq47WBfPYK)Q)gvhW?gtKh!23GszhJ{$OUzXubUMK!2tCx5V$x zNP0CfNKAE*TE9>%Mla3?b%mKwD2u#`#PC1=*~G$Ym+Idn6Wz!o6BP}nc^H=2)KUI6pU%*}B>(TrC81531qGGb@WDNKlK;!rA4Na5{HIL z4JP=oik8FX;ikJOJXvhPVp(&Q#hJCO%K9?%3k8x{|IU|Hlzgq^Z~!rjQGgATi+Qx8 zhBFuUKmOh%KO`uUyp#rPjT3*Wb98i(9%rTI4HIsoJbuz=TlfnRr$>+XN zzz!?7s$UE!Qox48GZp{hriUKFtow}se#JDu~%Q*A&J8GD`*qUxL76WWL4gBPvh_AuU$U=(_6+{h0Cqk zcaK=kTF7mbjTK8XJgB(A&_ubYhuCg0bn{xLjQ9z2SdnJj6f;R@%+=7q7lsdNXDgKL zg>Q6(dDalIgx`$pqHJ0u&P2y~;*!~fJ|el;c^fnD=ZymQfz{r_jFaYCXZYgyPAptF zs6aq$#p#=d#h|RK;FrO-&%K>*`Bs@`qN(+Iv|04_U9gz^bqS!`a{DT>?{uWJxFj9M zd8`7P7C&gW%sf~@qtojhhY@{0XRA4c&#`od(EBd>gJA9ZF z!xnwA&R5#I5P3QGyYx--9UF)oIebY4&ql0W5Mhs>o6%*Y@I5IAH++qc3Zvoem_l{m!e*%*ZiM-$L{$RvV(p* zzzxq{bg)@hy}DKx`>>$XZUXc6y?xUZ5#1AC??|9@OKo8mpR4d6a|Le+smmc0MIH$W y3hMpe^}qNJ++ERGO}+hvg%ym#!Xm=LqP%~^zQ2pHu&_W_SfclD@&124|9=48rUX&| literal 0 HcmV?d00001 diff --git a/resources/audio/chest_open.mp3.import b/resources/audio/chest_open.mp3.import new file mode 100644 index 0000000..082fe73 --- /dev/null +++ b/resources/audio/chest_open.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://0ciymc2gsrej" +path="res://.godot/imported/chest_open.mp3-527742db8328017b26f22aa35ab77efb.mp3str" + +[deps] + +source_file="res://resources/audio/chest_open.mp3" +dest_files=["res://.godot/imported/chest_open.mp3-527742db8328017b26f22aa35ab77efb.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/resources/audio/take_gold.mp3 b/resources/audio/take_gold.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..aea3999ee3b62f66f662044222a43ef1b4dc57d2 GIT binary patch literal 6120 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

KsMjcYU}}SI{7eh1k;B z|&&jYL@&_>Tq+_BFD* z^|!8mt?X@m%hk8aD~7gN9fTW)UW+|qYZy6D-Zbbo}HOp&d$v&Pbd5ice*oE^PQ#aRHr++G_$x2h!13kW*6o=6bz=vJCn-` zOPPV)TjXDlBmo9)-LdZU!nv{g_Z>WV@V>D#YUw?v)w+A;)u4@B7M2{71NR@;?|B?r z>P#%pyr+{LT9})InCzkD<)xXEXQ@H<*!09wCwpji=1hm&VXR3<4oi`G@50j5*zC+? zXTIC%j-9-)r#mrrVDG-MBjk8;W-5F4*@?+BGxJl~dpnEM7nZu&yB1)*xeGAm`Rrup z)S+`{9-cgYPZxi(VFCZs=LK1k8JUu4S(Z%RA{|V+dAwi1)qdG0_u%IE>g?uH&k;Eb z`m-3@S*0hFx8naXUBYWY&LJgqAm^;iYFklK%C9(TP`a$d|2U*ANf){;K%WeH?1eTd zw>^?d-BZANL`N;lW6*L5m?zabGvJp2eWtAwatbo$RGTwsTaeRuuN%1+;}<|l8!yA= zU3oyp@H*|Jbd{e;@w5rjRjpsJR(1;zoC6}_JPF)0ur~dA4z*>-ug7<_9EK*e)s*^v z33Sx03*3y3MT|8&K7gJ>;7OZyP&b_oD=khtEnp1g#0c5j5J79POTE<$T^Ba(LQ6*5 z7`_s}PY&wqK3tsvIv?44VEKq{587jtzIZIuzlh`jupGc_D&sf=$_`}Hy6;hYa!$_S zMf=i+5223{IHTV5UdRxa(~6lscnJQOQT;r2i!S;u>Pf((nlIn5`G%=2hJ d3A$5=qjMPhFgP5??CiSFMzKPl=JUAf@xQoKN#y_l literal 0 HcmV?d00001 diff --git a/resources/fonts/Kenney Future Narrow.ttf.import b/resources/fonts/Kenney Future Narrow.ttf.import new file mode 100644 index 0000000..397886e --- /dev/null +++ b/resources/fonts/Kenney Future Narrow.ttf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://cselyshqqly1d" +path="res://.godot/imported/Kenney Future Narrow.ttf-bea8e736bf70a9a1e87e37b4b3ea3264.fontdata" + +[deps] + +source_file="res://resources/fonts/Kenney Future Narrow.ttf" +dest_files=["res://.godot/imported/Kenney Future Narrow.ttf-bea8e736bf70a9a1e87e37b4b3ea3264.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/resources/themes/standard_theme.tres b/resources/themes/standard_theme.tres new file mode 100644 index 0000000..7560a88 --- /dev/null +++ b/resources/themes/standard_theme.tres @@ -0,0 +1,19 @@ +[gd_resource type="Theme" load_steps=3 format=3 uid="uid://b3faaa6kmpthu"] + +[ext_resource type="FontFile" uid="uid://cselyshqqly1d" path="res://resources/fonts/Kenney Future Narrow.ttf" id="1_0we5y"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_7nnf0"] + +[resource] +Label/colors/font_color = Color(1, 1, 1, 1) +Label/colors/font_outline_color = Color(0, 0, 0, 1) +Label/colors/font_shadow_color = Color(0, 0, 0, 0) +Label/constants/line_spacing = 3 +Label/constants/outline_size = 0 +Label/constants/shadow_offset_x = 1 +Label/constants/shadow_offset_y = 1 +Label/constants/shadow_outline_size = 1 +Label/font_sizes/font_size = 16 +Label/fonts/font = ExtResource("1_0we5y") +Label/styles/normal = SubResource("StyleBoxEmpty_7nnf0") +ProgressBar/fonts/font = ExtResource("1_0we5y") diff --git a/scenes/game.tscn b/scenes/game.tscn index 1d9d161..12884f7 100644 --- a/scenes/game.tscn +++ b/scenes/game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=15 format=3 uid="uid://b1i4juq2u7pwk"] +[gd_scene load_steps=16 format=3 uid="uid://b1i4juq2u7pwk"] [ext_resource type="Environment" uid="uid://d31wkt76cft8k" path="res://resources/world_environment.tres" id="1_03qki"] [ext_resource type="Script" path="res://scripts/game_manager.gd" id="1_kvi4c"] @@ -8,7 +8,8 @@ [ext_resource type="PackedScene" uid="uid://d1vowjv6aed2s" path="res://packed-scenes/ui.tscn" id="9_ah8u8"] [ext_resource type="MeshLibrary" uid="uid://bs0yqy7xhugol" path="res://resources/level_mesh_library.tres" id="9_dr0le"] [ext_resource type="Script" path="res://scripts/enemy_controller.gd" id="11_137ne"] -[ext_resource type="PackedScene" uid="uid://cxwpwnl17j7wd" path="res://packed-scenes/chest_with_gold.tscn" id="11_jv844"] +[ext_resource type="PackedScene" uid="uid://bkh0th4s2lkcq" path="res://packed-scenes/chest.tscn" id="12_ead6y"] +[ext_resource type="Script" path="res://scripts/audio_manager.gd" id="12_o8q33"] [ext_resource type="PackedScene" uid="uid://boygkamfqg6l6" path="res://packed-scenes/skeleton_warrior.tscn" id="13_8a4e7"] [ext_resource type="AudioStream" uid="uid://ct7s1kjvm5k1" path="res://resources/music/sad_guitar.mp3" id="13_r2hxi"] [ext_resource type="AudioStream" uid="uid://cw7nrvkf3iyvx" path="res://resources/voice/game_over.ogg" id="14_765i1"] @@ -32,11 +33,10 @@ shadow_enabled = true transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 49.8991, 25.834, -30.0061) size = Vector3(10000, 10000, 1000) -[node name="GameManager" type="Node3D" parent="." node_paths=PackedStringArray("player")] +[node name="GameManager" type="Node3D" parent="."] script = ExtResource("1_kvi4c") -player = NodePath("../Player") -[node name="Player" parent="." node_paths=PackedStringArray("model") instance=ExtResource("14_bpicj")] +[node name="Player" parent="." node_paths=PackedStringArray("model") groups=["player"] instance=ExtResource("14_bpicj")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18.8595, 1.08565, 11.6001) maximum_health = 100 maximum_stamina = 100 @@ -68,7 +68,7 @@ data = { mesh_library = ExtResource("9_dr0le") bake_navigation = true data = { -"cells": PackedInt32Array(65532, 0, 0, 65530, 0, 0, 0, 0, 0, 2, 0, 8, 6, 0, 0, 65533, 5, 0, 65535, 5, 0, 1, 5, 0, 5, 5, 0, 65534, 0, 1, 4, 0, 2, 65531, 5, 3, 3, 5, 4, 65527, 7, 655360, 65528, 65534, 655360, 65524, 4, 1048576, 65524, 2, 1048576, 65526, 65534, 0, 65528, 65525, 655360, 65530, 65525, 655360, 65532, 65525, 655360, 65528, 65521, 655360, 65530, 65521, 655360, 65532, 65521, 655360, 65534, 65521, 655361, 65534, 65525, 655361, 0, 65521, 655360, 2, 65521, 655368, 4, 65521, 655360, 0, 65525, 655360, 2, 65525, 8, 4, 65525, 655360, 4, 65520, 1048576, 0, 65520, 1048576, 4, 65518, 1048576, 0, 65518, 1048576, 4, 65516, 5, 0, 65516, 1048581, 2, 65516, 6, 18, 65521, 5, 16, 65521, 0, 14, 65521, 0, 12, 65521, 0, 10, 65521, 0, 8, 65521, 0, 6, 65521, 0, 6, 65525, 0, 8, 65525, 0, 10, 65525, 0, 12, 65525, 0, 18, 65523, 1441792, 18, 65525, 1441792, 18, 65527, 1441792, 14, 65525, 5, 14, 65527, 1441792, 14, 65529, 1441795, 18, 65529, 1441792, 65524, 65534, 655360, 65524, 0, 5, 65520, 0, 655365, 65522, 0, 655360, 65522, 65534, 655365, 65520, 65534, 1048576, 65520, 65532, 1048576, 65522, 65532, 1048576, 65522, 65530, 1048578, 65520, 65530, 1048578, 65521, 65528, 9, 65522, 65525, 1048581, 65520, 65526, 1441792, 65524, 65524, 1048585, 65526, 65523, 1441797, 65526, 65521, 1048581, 65520, 65523, 1048581, 65522, 65523, 3, 65526, 65525, 6, 65525, 65526, 1441792, 65527, 65526, 1441792, 65525, 65528, 1441792, 65527, 65528, 1441792, 65527, 65530, 1441797, 65525, 65530, 655365, 11, 1, 1048576, 11, 3, 1441792, 11, 5, 1048576, 8, 0, 1441797, 8, 65534, 1048581, 65529, 5, 1048581, 65529, 7, 1441797, 65520, 65524, 1441803, 65522, 65526, 1441803, 14, 65531, 655365, 18, 65531, 1441797, 16, 65531, 655366, 15, 65532, 1048576, 17, 65532, 1048576, 15, 65534, 1441797, 12, 65534, 1048581, 13, 65534, 11, 17, 0, 1441797, 14, 0, 1048581, 15, 0, 11, 12, 0, 1441792, 12, 2, 1441792, 14, 2, 1441792, 14, 4, 1441792, 12, 4, 1441792, 14, 6, 1441792, 12, 6, 1441792, 14, 8, 1048576, 14, 10, 1441797, 8, 10, 655365, 8, 5, 5, 6, 5, 11, 8, 7, 1441792, 8, 8, 1441803, 11, 6, 1441803, 12, 8, 1441797, 11, 8, 655365, 10, 10, 655364, 12, 10, 655364, 65529, 65534, 5, 65529, 0, 655365, 11, 65534, 5, 9, 65534, 11, 11, 0, 1441803, 11, 65535, 1441803, 17, 65534, 1441800, 65524, 7, 655365, 65526, 7, 655371, 65524, 6, 1048587, 18, 65535, 0, 18, 65532, 0, 20, 65532, 0, 20, 65535, 0, 22, 65532, 0, 22, 65535, 0, 24, 65532, 5, 24, 65535, 1441797, 24, 65533, 1441803, 2, 65531, 9, 1, 65529, 1441798, 3, 65533, 1441798, 1, 65527, 1441792, 3, 65529, 1441792, 3, 65527, 1441792, 1, 65533, 1441792, 3, 65535, 1441792, 1, 65535, 1441792, 1, 65525, 1441803, 3, 65525, 1441803) +"cells": PackedInt32Array(65532, 0, 0, 65530, 0, 0, 0, 0, 0, 2, 0, 8, 6, 0, 0, 65533, 5, 0, 65535, 5, 0, 1, 5, 0, 5, 5, 0, 65534, 0, 1, 4, 0, 2, 65531, 5, 3, 3, 5, 4, 65527, 7, 655360, 65528, 65534, 655360, 65524, 4, 1048576, 65524, 2, 1048576, 65526, 65534, 0, 65528, 65525, 655360, 65530, 65525, 655360, 65532, 65525, 655360, 65528, 65521, 655360, 65530, 65521, 655360, 65532, 65521, 655360, 65534, 65521, 655361, 65534, 65525, 655361, 0, 65521, 655360, 2, 65521, 655368, 4, 65521, 655360, 0, 65525, 655360, 2, 65525, 8, 4, 65525, 655360, 4, 65520, 1048576, 0, 65520, 1048576, 4, 65518, 1048576, 0, 65518, 1048576, 4, 65516, 5, 0, 65516, 1048581, 2, 65516, 6, 18, 65521, 5, 16, 65521, 0, 14, 65521, 0, 12, 65521, 0, 10, 65521, 0, 8, 65521, 0, 6, 65521, 0, 6, 65525, 0, 8, 65525, 0, 10, 65525, 0, 12, 65525, 0, 18, 65523, 1441792, 18, 65525, 1441792, 18, 65527, 1441792, 14, 65525, 5, 14, 65527, 1441792, 14, 65529, 1441795, 18, 65529, 1441792, 65524, 65534, 655360, 65524, 0, 5, 65520, 0, 655365, 65522, 0, 655360, 65522, 65534, 655365, 65520, 65534, 1048576, 65520, 65532, 1048576, 65522, 65532, 1048576, 65522, 65530, 1048578, 65520, 65530, 1048578, 65521, 65528, 9, 65522, 65525, 1048581, 65520, 65526, 1441792, 65524, 65524, 1048585, 65526, 65523, 1441797, 65526, 65521, 1048581, 65520, 65523, 1048581, 65522, 65523, 3, 65525, 65526, 1441792, 65527, 65526, 1441792, 65525, 65528, 1441792, 65527, 65528, 1441792, 65527, 65530, 1441797, 65525, 65530, 655365, 11, 1, 1048576, 11, 3, 1441792, 11, 5, 1048576, 8, 0, 1441797, 8, 65534, 1048581, 65529, 5, 1048581, 65529, 7, 1441797, 65520, 65524, 1441803, 65522, 65526, 1441803, 14, 65531, 655365, 18, 65531, 1441797, 16, 65531, 655366, 15, 65532, 1048576, 17, 65532, 1048576, 15, 65534, 1441797, 12, 65534, 1048581, 13, 65534, 11, 17, 0, 1441797, 14, 0, 1048581, 15, 0, 11, 12, 0, 1441792, 12, 2, 1441792, 14, 2, 1441792, 14, 4, 1441792, 12, 4, 1441792, 14, 6, 1441792, 12, 6, 1441792, 14, 8, 1048576, 14, 10, 1441797, 8, 10, 655365, 8, 5, 5, 6, 5, 11, 8, 7, 1441792, 8, 8, 1441803, 11, 6, 1441803, 12, 8, 1441797, 11, 8, 655365, 10, 10, 655364, 12, 10, 655364, 65529, 65534, 5, 65529, 0, 655365, 11, 65534, 5, 9, 65534, 11, 11, 0, 1441803, 11, 65535, 1441803, 17, 65534, 1441800, 65524, 7, 655365, 65526, 7, 655371, 65524, 6, 1048587, 18, 65535, 0, 18, 65532, 0, 20, 65532, 0, 20, 65535, 0, 22, 65532, 0, 22, 65535, 0, 24, 65532, 5, 24, 65535, 1441797, 24, 65533, 1441803, 2, 65531, 9, 1, 65529, 1441798, 3, 65533, 1441798, 1, 65527, 1441792, 3, 65529, 1441792, 3, 65527, 1441792, 1, 65533, 1441792, 3, 65535, 1441792, 1, 65535, 1441792, 1, 65525, 1441803, 3, 65525, 1441803, 65526, 65525, 8) } [node name="Items" type="Node" parent="Level"] @@ -94,11 +94,14 @@ transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -6.616 [node name="torch_mounted7" parent="Level/Items" instance=ExtResource("8_8d1n4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -12.6168, 2.9024, 10.7441) -[node name="Chest" parent="Level/Items" instance=ExtResource("11_jv844")] -transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -19.1302, 1.43253, -15.7101) +[node name="Chest" parent="Level/Items" instance=ExtResource("12_ead6y")] +transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -19.0017, 1.36992, -13.4815) + +[node name="Chest2" parent="Level/Items" instance=ExtResource("12_ead6y")] +transform = Transform3D(-0.361299, 0, -0.93245, 0, 1, 0, 0.93245, 0, -0.361299, 46.7428, 1.38847, -3.1036) -[node name="Chest2" parent="Level/Items" instance=ExtResource("11_jv844")] -transform = Transform3D(-0.409254, 0, 0.91242, 0, 1, 0, -0.91242, 0, -0.409254, 47.2703, 1.43253, -5.02911) +[node name="Chest3" parent="Level/Items" instance=ExtResource("12_ead6y")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18.5198, 1.06351, 0.974984) [node name="Enemies" type="Node" parent="." node_paths=PackedStringArray("player")] script = ExtResource("11_137ne") @@ -115,11 +118,14 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 19.8284, 1.36247, 0.242004) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 32.9955, 1.36247, -12.0637) [node name="Audio" type="Node" parent="."] +script = ExtResource("12_o8q33") [node name="BackgroundMusic" type="AudioStreamPlayer" parent="Audio"] stream = ExtResource("13_r2hxi") -autoplay = true bus = &"Music" [node name="Voice" type="AudioStreamPlayer" parent="Audio"] stream = ExtResource("14_765i1") + +[connection signal="game_over" from="Player" to="Audio" method="_on_player_game_over"] +[connection signal="player_loaded" from="Player" to="GameManager" method="_on_player_player_loaded"] diff --git a/scripts/audio_manager.gd b/scripts/audio_manager.gd new file mode 100644 index 0000000..be8bed4 --- /dev/null +++ b/scripts/audio_manager.gd @@ -0,0 +1,7 @@ +extends Node + +@onready var background_music: AudioStreamPlayer = $BackgroundMusic +@onready var voice: AudioStreamPlayer = $Voice + +func _on_player_game_over() -> void: + voice.play() diff --git a/scripts/chest.gd b/scripts/chest.gd index 8448f90..e2bcdc5 100644 --- a/scripts/chest.gd +++ b/scripts/chest.gd @@ -1,16 +1,37 @@ -class_name Chest_with_Gold +class_name Chest extends Item -@onready var chest_lid: RigidBody3D = $chest/chest_lid +@onready var chest_lid: StaticBody3D = $chest/chest_lid +@onready var interaction_area: InteractionArea = $InteractionArea +@onready var animation_player: AnimationPlayer = $AnimationPlayer + +@export var gold_amount := 10 +var is_empty := false func _ready() -> void: state_changed.connect(_on_state_changed) + interaction_area.interact = Callable(self, "_on_interact") + if gold_amount == 0: is_empty = true -func _on_body_entered(body: Node) -> void: - if body is Player: - state = States.opened +func _on_interact() -> void: + match state: + States.closed: + state = States.opened + States.opened: + if is_empty: + state = States.closed + else: + is_empty = true + GameManager.player.gold += gold_amount + state = States.looted + States.looted: + state = States.closed func _on_state_changed(new_state: States) -> void: match new_state: States.opened: - chest_lid.rotate_x(-75) + animation_player.play("open") + States.closed: + animation_player.play("close") + States.looted: + animation_player.play("take_gold") diff --git a/scripts/game_manager.gd b/scripts/game_manager.gd index 52818bc..bc873dd 100644 --- a/scripts/game_manager.gd +++ b/scripts/game_manager.gd @@ -1,16 +1,13 @@ extends Node3D -var timer: float -var timer_max := 1.0 - -@export var player: Player -@onready var voice: AudioStreamPlayer = $"../Audio/Voice" +@onready var player : Player = get_tree().get_first_node_in_group("player") func _ready() -> void: print("Hallo Felix") - player.game_over.connect(_on_game_over) func _on_game_over() -> void: print("Game Over!") - voice.play() #TODO: Show Game Over screen with gold + +func _on_player_player_loaded() -> void: + player.game_over.connect(_on_game_over) diff --git a/scripts/interaction_area.gd b/scripts/interaction_area.gd new file mode 100644 index 0000000..02936ca --- /dev/null +++ b/scripts/interaction_area.gd @@ -0,0 +1,13 @@ +class_name InteractionArea +extends Area3D + +@export var action_name := "interact" + +var interact: Callable = func(): + pass + +func _on_body_entered(_body: Node3D) -> void: + InteractionManager.register_area(self) + +func _on_body_exited(_body: Node3D) -> void: + InteractionManager.unregister_area(self) diff --git a/scripts/interaction_manager.gd b/scripts/interaction_manager.gd new file mode 100644 index 0000000..944993e --- /dev/null +++ b/scripts/interaction_manager.gd @@ -0,0 +1,43 @@ +extends Node2D + +@onready var player : Player = get_tree().get_first_node_in_group("player") +@onready var label: Label = $Label + +const base_text = "[E] or [Y] to " + +var active_areas := [] +var can_interact := true + +func register_area(area: InteractionArea) -> void: + active_areas.push_back(area) + +func unregister_area(area: InteractionArea) -> void: + var index = active_areas.find(area) + if index != -1: + active_areas.remove_at(index) + +func _process(_delta: float) -> void: + if active_areas.size() > 0 and can_interact: + active_areas.sort_custom(_sort_by_distance_to_player) + var active_area = active_areas[0] as InteractionArea + label.text = base_text + active_area.action_name + label.global_position = Vector2(active_area.global_position.x, active_area.global_position.y) + label.global_position.y -= 36 + label.global_position.x -= label.size.x / 2 + label.show() + else: + label.hide() + + +func _sort_by_distance_to_player(area1: Area3D, area2: Area3D) -> Area3D: + var area1_to_player = player.global_position.distance_to(area1.global_position) + var area2_to_player = player.global_position.distance_to(area2.global_position) + return area1_to_player < area2_to_player + +func _input(event: InputEvent) -> void: + if event.is_action_pressed("interact") and can_interact: + if active_areas.size() > 0: + can_interact = false + label.hide() + await active_areas[0].interact.call() + can_interact = true diff --git a/scripts/item.gd b/scripts/item.gd index 1d599d3..0431ab2 100644 --- a/scripts/item.gd +++ b/scripts/item.gd @@ -10,10 +10,11 @@ enum States { idle, closed, opened, + looted, destroyed } -var state = States.idle: +@export var state = States.idle: get: return state set(value): diff --git a/scripts/player.gd b/scripts/player.gd index b912c36..1384b5a 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -25,11 +25,13 @@ var gold := 0: signal gold_changed(current_gold) signal game_over() +signal player_loaded() func _ready() -> void: health = maximum_health stamina = maximum_stamina state_changed.connect(_on_state_changed) + player_loaded.emit() func _on_state_changed(new_state: States) -> void: match new_state: