Add basic loot container

This commit is contained in:
Nathan Chapman 2025-05-26 21:18:19 -06:00
parent 98ea393c16
commit 14a3d1bbe9
22 changed files with 671 additions and 174 deletions

View File

@ -11,7 +11,7 @@ config_version=5
[application]
config/name="3D-RPG"
run/main_scene="uid://dw0lbkh31rofd"
run/main_scene="uid://cd3upe4xetlgl"
config/features=PackedStringArray("4.4", "Forward Plus")
config/icon="res://icon.svg"
@ -21,8 +21,8 @@ VFXManager="*res://src/scenes/autoload/vfx_manager.tscn"
[display]
window/size/viewport_width=1920
window/size/viewport_height=1080
window/size/viewport_width=2560
window/size/viewport_height=1440
window/size/mode=3
window/stretch/mode="canvas_items"

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ba553a12318e47f3f01c07dbad569e76d9d1b9696f5fb44eb9eb556aa0001187
size 2539
oid sha256:03a141ab4635df33b3090df99193836982b1bfc960f3e25d2a88f8aa5e0f75b6
size 2544

Binary file not shown.

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=9 format=3 uid="uid://cwvrti8hmxj0k"]
[gd_scene load_steps=10 format=3 uid="uid://cwvrti8hmxj0k"]
[ext_resource type="Script" uid="uid://p38hhb8jwgor" path="res://src/scripts/characters/enemy.gd" id="1_jr6vw"]
[ext_resource type="PackedScene" uid="uid://c7ahf78h5s3kx" path="res://assets/models/character/gear/tall_shield.glb" id="2_fwei0"]
@ -11,6 +11,9 @@
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_ljmr7"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_fwei0"]
radius = 10.0
[node name="Enemy" type="CharacterBody3D"]
collision_layer = 9
script = ExtResource("1_jr6vw")
@ -19,6 +22,9 @@ off_hand_items = Array[PackedScene]([ExtResource("2_fwei0"), ExtResource("3_aygw
[node name="NavigationAgent3D" type="NavigationAgent3D" parent="."]
avoidance_enabled = true
[node name="Timer" type="Timer" parent="."]
one_shot = true
[node name="HealthComponent" parent="." node_paths=PackedStringArray("body") instance=ExtResource("3_r8u7w")]
body = NodePath("..")
@ -29,37 +35,114 @@ shape = SubResource("CapsuleShape3D_r8u7w")
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
[node name="Skeleton3D" parent="Rig/CharacterRig/GameRig" index="0"]
bones/0/position = Vector3(1.41799e-14, 0.903864, -0.0481735)
bones/2/rotation = Quaternion(0.00254114, -0.000345045, 0.00321307, 0.999992)
bones/3/rotation = Quaternion(-0.0925045, -0.000328237, 0.00852257, 0.995676)
bones/4/rotation = Quaternion(0.273484, 1.50227e-08, 9.09987e-08, 0.961876)
bones/6/rotation = Quaternion(-0.16068, -1.17104e-07, -2.25642e-08, 0.987007)
bones/7/position = Vector3(-5.39946e-08, 0.903864, -0.0481735)
bones/8/position = Vector3(-5.91031e-08, 0.903864, -0.0481735)
bones/9/position = Vector3(0.131144, 0.970068, -0.0351291)
bones/9/rotation = Quaternion(0.993638, 0.0205636, -0.0310958, 0.106269)
bones/11/rotation = Quaternion(0.408196, -0.000698645, 0.000312532, 0.912894)
bones/13/rotation = Quaternion(-0.746414, 0.0118664, 0.0243817, 0.664929)
bones/15/position = Vector3(-0.131144, 0.970068, -0.0351291)
bones/15/rotation = Quaternion(0.974478, -0.00553855, 0.0274913, 0.222725)
bones/17/rotation = Quaternion(0.433159, 0.003226, -0.00155051, 0.901311)
bones/19/rotation = Quaternion(-0.683342, -0.0281668, -0.00108009, 0.729554)
bones/21/position = Vector3(0.0251286, 1.43374, 0.0448904)
bones/21/rotation = Quaternion(-0.481322, -0.262926, -0.408801, 0.729439)
bones/22/position = Vector3(0.19009, 1.47171, -0.0166302)
bones/22/rotation = Quaternion(0.035007, -0.161958, 0.975088, -0.14747)
bones/23/rotation = Quaternion(1.24303e-07, -0.0280484, 3.1793e-08, 0.999607)
bones/24/rotation = Quaternion(0.326585, -0.0280544, -0.0203048, 0.944533)
bones/46/position = Vector3(-0.0113635, 1.43374, 0.0448904)
bones/46/rotation = Quaternion(-0.490609, 0.243241, 0.395651, 0.73729)
bones/47/position = Vector3(-0.172762, 1.47222, -0.0251737)
bones/47/rotation = Quaternion(-0.0422729, -0.142474, 0.975197, 0.164026)
bones/48/rotation = Quaternion(-7.05598e-09, 0.0359437, -8.97213e-08, 0.999354)
bones/49/rotation = Quaternion(0.363577, 0.0359443, 0.0288099, 0.930425)
bones/71/position = Vector3(0.127191, 1.35349, -0.0253768)
bones/71/rotation = Quaternion(1.98289e-08, 0.605451, 0.795883, -4.61308e-08)
bones/72/position = Vector3(-0.113426, 1.35349, -0.0253769)
bones/72/rotation = Quaternion(1.98278e-08, 0.605468, 0.79587, -4.61313e-08)
bones/0/position = Vector3(1.39692e-14, 0.90108, -0.0481735)
bones/0/rotation = Quaternion(0.12582, 1.18262e-07, 1.49989e-08, 0.992053)
bones/1/rotation = Quaternion(-0.0566577, -0.00072973, -0.0117082, 0.998325)
bones/2/position = Vector3(3.20474e-09, 0.146689, -1.95578e-08)
bones/2/rotation = Quaternion(0.000743196, -0.000374187, 0.00321377, 0.999995)
bones/3/position = Vector3(-2.01263e-09, 0.202058, -2.51457e-08)
bones/3/rotation = Quaternion(-0.0941376, -0.000349476, 0.00852159, 0.995523)
bones/4/position = Vector3(3.02934e-10, 0.0925562, 3.91155e-08)
bones/4/rotation = Quaternion(0.274972, 1.48472e-08, 9.2249e-08, 0.961452)
bones/5/rotation = Quaternion(-0.0948564, -2.80691e-14, -2.26155e-08, 0.995491)
bones/6/rotation = Quaternion(-0.158807, -1.17424e-07, -2.06018e-08, 0.98731)
bones/7/position = Vector3(-3.32233e-08, 0.90108, -0.0481735)
bones/7/rotation = Quaternion(-0.0863677, -0.751104, -0.383052, 0.530711)
bones/8/position = Vector3(-7.31348e-08, 0.90108, -0.0481735)
bones/8/rotation = Quaternion(-0.0863677, 0.751104, 0.383052, 0.530711)
bones/9/position = Vector3(0.131144, 0.967284, -0.0351291)
bones/9/rotation = Quaternion(0.993362, 0.0207026, -0.0310291, 0.108811)
bones/10/position = Vector3(-2.36129e-08, 0.26601, -2.14789e-08)
bones/10/rotation = Quaternion(-3.13921e-08, -0.000695086, 1.20449e-08, 1)
bones/11/position = Vector3(-4.6306e-08, 0.26601, 2.42145e-08)
bones/11/rotation = Quaternion(0.413914, -0.000699774, 0.000318327, 0.910316)
bones/12/position = Vector3(3.05151e-08, 0.22603, 5.03768e-08)
bones/12/rotation = Quaternion(-8.19226e-09, -0.00710644, 4.16102e-08, 0.999975)
bones/13/position = Vector3(-2.95495e-08, 0.22603, 2.68392e-09)
bones/13/rotation = Quaternion(-0.748869, 0.0118755, 0.0243915, 0.662162)
bones/14/position = Vector3(-3.05481e-08, 0.139877, 1.64787e-08)
bones/14/rotation = Quaternion(-9.66743e-05, 0.967474, -0.252972, -0.000383447)
bones/15/position = Vector3(-0.131144, 0.967284, -0.0351291)
bones/15/rotation = Quaternion(0.973891, -0.00565072, 0.0274135, 0.225282)
bones/16/position = Vector3(-1.10042e-08, 0.265705, -3.31989e-08)
bones/16/rotation = Quaternion(-3.43227e-08, 0.00314323, 8.33075e-10, 0.999995)
bones/17/position = Vector3(1.83545e-08, 0.265705, 6.98543e-10)
bones/17/rotation = Quaternion(0.43836, 0.00325679, -0.00158855, 0.898792)
bones/18/position = Vector3(1.2807e-08, 0.225719, -8.28774e-09)
bones/18/rotation = Quaternion(-2.29017e-08, -0.00785732, 3.30149e-08, 0.999969)
bones/19/position = Vector3(-1.27748e-08, 0.225719, 1.12004e-08)
bones/19/rotation = Quaternion(-0.685613, -0.0281789, -0.000918696, 0.72742)
bones/20/position = Vector3(-1.30142e-08, 0.139877, -2.77457e-09)
bones/20/rotation = Quaternion(-9.96472e-05, 0.967461, -0.253021, -0.000383039)
bones/21/position = Vector3(0.0251286, 1.43109, 0.0438848)
bones/21/rotation = Quaternion(-0.486018, -0.261012, -0.405363, 0.728931)
bones/22/position = Vector3(0.189469, 1.46863, -0.0195107)
bones/22/rotation = Quaternion(0.0409265, -0.16106, 0.974858, -0.14845)
bones/23/position = Vector3(-5.41331e-09, 0.143946, -2.98023e-08)
bones/23/rotation = Quaternion(9.47234e-08, -0.0232248, 7.62074e-08, 0.99973)
bones/24/position = Vector3(-6.33301e-08, 0.143946, 4.3873e-08)
bones/24/rotation = Quaternion(0.315619, -0.023228, -0.0195211, 0.948401)
bones/25/position = Vector3(1.30385e-08, 0.127601, 6.51926e-09)
bones/25/rotation = Quaternion(1.49943e-07, -1.20606e-07, 9.91859e-08, 1)
bones/26/position = Vector3(2.06034e-08, 0.127601, 2.42761e-08)
bones/26/rotation = Quaternion(-0.00824883, -0.00027077, -0.0328667, 0.999426)
bones/28/rotation = Quaternion(0.702583, -0.000939743, -0.00133552, 0.7116)
bones/29/rotation = Quaternion(0.741121, 0.00218291, 0.00265381, 0.671363)
bones/30/rotation = Quaternion(0.32527, 0.890055, 0.295977, -0.119997)
bones/31/rotation = Quaternion(0.514882, -0.114149, 0.114482, 0.841879)
bones/32/rotation = Quaternion(0.592003, -0.0381348, -0.090699, 0.799907)
bones/34/position = Vector3(-0.00316938, 0.0987206, 0.0147918)
bones/34/rotation = Quaternion(-0.0674699, 0.718446, 0.0663966, 0.689112)
bones/35/rotation = Quaternion(0.580803, -0.000892135, -0.0014975, 0.814042)
bones/36/rotation = Quaternion(0.682777, 0.00174509, 0.00256596, 0.73062)
bones/37/rotation = Quaternion(-0.00426514, 0.736714, 0.0394785, 0.675038)
bones/38/position = Vector3(-0.00622951, 0.0926415, -0.0236344)
bones/38/rotation = Quaternion(-0.109873, 0.743351, 0.0333507, 0.658973)
bones/39/rotation = Quaternion(0.630039, 0.00151959, 0.00237944, 0.776559)
bones/40/rotation = Quaternion(0.652643, -0.00308142, -0.00421108, 0.757648)
bones/41/rotation = Quaternion(-0.0684174, 0.72411, 0.0332337, 0.685478)
bones/42/position = Vector3(-0.00715362, 0.0679857, -0.0481983)
bones/42/rotation = Quaternion(-0.120913, 0.799109, 0.0358921, 0.587807)
bones/43/rotation = Quaternion(0.498693, -0.0202705, -0.0256953, 0.866161)
bones/44/rotation = Quaternion(0.715385, 0.035306, 0.0573145, 0.695481)
bones/45/rotation = Quaternion(-0.129059, 0.728936, -0.0250259, 0.67184)
bones/46/position = Vector3(-0.0113635, 1.43109, 0.0438848)
bones/46/rotation = Quaternion(-0.499115, 0.23396, 0.387072, 0.739136)
bones/47/position = Vector3(-0.170541, 1.46915, -0.0312238)
bones/47/rotation = Quaternion(-0.0558126, -0.140182, 0.974516, 0.165989)
bones/48/position = Vector3(1.88476e-07, 0.143946, 1.02445e-08)
bones/48/rotation = Quaternion(-2.11681e-08, 0.0267761, -6.38373e-08, 0.999642)
bones/49/position = Vector3(6.5191e-09, 0.143946, -1.95094e-08)
bones/49/rotation = Quaternion(0.350981, 0.0267776, 0.0289447, 0.935552)
bones/50/position = Vector3(-1.48779e-07, 0.1276, 5.9139e-08)
bones/50/rotation = Quaternion(-8.73115e-08, 2.7474e-08, -1.28057e-07, 1)
bones/51/position = Vector3(1.9461e-07, 0.127601, 6.06248e-08)
bones/51/rotation = Quaternion(-0.00824876, 0.000270832, 0.032867, 0.999426)
bones/52/rotation = Quaternion(-0.2563, 0.855859, 0.0299184, -0.448241)
bones/53/rotation = Quaternion(0.694912, 0.107145, -0.103549, 0.703488)
bones/54/rotation = Quaternion(0.74112, -0.00218237, -0.00265409, 0.671363)
bones/55/rotation = Quaternion(-0.325269, 0.890055, 0.295977, 0.119998)
bones/56/rotation = Quaternion(0.514882, 0.11415, -0.114483, 0.841879)
bones/57/rotation = Quaternion(0.592004, 0.0381346, 0.0906992, 0.799907)
bones/59/position = Vector3(0.00316943, 0.0987207, 0.0147917)
bones/59/rotation = Quaternion(0.138771, -0.704916, 0.15571, 0.677932)
bones/60/rotation = Quaternion(0.579984, 0.0462615, -0.0308755, 0.812727)
bones/61/rotation = Quaternion(0.682777, -0.00174718, -0.00256448, 0.73062)
bones/62/rotation = Quaternion(-0.00426532, -0.736714, -0.0394788, 0.675038)
bones/63/position = Vector3(0.00622955, 0.0926417, -0.0236344)
bones/63/rotation = Quaternion(0.104095, -0.719607, 0.186262, 0.660784)
bones/64/rotation = Quaternion(0.670693, 0.0163391, -0.0185663, 0.741323)
bones/65/rotation = Quaternion(0.692499, 0.00330364, 0.00403917, 0.7214)
bones/66/rotation = Quaternion(-0.0684178, -0.72411, -0.0332339, 0.685477)
bones/67/position = Vector3(0.00715371, 0.0679859, -0.0481984)
bones/67/rotation = Quaternion(0.108364, -0.768224, 0.166291, 0.608635)
bones/68/rotation = Quaternion(0.629954, 0.0295149, 0.0177509, 0.775869)
bones/69/rotation = Quaternion(0.816678, -0.0439534, -0.0509861, 0.573155)
bones/70/rotation = Quaternion(-0.12906, -0.728937, 0.0250258, 0.67184)
bones/71/position = Vector3(0.127191, 1.35032, -0.02577)
bones/71/rotation = Quaternion(1.9622e-08, 0.608474, 0.793573, -4.62466e-08)
bones/72/position = Vector3(-0.113426, 1.35032, -0.02577)
bones/72/rotation = Quaternion(1.9623e-08, 0.608463, 0.793582, -4.62457e-08)
[node name="Knight_02" parent="Rig/CharacterRig/GameRig/Skeleton3D" index="1"]
visible = false
@ -68,17 +151,23 @@ visible = false
visible = true
[node name="RightHandBone" parent="Rig" index="2"]
transform = Transform3D(-0.962343, -0.270803, -0.0237131, 0.231269, -0.861444, 0.452138, -0.142868, 0.429628, 0.891632, -0.346578, 0.997949, 0.00158512)
transform = Transform3D(-0.962334, -0.270838, -0.0236795, 0.235311, -0.873384, 0.426415, -0.136171, 0.404782, 0.904217, -0.344367, 0.991801, -0.0106259)
[node name="LeftHandBone" parent="Rig" index="3"]
transform = Transform3D(-0.970513, 0.239109, 0.0305225, -0.215283, -0.916755, 0.336472, 0.108435, 0.31998, 0.941198, 0.346901, 0.98305, -0.026914)
transform = Transform3D(-0.970516, 0.2391, 0.0304918, -0.217867, -0.924295, 0.313388, 0.103115, 0.297505, 0.949135, 0.346278, 0.977994, -0.0353943)
[node name="PlayerDetector" type="ShapeCast3D" parent="Rig"]
[node name="PlayerDetectorAttack" type="ShapeCast3D" parent="Rig"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1)
shape = SubResource("CapsuleShape3D_ljmr7")
target_position = Vector3(0, 0, 0)
collision_mask = 4
[node name="PlayerDetectorPursue" type="ShapeCast3D" parent="Rig"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1)
shape = SubResource("CylinderShape3D_fwei0")
target_position = Vector3(0, 0, 0)
collision_mask = 4
[node name="AreaAttack" parent="Rig" instance=ExtResource("3_ljmr7")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1)
collision_mask = 4

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=15 format=3 uid="uid://nsv4lbw7j8mi"]
[gd_scene load_steps=17 format=3 uid="uid://nsv4lbw7j8mi"]
[ext_resource type="Script" uid="uid://csgybabwb8cbg" path="res://src/scripts/characters/player.gd" id="1_swhsd"]
[ext_resource type="PackedScene" uid="uid://dw8f5oy13cdtx" path="res://src/scenes/characters/health_component.tscn" id="2_0xash"]
@ -15,6 +15,19 @@
script = ExtResource("2_ulq46")
metadata/_custom_type_script = "uid://dwysfismpgq07"
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_n7yyv"]
properties/0/path = NodePath(".:position")
properties/0/spawn = true
properties/0/replication_mode = 1
properties/1/path = NodePath("RigPivot:rotation")
properties/1/spawn = true
properties/1/replication_mode = 1
properties/2/path = NodePath("RigPivot/Rig/AnimationTree:parameters/MoveSpace/blend_position")
properties/2/spawn = true
properties/2/replication_mode = 1
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_yal87"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_yx56f"]
[sub_resource type="SeparationRayShape3D" id="SeparationRayShape3D_swhsd"]
@ -26,6 +39,12 @@ collision_layer = 5
script = ExtResource("1_swhsd")
stats = SubResource("Resource_wdvff")
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
replication_config = SubResource("SceneReplicationConfig_n7yyv")
[node name="PlayerInput" type="MultiplayerSynchronizer" parent="."]
replication_config = SubResource("SceneReplicationConfig_yal87")
[node name="HealthComponent" parent="." node_paths=PackedStringArray("body") instance=ExtResource("2_0xash")]
body = NodePath("..")
@ -51,53 +70,53 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
[node name="Rig" parent="RigPivot" instance=ExtResource("3_n52bt")]
[node name="Skeleton3D" parent="RigPivot/Rig/CharacterRig/GameRig" index="0"]
bones/0/position = Vector3(3.37508e-15, 0.891862, -0.0481736)
bones/0/position = Vector3(6.51628e-15, 0.905322, -0.0481736)
bones/0/rotation = Quaternion(0.12582, 1.18262e-07, 1.49989e-08, 0.992053)
bones/1/rotation = Quaternion(-0.0566577, -0.00072973, -0.0117082, 0.998325)
bones/2/position = Vector3(3.20474e-09, 0.146689, -1.95578e-08)
bones/2/rotation = Quaternion(-0.00449009, -0.000459002, 0.00321567, 0.999985)
bones/2/rotation = Quaternion(0.00349197, -0.00032964, 0.00321261, 0.999989)
bones/3/position = Vector3(-2.01263e-09, 0.202058, -2.51457e-08)
bones/3/rotation = Quaternion(-0.0995123, -0.000419335, 0.00851796, 0.995)
bones/3/rotation = Quaternion(-0.0916421, -0.000317015, 0.00852314, 0.995756)
bones/4/position = Vector3(3.02934e-10, 0.0925562, 3.91155e-08)
bones/4/rotation = Quaternion(0.278904, 1.42911e-08, 9.58138e-08, 0.960319)
bones/4/rotation = Quaternion(0.272711, 1.5502e-08, 8.89817e-08, 0.962096)
bones/5/rotation = Quaternion(-0.0948564, -2.80691e-14, -2.26155e-08, 0.995491)
bones/6/rotation = Quaternion(-0.153673, -1.17858e-07, -1.78885e-08, 0.988122)
bones/7/position = Vector3(-3.23587e-08, 0.891862, -0.0481735)
bones/6/rotation = Quaternion(-0.161659, -1.17055e-07, -2.28501e-08, 0.986847)
bones/7/position = Vector3(-2.49455e-08, 0.905321, -0.0481734)
bones/7/rotation = Quaternion(-0.0863677, -0.751104, -0.383052, 0.530711)
bones/8/position = Vector3(-4.86593e-08, 0.891862, -0.0481735)
bones/8/position = Vector3(-2.74011e-08, 0.905321, -0.0481735)
bones/8/rotation = Quaternion(-0.0863677, 0.751104, 0.383052, 0.530711)
bones/9/position = Vector3(0.131144, 0.958067, -0.0351291)
bones/9/rotation = Quaternion(0.992474, 0.021142, -0.0308232, 0.116611)
bones/9/position = Vector3(0.131144, 0.971526, -0.0351291)
bones/9/rotation = Quaternion(0.993781, 0.0204907, -0.0311309, 0.104929)
bones/10/position = Vector3(-2.36129e-08, 0.26601, -2.14789e-08)
bones/10/rotation = Quaternion(-3.13921e-08, -0.000695086, 1.20449e-08, 1)
bones/11/position = Vector3(-4.6306e-08, 0.26601, 2.42145e-08)
bones/11/rotation = Quaternion(0.431734, -0.000700548, 0.000335439, 0.902)
bones/11/rotation = Quaternion(0.405182, -0.000697965, 0.000309493, 0.914236)
bones/12/position = Vector3(3.05151e-08, 0.22603, 5.03768e-08)
bones/12/rotation = Quaternion(-8.19226e-09, -0.00710644, 4.16102e-08, 0.999975)
bones/13/position = Vector3(-2.95495e-08, 0.22603, 2.68392e-09)
bones/13/rotation = Quaternion(-0.756783, 0.0119047, 0.0244327, 0.653101)
bones/13/rotation = Quaternion(-0.745117, 0.0118616, 0.0243766, 0.666383)
bones/14/position = Vector3(-3.05481e-08, 0.139877, 1.64787e-08)
bones/14/rotation = Quaternion(-9.66743e-05, 0.967474, -0.252972, -0.000383447)
bones/15/position = Vector3(-0.131144, 0.958067, -0.0351291)
bones/15/rotation = Quaternion(0.972138, -0.00597952, 0.0271847, 0.232749)
bones/15/position = Vector3(-0.131144, 0.971526, -0.0351291)
bones/15/rotation = Quaternion(0.974794, -0.00547746, 0.0275337, 0.221332)
bones/16/position = Vector3(-1.10042e-08, 0.265705, -3.31989e-08)
bones/16/rotation = Quaternion(-3.43227e-08, 0.00314323, 8.33075e-10, 0.999995)
bones/17/position = Vector3(1.83545e-08, 0.265705, 6.98543e-10)
bones/17/rotation = Quaternion(0.455056, 0.00335542, -0.00171483, 0.890455)
bones/17/rotation = Quaternion(0.430415, 0.00320978, -0.00153069, 0.902624)
bones/18/position = Vector3(1.2807e-08, 0.225719, -8.28774e-09)
bones/18/rotation = Quaternion(-2.29017e-08, -0.00785732, 3.30149e-08, 0.999969)
bones/19/position = Vector3(-1.27748e-08, 0.225719, 1.12004e-08)
bones/19/rotation = Quaternion(-0.692156, -0.0282135, -0.000449152, 0.721196)
bones/19/rotation = Quaternion(-0.682144, -0.0281602, -0.00116479, 0.730674)
bones/20/position = Vector3(-1.30142e-08, 0.139877, -2.77457e-09)
bones/20/rotation = Quaternion(-9.96472e-05, 0.967461, -0.253021, -0.000383039)
bones/21/position = Vector3(0.0251286, 1.42316, 0.040874)
bones/21/rotation = Quaternion(-0.501707, -0.254446, -0.393926, 0.726891)
bones/22/position = Vector3(0.187412, 1.45863, -0.0286662)
bones/22/rotation = Quaternion(0.0606331, -0.158025, 0.973831, -0.151677)
bones/21/position = Vector3(0.0251286, 1.43512, 0.0454166)
bones/21/rotation = Quaternion(-0.478865, -0.263918, -0.410602, 0.729686)
bones/22/position = Vector3(0.190408, 1.47331, -0.0151183)
bones/22/rotation = Quaternion(0.0318981, -0.162427, 0.975195, -0.146953)
bones/23/position = Vector3(-5.41331e-09, 0.143946, -2.98023e-08)
bones/23/rotation = Quaternion(7.97521e-08, -0.00786971, -1.50795e-08, 0.999969)
bones/23/rotation = Quaternion(7.42555e-09, -0.030569, 6.41867e-08, 0.999533)
bones/24/position = Vector3(-6.33301e-08, 0.143946, 4.3873e-08)
bones/24/rotation = Quaternion(0.277839, -0.00675305, -0.016611, 0.96046)
bones/24/rotation = Quaternion(0.332279, -0.0305696, -0.0206956, 0.942458)
bones/25/position = Vector3(1.30385e-08, 0.127601, 6.51926e-09)
bones/25/rotation = Quaternion(1.49943e-07, -1.20606e-07, 9.91859e-08, 1)
bones/26/position = Vector3(2.06034e-08, 0.127601, 2.42761e-08)
@ -122,14 +141,14 @@ bones/42/rotation = Quaternion(-0.120913, 0.799109, 0.0358921, 0.587807)
bones/43/rotation = Quaternion(0.498693, -0.0202705, -0.0256953, 0.866161)
bones/44/rotation = Quaternion(0.715385, 0.035306, 0.0573145, 0.695481)
bones/45/rotation = Quaternion(-0.129059, 0.728936, -0.0250259, 0.67184)
bones/46/position = Vector3(-0.0113635, 1.42316, 0.040874)
bones/46/rotation = Quaternion(-0.527917, 0.201753, 0.357521, 0.743491)
bones/47/position = Vector3(-0.161977, 1.45794, -0.0515628)
bones/47/rotation = Quaternion(-0.101804, -0.132181, 0.97079, 0.172428)
bones/46/position = Vector3(-0.0113635, 1.43512, 0.0454166)
bones/46/rotation = Quaternion(-0.486181, 0.248047, 0.400116, 0.736212)
bones/47/position = Vector3(-0.173849, 1.47377, -0.0219916)
bones/47/rotation = Quaternion(-0.0352038, -0.143659, 0.975478, 0.162989)
bones/48/position = Vector3(1.88476e-07, 0.143946, 1.02445e-08)
bones/48/rotation = Quaternion(-6.49339e-08, -0.0048348, -1.07477e-07, 0.999988)
bones/48/rotation = Quaternion(-1.29417e-07, 0.0407109, -6.52581e-08, 0.999171)
bones/49/position = Vector3(6.5191e-09, 0.143946, -1.95094e-08)
bones/49/rotation = Quaternion(0.307483, -0.00462725, 0.0284921, 0.951116)
bones/49/rotation = Quaternion(0.370114, 0.0407114, 0.0286717, 0.927651)
bones/50/position = Vector3(-1.48779e-07, 0.1276, 5.9139e-08)
bones/50/rotation = Quaternion(-8.73115e-08, 2.7474e-08, -1.28057e-07, 1)
bones/51/position = Vector3(1.9461e-07, 0.127601, 6.06248e-08)
@ -155,19 +174,19 @@ bones/67/rotation = Quaternion(0.108364, -0.768224, 0.166291, 0.608635)
bones/68/rotation = Quaternion(0.629954, 0.0295149, 0.0177509, 0.775869)
bones/69/rotation = Quaternion(0.816678, -0.0439534, -0.0509861, 0.573155)
bones/70/rotation = Quaternion(-0.12906, -0.728937, 0.0250258, 0.67184)
bones/71/position = Vector3(0.127191, 1.34018, -0.0270091)
bones/71/rotation = Quaternion(1.89147e-08, 0.618777, 0.785567, -4.66285e-08)
bones/72/position = Vector3(-0.113426, 1.34018, -0.0270091)
bones/72/rotation = Quaternion(1.89148e-08, 0.618777, 0.785567, -4.66284e-08)
bones/71/position = Vector3(0.127191, 1.35516, -0.0251694)
bones/71/rotation = Quaternion(1.99367e-08, 0.603874, 0.79708, -4.60697e-08)
bones/72/position = Vector3(-0.113426, 1.35516, -0.0251694)
bones/72/rotation = Quaternion(1.99367e-08, 0.603874, 0.79708, -4.60696e-08)
[node name="RightHandBone" parent="RigPivot/Rig" index="2"]
transform = Transform3D(-0.962416, -0.270569, -0.0234052, 0.247334, -0.908828, 0.335944, -0.112168, 0.317529, 0.941591, -0.335735, 0.971392, -0.0526208)
transform = Transform3D(-0.962343, -0.270802, -0.0237138, 0.22911, -0.854939, 0.46539, -0.146302, 0.442432, 0.884788, -0.347666, 1.00118, 0.00794098)
[node name="LeftHandBone" parent="RigPivot/Rig" index="3"]
transform = Transform3D(-0.970321, 0.239754, 0.0315476, -0.226072, -0.945683, 0.233613, 0.0858439, 0.219548, 0.971817, 0.344388, 0.96235, -0.0640138)
transform = Transform3D(-0.970513, 0.239108, 0.0305211, -0.213886, -0.912613, 0.348413, 0.111162, 0.331611, 0.936844, 0.347219, 0.985729, -0.0225046)
[node name="RayAttachment" type="BoneAttachment3D" parent="RigPivot/Rig"]
transform = Transform3D(-0.962416, -0.270569, -0.0234052, 0.247334, -0.908828, 0.335944, -0.112168, 0.317529, 0.941591, -0.335735, 0.971392, -0.0526208)
transform = Transform3D(-0.962343, -0.270802, -0.0237138, 0.22911, -0.854939, 0.46539, -0.146302, 0.442432, 0.884788, -0.347666, 1.00118, 0.00794098)
bone_name = "DEF-hand.R"
bone_idx = 51
use_external_skeleton = true
@ -199,10 +218,6 @@ player = NodePath("../..")
[node name="UserInterface" parent="." node_paths=PackedStringArray("player") instance=ExtResource("9_wdvff")]
player = NodePath("..")
[node name="InteractContainer" parent="UserInterface/HUD" index="1"]
visible = false
modulate = Color(1, 1, 1, 0)
[node name="Inventory" parent="UserInterface" index="1" node_paths=PackedStringArray("player")]
player = NodePath("../..")

View File

@ -2,8 +2,8 @@
[ext_resource type="Script" uid="uid://bmywk4wvcp0lr" path="res://addons/sky_3d/src/Sky3D.gd" id="1_1jhfv"]
[ext_resource type="Texture2D" uid="uid://bpamrp14tk2cp" path="res://assets/textures/terrain/sand_albedo_height.png" id="1_7iny7"]
[ext_resource type="PackedScene" uid="uid://nsv4lbw7j8mi" path="res://src/scenes/characters/player.tscn" id="1_crbv0"]
[ext_resource type="NavigationMesh" uid="uid://b6foidbd4r8qv" path="res://src/resources/level_navigation_mesh.res" id="1_juj6f"]
[ext_resource type="Script" uid="uid://dj5vsww5nehm7" path="res://src/scripts/levels/level.gd" id="1_m8n0u"]
[ext_resource type="Texture2D" uid="uid://dpq5k4rlimus8" path="res://assets/textures/terrain/sand_normal_roughness.png" id="2_cxs0p"]
[ext_resource type="PackedScene" uid="uid://b1fe4n68iivfm" path="res://assets/models/environment/rock_cliff_env_03.glb" id="2_d2tjv"]
[ext_resource type="Script" uid="uid://27fj74ofndim" path="res://addons/sky_3d/src/Skydome.gd" id="2_juj6f"]
@ -131,6 +131,60 @@ sdfgi_enabled = true
auto_exposure_scale = 0.2
[node name="Level" type="Node3D"]
script = ExtResource("1_m8n0u")
[node name="FirePit" parent="." instance=ExtResource("10_juj6f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 41.2201, 94.5773, -58.0352)
[node name="Castle" type="Node3D" parent="."]
[node name="wall_stone_gate_bldg_01" parent="Castle" instance=ExtResource("5_0eo66")]
transform = Transform3D(0.749869, 0, -0.661587, 0, 1, 0, 0.661587, 0, 0.749869, 27.1497, 94.5546, -36.3422)
[node name="stone_wall_bldg_04" parent="Castle/wall_stone_gate_bldg_01" instance=ExtResource("6_dn2un")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.26476, 0, -0.0166817)
[node name="stone_wall_bldg_05" parent="Castle/wall_stone_gate_bldg_01" instance=ExtResource("6_dn2un")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.7805, 0.0131226, -0.040226)
[node name="stone_wall_bldg_06" parent="Castle/wall_stone_gate_bldg_01" instance=ExtResource("6_dn2un")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.8046, 0.0131226, -0.122562)
[node name="stone_wall_bldg_07" parent="Castle/wall_stone_gate_bldg_01" instance=ExtResource("6_dn2un")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -19.7101, 0.0131226, -0.132374)
[node name="stone_wall_bldg_08" parent="Castle/wall_stone_gate_bldg_01" instance=ExtResource("6_dn2un")]
transform = Transform3D(0.958048, 0, 0.286608, 0, 1, 0, -0.286608, 0, 0.958048, -26.8721, 0.0131226, 2.09649)
[node name="turret_square_bldg_02" parent="Castle/wall_stone_gate_bldg_01" instance=ExtResource("7_7iny7")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.0896, -1, 0.0723419)
[node name="turret_square_bldg_03" parent="Castle/wall_stone_gate_bldg_01" instance=ExtResource("7_7iny7")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.0602, -1, 0.465519)
[node name="house_modular_01" parent="Castle" instance=ExtResource("8_cxs0p")]
transform = Transform3D(0.93598, 0, -0.352054, 0, 1, 0, 0.352054, 0, 0.93598, 45.6923, 94.5589, -70.1131)
[node name="house_modular_02" parent="Castle" instance=ExtResource("8_cxs0p")]
transform = Transform3D(0.611071, 0, -0.791576, 0, 1, 0, 0.791576, 0, 0.611071, 55.9864, 94.5589, -60.0366)
[node name="Interactible" type="Node3D" parent="."]
[node name="Chest" parent="Interactible" instance=ExtResource("9_856t6")]
transform = Transform3D(0.478554, 0, 0.878058, 0, 1, 0, -0.878058, 0, 0.478554, 47.9001, 94.6013, -69.1724)
[node name="CurrencyIcon" parent="Interactible/Chest" instance=ExtResource("10_vltgv")]
visible = false
value = 600
[node name="ArmorIcon" parent="Interactible/Chest" instance=ExtResource("11_b2fxt")]
visible = false
power = 10
armor = 1
[node name="WeaponIcon" parent="Interactible/Chest" instance=ExtResource("12_htor1")]
visible = false
power = 12
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
navigation_mesh = ExtResource("1_juj6f")
@ -142,59 +196,6 @@ assets = SubResource("Terrain3DAssets_vltgv")
top_level = true
metadata/_edit_lock_ = true
[node name="FirePit" parent="NavigationRegion3D" instance=ExtResource("10_juj6f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 41.2201, 94.5773, -58.0352)
[node name="Castle" type="Node3D" parent="NavigationRegion3D"]
[node name="wall_stone_gate_bldg_01" parent="NavigationRegion3D/Castle" instance=ExtResource("5_0eo66")]
transform = Transform3D(0.749869, 0, -0.661587, 0, 1, 0, 0.661587, 0, 0.749869, 27.1497, 94.5546, -36.3422)
[node name="stone_wall_bldg_04" parent="NavigationRegion3D/Castle/wall_stone_gate_bldg_01" instance=ExtResource("6_dn2un")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.26476, 0, -0.0166817)
[node name="stone_wall_bldg_05" parent="NavigationRegion3D/Castle/wall_stone_gate_bldg_01" instance=ExtResource("6_dn2un")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.7805, 0.0131226, -0.040226)
[node name="stone_wall_bldg_06" parent="NavigationRegion3D/Castle/wall_stone_gate_bldg_01" instance=ExtResource("6_dn2un")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.8046, 0.0131226, -0.122562)
[node name="stone_wall_bldg_07" parent="NavigationRegion3D/Castle/wall_stone_gate_bldg_01" instance=ExtResource("6_dn2un")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -19.7101, 0.0131226, -0.132374)
[node name="stone_wall_bldg_08" parent="NavigationRegion3D/Castle/wall_stone_gate_bldg_01" instance=ExtResource("6_dn2un")]
transform = Transform3D(0.958048, 0, 0.286608, 0, 1, 0, -0.286608, 0, 0.958048, -26.8721, 0.0131226, 2.09649)
[node name="turret_square_bldg_02" parent="NavigationRegion3D/Castle/wall_stone_gate_bldg_01" instance=ExtResource("7_7iny7")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.0896, -1, 0.0723419)
[node name="turret_square_bldg_03" parent="NavigationRegion3D/Castle/wall_stone_gate_bldg_01" instance=ExtResource("7_7iny7")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.0602, -1, 0.465519)
[node name="house_modular_01" parent="NavigationRegion3D/Castle" instance=ExtResource("8_cxs0p")]
transform = Transform3D(0.93598, 0, -0.352054, 0, 1, 0, 0.352054, 0, 0.93598, 45.6923, 94.5589, -70.1131)
[node name="house_modular_02" parent="NavigationRegion3D/Castle" instance=ExtResource("8_cxs0p")]
transform = Transform3D(0.611071, 0, -0.791576, 0, 1, 0, 0.791576, 0, 0.611071, 55.9864, 94.5589, -60.0366)
[node name="Interactible" type="Node3D" parent="NavigationRegion3D"]
[node name="Chest" parent="NavigationRegion3D/Interactible" instance=ExtResource("9_856t6")]
transform = Transform3D(0.478554, 0, 0.878058, 0, 1, 0, -0.878058, 0, 0.478554, 47.9001, 94.6013, -69.1724)
[node name="CurrencyIcon" parent="NavigationRegion3D/Interactible/Chest" instance=ExtResource("10_vltgv")]
visible = false
value = 600
[node name="ArmorIcon" parent="NavigationRegion3D/Interactible/Chest" instance=ExtResource("11_b2fxt")]
visible = false
power = 10
armor = 1
[node name="WeaponIcon" parent="NavigationRegion3D/Interactible/Chest" instance=ExtResource("12_htor1")]
visible = false
power = 12
[node name="Sky3D" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_cxs0p")
camera_attributes = SubResource("CameraAttributesPractical_0slur")
@ -323,9 +324,6 @@ latitude = 16.0
longitude = 108.0
utc = 7.0
[node name="Player" parent="." instance=ExtResource("1_crbv0")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 40.8443, 95.6024, -61.289)
[node name="MapBoundary" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 106.891, 0)
@ -395,3 +393,11 @@ transform = Transform3D(0.971759, 0, 0.235973, 0, 1, 0, -0.235973, 0, 0.971759,
[node name="Water" parent="." instance=ExtResource("15_0slur")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 87.9142, 0)
visible = false
[node name="Players" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 35.3396, 95.7805, -63.3113)
[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="."]
_spawnable_scenes = PackedStringArray("uid://nsv4lbw7j8mi")
spawn_path = NodePath("../Players")
spawn_limit = 10

41
src/scenes/main.tscn Normal file
View File

@ -0,0 +1,41 @@
[gd_scene load_steps=2 format=3 uid="uid://cd3upe4xetlgl"]
[ext_resource type="Script" uid="uid://b2ec1cajpfusg" path="res://src/scripts/network/multiplayer.gd" id="1_rr2wm"]
[node name="Main" type="Node"]
script = ExtResource("1_rr2wm")
[node name="Level" type="Node" parent="."]
[node name="LevelSpawner" type="MultiplayerSpawner" parent="."]
_spawnable_scenes = PackedStringArray("uid://dw0lbkh31rofd")
spawn_path = NodePath("../Level")
spawn_limit = 1
[node name="UI" type="MarginContainer" parent="."]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -22.0
offset_top = -15.5
offset_right = 22.0
offset_bottom = 15.5
grow_horizontal = 2
grow_vertical = 2
[node name="VBoxContainer" type="VBoxContainer" parent="UI"]
layout_mode = 2
theme_override_constants/separation = 16
[node name="Host" type="Button" parent="UI/VBoxContainer"]
layout_mode = 2
text = "Host"
[node name="Join" type="Button" parent="UI/VBoxContainer"]
layout_mode = 2
text = "Join"
[connection signal="pressed" from="UI/VBoxContainer/Host" to="." method="_on_host_pressed"]
[connection signal="pressed" from="UI/VBoxContainer/Join" to="." method="_on_join_pressed"]

View File

@ -110,7 +110,7 @@ stretch = true
world_3d = SubResource("World3D_tfrle")
transparent_bg = true
handle_input_locally = false
size = Vector2i(512, 868)
size = Vector2i(512, 1228)
render_target_update_mode = 4
[node name="Rig" parent="MarginContainer/VBoxContainer/HBoxContainer/SubViewportContainer/SubViewport" instance=ExtResource("5_dryat")]

View File

@ -0,0 +1,107 @@
[gd_scene load_steps=10 format=3 uid="uid://b8r1w3tush5ue"]
[ext_resource type="Script" uid="uid://depcr1bjlbfo4" path="res://src/scripts/ui/loot_container.gd" id="1_58h8c"]
[ext_resource type="StyleBox" uid="uid://copt367rq3lyr" path="res://src/resources/ui/ui_panel.tres" id="1_l6r4p"]
[ext_resource type="Texture2D" uid="uid://dhvatbbng4411" path="res://assets/ui/window/window_header.png" id="2_58h8c"]
[ext_resource type="FontFile" uid="uid://sua821wsaeli" path="res://assets/fonts/Candara_Bold.ttf" id="3_4ccu8"]
[ext_resource type="PackedScene" uid="uid://b35w0afp1fdpg" path="res://src/scenes/ui/item_icon.tscn" id="4_x354n"]
[ext_resource type="Texture2D" uid="uid://bhwo6wc0xooyv" path="res://assets/ui/button/button.png" id="5_8p2he"]
[ext_resource type="Texture2D" uid="uid://sy6pbgn2gaqq" path="res://assets/ui/button/button_press.png" id="6_us65b"]
[ext_resource type="Texture2D" uid="uid://xl4dmewy7fpf" path="res://assets/ui/button/button_hover.png" id="7_v4al2"]
[sub_resource type="LabelSettings" id="LabelSettings_g5kcc"]
font = ExtResource("3_4ccu8")
font_size = 22
shadow_color = Color(0, 0, 0, 1)
[node name="LootContainer" type="CenterContainer"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_58h8c")
[node name="PanelContainer" type="PanelContainer" parent="."]
layout_mode = 2
theme_override_styles/panel = ExtResource("1_l6r4p")
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"]
layout_mode = 2
[node name="TitleTexture" type="TextureRect" parent="PanelContainer/VBoxContainer"]
layout_mode = 2
texture = ExtResource("2_58h8c")
expand_mode = 5
[node name="Title" type="Label" parent="PanelContainer/VBoxContainer/TitleTexture"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
text = "Chest"
label_settings = SubResource("LabelSettings_g5kcc")
horizontal_alignment = 1
vertical_alignment = 1
[node name="GridContainer" type="GridContainer" parent="PanelContainer/VBoxContainer"]
custom_minimum_size = Vector2(512, 256)
layout_mode = 2
columns = 4
[node name="ItemIcon" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("4_x354n")]
layout_mode = 2
[node name="ItemIcon2" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("4_x354n")]
layout_mode = 2
[node name="ItemIcon3" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("4_x354n")]
layout_mode = 2
[node name="ItemIcon4" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("4_x354n")]
layout_mode = 2
[node name="ItemIcon5" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("4_x354n")]
layout_mode = 2
[node name="ItemIcon6" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("4_x354n")]
layout_mode = 2
[node name="ItemIcon7" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("4_x354n")]
layout_mode = 2
[node name="ItemIcon8" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("4_x354n")]
layout_mode = 2
[node name="CloseButton" type="TextureButton" parent="PanelContainer/VBoxContainer"]
custom_minimum_size = Vector2(200, 80)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
texture_normal = ExtResource("5_8p2he")
texture_pressed = ExtResource("6_us65b")
texture_hover = ExtResource("7_v4al2")
ignore_texture_size = true
stretch_mode = 4
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/CloseButton"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -16.5
offset_top = -8.5
offset_right = 16.5
offset_bottom = 8.5
grow_horizontal = 2
grow_vertical = 2
text = "Close"
label_settings = SubResource("LabelSettings_g5kcc")
horizontal_alignment = 1
vertical_alignment = 1
[connection signal="pressed" from="PanelContainer/VBoxContainer/CloseButton" to="." method="toggle_open"]

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=14 format=3 uid="uid://blex30jj7g55d"]
[gd_scene load_steps=15 format=3 uid="uid://blex30jj7g55d"]
[ext_resource type="Texture2D" uid="uid://b7gexelwfg2wp" path="res://assets/ui/unitframe/health_bar_under.png" id="1_qhv2u"]
[ext_resource type="Script" uid="uid://5d05pjburasd" path="res://src/scripts/ui/user_interface.gd" id="1_xba4v"]
@ -8,6 +8,7 @@
[ext_resource type="Texture2D" uid="uid://dn2npqh8ue3vy" path="res://assets/ui/unitframe/blue_bar.png" id="4_ma5hf"]
[ext_resource type="FontFile" uid="uid://sua821wsaeli" path="res://assets/fonts/Candara_Bold.ttf" id="7_1j7ss"]
[ext_resource type="PackedScene" uid="uid://csadps2at3npv" path="res://src/scenes/ui/inventory.tscn" id="7_70hpn"]
[ext_resource type="PackedScene" uid="uid://b8r1w3tush5ue" path="res://src/scenes/ui/loot_container.tscn" id="9_g5kcc"]
[sub_resource type="LabelSettings" id="LabelSettings_xba4v"]
font = ExtResource("3_nxqqf")
@ -16,9 +17,36 @@ font_color = Color(0.960784, 0.717647, 0.423529, 1)
[sub_resource type="LabelSettings" id="LabelSettings_g5kcc"]
font = ExtResource("7_1j7ss")
font_size = 36
font_size = 22
shadow_color = Color(0, 0, 0, 1)
[sub_resource type="Animation" id="Animation_g5kcc"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("HUD/InteractContainer:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("HUD/InteractContainer:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
[sub_resource type="Animation" id="Animation_1j7ss"]
resource_name = "fade_out_text"
length = 0.3
@ -47,33 +75,6 @@ tracks/1/keys = {
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
[sub_resource type="Animation" id="Animation_g5kcc"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("HUD/InteractContainer:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("HUD/InteractContainer:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_71tnq"]
_data = {
&"RESET": SubResource("Animation_g5kcc"),
@ -176,12 +177,13 @@ modulate = Color(1, 1, 1, 0)
custom_minimum_size = Vector2(512, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 8
size_flags_vertical = 4
mouse_filter = 2
[node name="InteractLabel" type="Label" parent="HUD/InteractContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 8
text = "Open [E]"
label_settings = SubResource("LabelSettings_g5kcc")
horizontal_alignment = 1
@ -195,3 +197,6 @@ libraries = {
&"": SubResource("AnimationLibrary_71tnq")
}
autoplay = "RESET"
[node name="LootContainer" parent="." instance=ExtResource("9_g5kcc")]
layout_mode = 1

View File

@ -1,6 +1,13 @@
class_name Enemy extends CharacterBody3D
const RUN_VELOCITY_THRESHOLD: float = 2.0
enum State {
IDLE,
PURSUE
}
var player: Player
var current_state = State.IDLE
@export var max_health: float = 20.0
@export var xp_value: int = 30
@ -12,11 +19,13 @@ const RUN_VELOCITY_THRESHOLD: float = 2.0
@onready var rig: Node3D = $Rig
@onready var health_component: HealthComponent = $HealthComponent
@onready var collision_shape: CollisionShape3D = $CollisionShape3D
@onready var player_detector: ShapeCast3D = $Rig/PlayerDetector
@onready var player_detector_pursue: ShapeCast3D = $Rig/PlayerDetectorPursue
@onready var player_detector_attack: ShapeCast3D = $Rig/PlayerDetectorAttack
@onready var timer: Timer = $Timer
@onready var area_attack: ShapeCast3D = $Rig/AreaAttack
@onready var player: Player = get_tree().get_first_node_in_group("Player")
@onready var navigation_agent: NavigationAgent3D = $NavigationAgent3D
func _ready() -> void:
var mesh = rig.villager_meshes.pick_random()
rig.set_active_mesh(mesh)
@ -24,8 +33,18 @@ func _ready() -> void:
health_component.update_max_health(max_health)
func _physics_process(delta: float) -> void:
match current_state:
State.IDLE:
if check_for_player():
current_state = State.PURSUE
State.PURSUE:
if !check_for_player():
current_state = State.IDLE
var velocity_target: Vector3 = Vector3.ZERO
navigation_agent.target_position = player.global_position
if player:
navigation_agent.target_position = player.global_position
if rig.is_idle():
check_for_attacks()
@ -38,9 +57,19 @@ func _physics_process(delta: float) -> void:
navigation_agent.velocity = velocity_target
func check_for_player() -> bool:
for collision_id in player_detector_pursue.get_collision_count():
var collider = player_detector_pursue.get_collider(collision_id)
if collider is Player:
timer.start(5)
player = collider
return true
player = null
return false
func check_for_attacks() -> void:
for collision_id in player_detector.get_collision_count():
var collider = player_detector.get_collider(collision_id)
for collision_id in player_detector_attack.get_collision_count():
var collider = player_detector_attack.get_collider(collision_id)
if collider is Player:
rig.playback.travel("Overhead")
navigation_agent.avoidance_mask = 0

View File

@ -9,3 +9,4 @@ func check_interactions() -> void:
ui.update_interact_text("Open [E]")
if Input.is_action_just_pressed("interact"):
print(collider.get_items())
ui.loot_container.toggle_open()

View File

@ -16,6 +16,7 @@ var _attack_direction: Vector3 = Vector3.ZERO
@export_category("RPG Stats")
@export var stats: CharacterStats
@onready var camera: Camera3D = $Boom/Camera
@onready var horizontal_pivot: Node3D = $HorizontalPivot
@onready var vertical_pivot: Node3D = $HorizontalPivot/VerticalPivot
@onready var rig_pivot: Node3D = $RigPivot
@ -27,7 +28,12 @@ var _attack_direction: Vector3 = Vector3.ZERO
@onready var ui: Control = $UserInterface
@onready var interaction_cast: ShapeCast3D = $RigPivot/InteractionCast
func _enter_tree() -> void:
set_multiplayer_authority(name.to_int())
func _ready() -> void:
camera.current = is_multiplayer_authority()
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
health_component.update_max_health(stats.get_max_hp())
stats.level_up_notification.connect(
@ -37,6 +43,9 @@ func _ready() -> void:
ui.update_stats_display()
func _physics_process(delta: float) -> void:
if not is_multiplayer_authority():
return
frame_camera_rotation()
var direction := get_movement_direction()
rig.update_animation_tree(direction)
@ -56,6 +65,9 @@ func _physics_process(delta: float) -> void:
move_and_slide()
func _unhandled_input(event: InputEvent) -> void:
if not is_multiplayer_authority():
return
if event.is_action_pressed("ui_cancel"):
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE

View File

@ -0,0 +1,34 @@
extends Node3D
func _ready() -> void:
if not multiplayer.is_server():
return
multiplayer.peer_connected.connect(add_player)
multiplayer.peer_disconnected.connect(del_player)
# Spawn already connected players.
for id in multiplayer.get_peers():
add_player(id)
# Spawn the local player unless this is a dedicated server export.
if not OS.has_feature("dedicated_server"):
add_player(1)
func _exit_tree():
if not multiplayer.is_server():
return
multiplayer.peer_connected.disconnect(add_player)
multiplayer.peer_disconnected.disconnect(del_player)
func add_player(id: int):
var character = preload("res://src/scenes/characters/player.tscn").instantiate()
character.name = str(id)
$Players.add_child(character, true)
func del_player(id: int):
if not $Players.has_node(str(id)):
return
$Players.get_node(str(id)).queue_free()

View File

@ -0,0 +1 @@
uid://dj5vsww5nehm7

View File

@ -0,0 +1,110 @@
extends Node
# Autoload named Lobby
# These signals can be connected to by a UI lobby scene or the game scene.
signal player_connected(peer_id, player_info)
signal player_disconnected(peer_id)
signal server_disconnected
const PORT = 7000
const DEFAULT_SERVER_IP = "127.0.0.1" # IPv4 localhost
const MAX_CONNECTIONS = 20
# This will contain player info for every player,
# with the keys being each player's unique IDs.
var players = {}
# This is the local player info. This should be modified locally
# before the connection is made. It will be passed to every other peer.
# For example, the value of "name" can be set to something the player
# entered in a UI scene.
var player_info = {"name": "Name"}
var players_loaded = 0
func _ready():
multiplayer.peer_connected.connect(_on_player_connected)
multiplayer.peer_disconnected.connect(_on_player_disconnected)
multiplayer.connected_to_server.connect(_on_connected_ok)
multiplayer.connection_failed.connect(_on_connected_fail)
multiplayer.server_disconnected.connect(_on_server_disconnected)
func join_game(address = ""):
if address.is_empty():
address = DEFAULT_SERVER_IP
var peer = ENetMultiplayerPeer.new()
var error = peer.create_client(address, PORT)
if error:
return error
multiplayer.multiplayer_peer = peer
func create_game():
var peer = ENetMultiplayerPeer.new()
var error = peer.create_server(PORT, MAX_CONNECTIONS)
if error:
return error
multiplayer.multiplayer_peer = peer
players[1] = player_info
player_connected.emit(1, player_info)
func remove_multiplayer_peer():
multiplayer.multiplayer_peer = null
players.clear()
# When the server decides to start the game from a UI scene,
# do Lobby.load_game.rpc(filepath)
@rpc("call_local", "reliable")
func load_game(game_scene_path):
get_tree().change_scene_to_file(game_scene_path)
# Every peer will call this when they have loaded the game scene.
@rpc("any_peer", "call_local", "reliable")
func player_loaded():
if multiplayer.is_server():
players_loaded += 1
if players_loaded == players.size():
$/root/Game.start_game()
players_loaded = 0
# When a peer connects, send them my player info.
# This allows transfer of all desired data for each player, not only the unique ID.
func _on_player_connected(id):
_register_player.rpc_id(id, player_info)
@rpc("any_peer", "reliable")
func _register_player(new_player_info):
var new_player_id = multiplayer.get_remote_sender_id()
players[new_player_id] = new_player_info
player_connected.emit(new_player_id, new_player_info)
func _on_player_disconnected(id):
players.erase(id)
player_disconnected.emit(id)
func _on_connected_ok():
var peer_id = multiplayer.get_unique_id()
players[peer_id] = player_info
player_connected.emit(peer_id, player_info)
func _on_connected_fail():
multiplayer.multiplayer_peer = null
func _on_server_disconnected():
multiplayer.multiplayer_peer = null
players.clear()
server_disconnected.emit()

View File

@ -0,0 +1 @@
uid://dasxx01bb21uk

View File

@ -0,0 +1,32 @@
extends Node
func _on_host_pressed() -> void:
var peer = ENetMultiplayerPeer.new()
var error = peer.create_server(1027)
if error:
print(error)
multiplayer.multiplayer_peer = peer
start_game()
func _on_join_pressed() -> void:
var peer = ENetMultiplayerPeer.new()
var error = peer.create_client("127.0.0.1", 1027)
if error:
print(error)
multiplayer.multiplayer_peer = peer
start_game()
func start_game() -> void:
$UI.hide()
get_tree().paused = false
if multiplayer.is_server():
change_level.call_deferred(load("res://src/scenes/levels/level.tscn"))
func change_level(scene: PackedScene) -> void:
var level = $Level
for c in level.get_children():
level.remove_child(c)
c.queue_free()
level.add_child(scene.instantiate())

View File

@ -0,0 +1 @@
uid://b2ec1cajpfusg

View File

@ -0,0 +1,11 @@
extends CenterContainer
func _ready() -> void:
visible = false
func toggle_open() -> void:
visible = !visible
if visible:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
else:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED

View File

@ -0,0 +1 @@
uid://depcr1bjlbfo4

View File

@ -7,6 +7,7 @@ extends Control
@onready var inventory: Control = $Inventory
@onready var animation_player: AnimationPlayer = $AnimationPlayer
@onready var interact_label: Label = %InteractLabel
@onready var loot_container: CenterContainer = $LootContainer
@export var player: Player