diff --git a/project.godot b/project.godot index 440e8b0..1bec242 100644 --- a/project.godot +++ b/project.godot @@ -42,3 +42,25 @@ move_jump={ "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":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) ] } +click={ +"deadzone": 0.2, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(130, 14),"global_position":Vector2(139, 62),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) +] +} +right_click={ +"deadzone": 0.2, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(159, 19),"global_position":Vector2(168, 67),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null) +] +} +dash={ +"deadzone": 0.2, +"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":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} + +[layer_names] + +3d_physics/layer_1="World" +3d_physics/layer_2="Interaction" +3d_physics/layer_3="Player" +3d_physics/layer_4="Enemy" diff --git a/src/scenes/characters/area_attack.tscn b/src/scenes/characters/area_attack.tscn new file mode 100644 index 0000000..443a42b --- /dev/null +++ b/src/scenes/characters/area_attack.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=3 format=3 uid="uid://bo62qyfwylypa"] + +[ext_resource type="Script" uid="uid://nekr2inm6vnq" path="res://src/scripts/characters/area_attack.gd" id="1_7eso7"] + +[sub_resource type="CylinderShape3D" id="CylinderShape3D_kkooa"] +radius = 1.0 + +[node name="AreaAttack" type="ShapeCast3D"] +shape = SubResource("CylinderShape3D_kkooa") +target_position = Vector3(0, 0, 0) +script = ExtResource("1_7eso7") diff --git a/src/scenes/characters/dash.tscn b/src/scenes/characters/dash.tscn new file mode 100644 index 0000000..7c35f2c --- /dev/null +++ b/src/scenes/characters/dash.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=2 format=3 uid="uid://cwdsfw1g1607y"] + +[ext_resource type="Script" uid="uid://ekvwb7r88vda" path="res://src/scripts/characters/dash.gd" id="1_bwbfr"] + +[node name="Dash" type="Node3D"] +script = ExtResource("1_bwbfr") + +[node name="Timer" type="Timer" parent="."] +one_shot = true + +[node name="GPUParticles3D" type="GPUParticles3D" parent="."] diff --git a/src/scenes/player/rig.tscn b/src/scenes/characters/enemy.tscn similarity index 53% rename from src/scenes/player/rig.tscn rename to src/scenes/characters/enemy.tscn index 64e215f..9fd5a77 100644 --- a/src/scenes/player/rig.tscn +++ b/src/scenes/characters/enemy.tscn @@ -1,94 +1,72 @@ -[gd_scene load_steps=11 format=3 uid="uid://ckwydalda0teo"] +[gd_scene load_steps=7 format=3 uid="uid://cwvrti8hmxj0k"] -[ext_resource type="Script" uid="uid://ckjbqjere1jpf" path="res://src/scripts/player/rig.gd" id="1_1br2m"] -[ext_resource type="PackedScene" uid="uid://xivf38sp0l78" path="res://assets/models/character/character_rig.glb" id="1_icnkf"] +[ext_resource type="Script" uid="uid://p38hhb8jwgor" path="res://src/scripts/characters/enemy.gd" id="1_jr6vw"] +[ext_resource type="PackedScene" uid="uid://ckwydalda0teo" path="res://src/scenes/characters/rig.tscn" id="2_saeby"] +[ext_resource type="PackedScene" uid="uid://bo62qyfwylypa" path="res://src/scenes/characters/area_attack.tscn" id="3_ljmr7"] +[ext_resource type="PackedScene" uid="uid://dw8f5oy13cdtx" path="res://src/scenes/characters/health_component.tscn" id="3_r8u7w"] -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_eek7r"] -animation = &"Run" +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_r8u7w"] -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_gxy77"] -animation = &"Idle" +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_ljmr7"] -[sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_djdpq"] -blend_point_0/node = SubResource("AnimationNodeAnimation_eek7r") -blend_point_0/pos = 1.0 -blend_point_1/node = SubResource("AnimationNodeAnimation_gxy77") -blend_point_1/pos = -1.0 +[node name="Enemy" type="CharacterBody3D"] +collision_layer = 9 +script = ExtResource("1_jr6vw") -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_1br2m"] -animation = &"Slash" +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("CapsuleShape3D_r8u7w") -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_gkl4x"] -advance_mode = 2 +[node name="Rig" parent="." instance=ExtResource("2_saeby")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0) -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_eek7r"] - -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_gxy77"] -switch_mode = 2 -advance_mode = 2 - -[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_mq48a"] -states/MoveSpace/node = SubResource("AnimationNodeBlendSpace1D_djdpq") -states/MoveSpace/position = Vector2(434, 28) -states/Slash/node = SubResource("AnimationNodeAnimation_1br2m") -states/Slash/position = Vector2(434, 135) -states/Start/position = Vector2(239, 28) -transitions = ["Start", "MoveSpace", SubResource("AnimationNodeStateMachineTransition_gkl4x"), "MoveSpace", "Slash", SubResource("AnimationNodeStateMachineTransition_eek7r"), "Slash", "MoveSpace", SubResource("AnimationNodeStateMachineTransition_gxy77")] -graph_offset = Vector2(-357, -91) - -[node name="Rig" type="Node3D"] -script = ExtResource("1_1br2m") - -[node name="CharacterRig" parent="." instance=ExtResource("1_icnkf")] - -[node name="Skeleton3D" parent="CharacterRig/GameRig" index="0"] -bones/0/position = Vector3(3.37508e-15, 0.891988, -0.0481736) +[node name="Skeleton3D" parent="Rig/CharacterRig/GameRig" index="0"] +bones/0/position = Vector3(2.90402e-15, 0.896258, -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.00441575, -0.000457798, 0.00321564, 0.999985) +bones/2/rotation = Quaternion(-0.00237686, -0.000424754, 0.00321495, 0.999992) bones/3/position = Vector3(-2.01263e-09, 0.202058, -2.51457e-08) -bones/3/rotation = Quaternion(-0.0994171, -0.000418098, 0.00851803, 0.995009) +bones/3/rotation = Quaternion(-0.0969743, -0.000386353, 0.00851974, 0.99525) bones/4/position = Vector3(3.02934e-10, 0.0925562, 3.91155e-08) -bones/4/rotation = Quaternion(0.278845, 1.4315e-08, 9.57075e-08, 0.960336) +bones/4/rotation = Quaternion(0.277539, 1.51857e-08, 9.21549e-08, 0.960715) bones/5/rotation = Quaternion(-0.0948564, -2.80691e-14, -2.26155e-08, 0.995491) -bones/6/rotation = Quaternion(-0.153723, -1.17812e-07, -1.81868e-08, 0.988114) -bones/7/position = Vector3(-3.15335e-08, 0.891988, -0.0481735) +bones/6/rotation = Quaternion(-0.155564, -1.17871e-07, -1.78202e-08, 0.987826) +bones/7/position = Vector3(-2.19489e-08, 0.896258, -0.0481735) bones/7/rotation = Quaternion(-0.0863677, -0.751104, -0.383052, 0.530711) -bones/8/position = Vector3(-5.01311e-08, 0.891988, -0.0481735) +bones/8/position = Vector3(-3.46394e-08, 0.896258, -0.0481735) bones/8/rotation = Quaternion(-0.0863677, 0.751104, 0.383052, 0.530711) -bones/9/position = Vector3(0.131144, 0.958192, -0.0351291) -bones/9/rotation = Quaternion(0.992486, 0.0211361, -0.030826, 0.116508) +bones/9/position = Vector3(0.131144, 0.962462, -0.0351291) +bones/9/rotation = Quaternion(0.9929, 0.0209334, -0.0309203, 0.112942) 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.431573, -0.000700556, 0.000335292, 0.902078) +bones/11/rotation = Quaternion(0.423309, -0.000700623, 0.000327516, 0.905985) 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.756674, 0.0119043, 0.0244321, 0.653227) +bones/13/rotation = Quaternion(-0.752924, 0.0118904, 0.0244113, 0.657548) 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.958192, -0.0351291) -bones/15/rotation = Quaternion(0.972155, -0.00597653, 0.0271868, 0.232681) +bones/15/position = Vector3(-0.131144, 0.962462, -0.0351291) +bones/15/rotation = Quaternion(0.972885, -0.00584074, 0.0272814, 0.2296) 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.454904, 0.00335452, -0.00171366, 0.890532) +bones/17/rotation = Quaternion(0.447168, 0.00330884, -0.00165434, 0.894442) 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.692097, -0.0282132, -0.000453438, 0.721253) +bones/19/rotation = Quaternion(-0.689461, -0.0281994, -0.000643605, 0.723773) 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.42323, 0.0409021) -bones/21/rotation = Quaternion(-0.50156, -0.254509, -0.394033, 0.726912) -bones/22/position = Vector3(0.187432, 1.45872, -0.0285825) -bones/22/rotation = Quaternion(0.06045, -0.158053, 0.973842, -0.151647) +bones/21/position = Vector3(0.0251286, 1.4265, 0.0421425) +bones/21/rotation = Quaternion(-0.49414, -0.257647, -0.39943, 0.727942) +bones/22/position = Vector3(0.188376, 1.46325, -0.0244898) +bones/22/rotation = Quaternion(0.0511605, -0.159492, 0.974374, -0.150133) bones/23/position = Vector3(-5.41331e-09, 0.143946, -2.98023e-08) -bones/23/rotation = Quaternion(7.73339e-08, -0.0080107, -1.99305e-08, 0.999968) +bones/23/rotation = Quaternion(5.35386e-08, -0.0148926, 5.04572e-08, 0.999889) 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.296573, -0.0148933, -0.0181015, 0.954722) 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) @@ -113,14 +91,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.42323, 0.0409021) -bones/46/rotation = Quaternion(-0.527917, 0.201754, 0.357521, 0.743491) -bones/47/position = Vector3(-0.162072, 1.45806, -0.0513614) -bones/47/rotation = Quaternion(-0.101804, -0.132181, 0.97079, 0.172428) +bones/46/position = Vector3(-0.0113635, 1.4265, 0.0421424) +bones/46/rotation = Quaternion(-0.513706, 0.217774, 0.372161, 0.741739) +bones/47/position = Vector3(-0.166452, 1.46367, -0.0415526) +bones/47/rotation = Quaternion(-0.0791267, -0.136168, 0.972901, 0.169297) bones/48/position = Vector3(1.88476e-07, 0.143946, 1.02445e-08) -bones/48/rotation = Quaternion(-3.76897e-08, -0.00451446, -5.02688e-08, 0.99999) +bones/48/rotation = Quaternion(-4.99971e-09, 0.0109135, -2.38681e-08, 0.99994) bones/49/position = Vector3(6.5191e-09, 0.143946, -1.95094e-08) -bones/49/rotation = Quaternion(0.307483, -0.00462726, 0.0284921, 0.951116) +bones/49/rotation = Quaternion(0.329063, 0.0109141, 0.028922, 0.943802) 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) @@ -146,24 +124,40 @@ 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.34028, -0.0269978) -bones/71/rotation = Quaternion(1.89247e-08, 0.618632, 0.785681, -4.66233e-08) -bones/72/position = Vector3(-0.113426, 1.34028, -0.0269979) -bones/72/rotation = Quaternion(1.89247e-08, 0.618632, 0.785681, -4.66232e-08) +bones/71/position = Vector3(0.127191, 1.34482, -0.0264471) +bones/71/rotation = Quaternion(1.92656e-08, 0.613671, 0.789562, -4.64417e-08) +bones/72/position = Vector3(-0.113426, 1.34482, -0.0264471) +bones/72/rotation = Quaternion(1.92657e-08, 0.613671, 0.789562, -4.64417e-08) -[node name="Knight_01" parent="CharacterRig/GameRig/Skeleton3D" index="0"] +[node name="Knight_02" parent="Rig/CharacterRig/GameRig/Skeleton3D" index="1"] visible = false -[node name="Villager_01" parent="CharacterRig/GameRig/Skeleton3D" index="2"] +[node name="Villager_01" parent="Rig/CharacterRig/GameRig/Skeleton3D" index="2"] +visible = true + +[node name="RightHandBone" parent="Rig" index="2"] +transform = Transform3D(-0.962343, -0.270803, -0.0237135, 0.241713, -0.892346, 0.381174, -0.124384, 0.361088, 0.924199, -0.340269, 0.981412, -0.0317979) + +[node name="LeftHandBone" parent="Rig" index="3"] +transform = Transform3D(-0.970513, 0.239108, 0.0305212, -0.22202, -0.936013, 0.273107, 0.0938704, 0.258277, 0.961499, 0.345187, 0.969535, -0.0501543) + +[node name="tall_shield" parent="Rig/LeftHandBone/OffHandSlot" index="0"] visible = false -[node name="Villager_02" parent="CharacterRig/GameRig/Skeleton3D" index="3"] -visible = false +[node name="PlayerDetector" 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="AnimationTree" type="AnimationTree" parent="."] -root_node = NodePath("../CharacterRig") -tree_root = SubResource("AnimationNodeStateMachine_mq48a") -anim_player = NodePath("../CharacterRig/AnimationPlayer") -parameters/MoveSpace/blend_position = -5.743 +[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 -[editable path="CharacterRig"] +[node name="HealthComponent" parent="." instance=ExtResource("3_r8u7w")] + +[connection signal="heavy_attack" from="Rig" to="." method="_on_rig_heavy_attack"] +[connection signal="defeat" from="HealthComponent" to="." method="_on_health_component_defeat"] + +[editable path="Rig"] +[editable path="Rig/CharacterRig"] diff --git a/src/scenes/characters/health_component.tscn b/src/scenes/characters/health_component.tscn new file mode 100644 index 0000000..a416101 --- /dev/null +++ b/src/scenes/characters/health_component.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://dw8f5oy13cdtx"] + +[ext_resource type="Script" uid="uid://b80knj2xg2m76" path="res://src/scripts/characters/health_component.gd" id="1_kfys7"] + +[node name="HealthComponent" type="Node"] +script = ExtResource("1_kfys7") diff --git a/src/scenes/characters/player.tscn b/src/scenes/characters/player.tscn new file mode 100644 index 0000000..bd1b58d --- /dev/null +++ b/src/scenes/characters/player.tscn @@ -0,0 +1,183 @@ +[gd_scene load_steps=10 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"] +[ext_resource type="Script" uid="uid://cxnvqh8ijf0ox" path="res://src/scripts/characters/boom.gd" id="2_qopur"] +[ext_resource type="PackedScene" uid="uid://ckwydalda0teo" path="res://src/scenes/characters/rig.tscn" id="3_n52bt"] +[ext_resource type="Script" uid="uid://blbnvx6pe37mc" path="res://src/scripts/characters/attack_cast.gd" id="4_cx3ie"] +[ext_resource type="PackedScene" uid="uid://bo62qyfwylypa" path="res://src/scenes/characters/area_attack.tscn" id="6_wmokw"] +[ext_resource type="PackedScene" uid="uid://cwdsfw1g1607y" path="res://src/scenes/characters/dash.tscn" id="7_yvk1n"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_yx56f"] + +[sub_resource type="SeparationRayShape3D" id="SeparationRayShape3D_swhsd"] + +[node name="Player" type="CharacterBody3D"] +collision_layer = 5 +script = ExtResource("1_swhsd") + +[node name="HealthComponent" parent="." instance=ExtResource("2_0xash")] + +[node name="Dash" parent="." node_paths=PackedStringArray("player") instance=ExtResource("7_yvk1n")] +player = NodePath("..") + +[node name="CollisionShape" type="CollisionShape3D" parent="."] +shape = SubResource("CapsuleShape3D_yx56f") + +[node name="Boom" type="SpringArm3D" parent="." node_paths=PackedStringArray("target")] +transform = Transform3D(1, 0, 0, 0, 0.866025, 0.5, 0, -0.5, 0.866025, 0, 1, 0) +shape = SubResource("SeparationRayShape3D_swhsd") +spring_length = 4.0 +script = ExtResource("2_qopur") +target = NodePath("../HorizontalPivot/VerticalPivot") + +[node name="Camera" type="Camera3D" parent="Boom"] + +[node name="HorizontalPivot" type="Node3D" parent="."] + +[node name="VerticalPivot" type="Node3D" parent="HorizontalPivot"] + +[node name="RigPivot" type="Node3D" parent="."] +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.892598, -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.00474949, -0.000463206, 0.00321576, 0.999983) +bones/3/position = Vector3(-2.01263e-09, 0.202058, -2.51457e-08) +bones/3/rotation = Quaternion(-0.0990345, -0.000413126, 0.00851833, 0.995047) +bones/4/position = Vector3(3.02934e-10, 0.0925562, 3.91155e-08) +bones/4/rotation = Quaternion(0.279353, 1.411e-08, 9.66205e-08, 0.960189) +bones/5/rotation = Quaternion(-0.0948564, -2.80691e-14, -2.26155e-08, 0.995491) +bones/6/rotation = Quaternion(-0.153287, -1.18211e-07, -1.56253e-08, 0.988182) +bones/7/position = Vector3(-4.01473e-08, 0.892598, -0.0481735) +bones/7/rotation = Quaternion(-0.0863677, -0.751104, -0.383052, 0.530711) +bones/8/position = Vector3(-6.21924e-08, 0.892598, -0.0481735) +bones/8/rotation = Quaternion(-0.0863677, 0.751104, 0.383052, 0.530711) +bones/9/position = Vector3(0.131144, 0.958802, -0.0351291) +bones/9/rotation = Quaternion(0.992545, 0.0211075, -0.0308392, 0.116007) +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.430313, -0.00070061, 0.000334144, 0.902679) +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.755929, 0.0119014, 0.0244278, 0.65409) +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.958802, -0.0351291) +bones/15/rotation = Quaternion(0.972099, -0.00598688, 0.0271796, 0.232916) +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.453725, 0.00334755, -0.00170452, 0.891134) +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.692303, -0.0282143, -0.000438585, 0.721055) +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.42297, 0.0408048) +bones/21/rotation = Quaternion(-0.50042, -0.254995, -0.394861, 0.727078) +bones/22/position = Vector3(0.187502, 1.45905, -0.0282855) +bones/22/rotation = Quaternion(0.059026, -0.158275, 0.973929, -0.151416) +bones/23/position = Vector3(-5.41331e-09, 0.143946, -2.98023e-08) +bones/23/rotation = Quaternion(4.21752e-08, -0.00851079, -1.92762e-08, 0.999964) +bones/24/position = Vector3(-6.33301e-08, 0.143946, 4.3873e-08) +bones/24/rotation = Quaternion(0.281763, -0.00845362, -0.01693, 0.959297) +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.42297, 0.0408048) +bones/46/rotation = Quaternion(-0.524954, 0.205117, 0.360587, 0.743187) +bones/47/position = Vector3(-0.162992, 1.45922, -0.0493854) +bones/47/rotation = Quaternion(-0.0970743, -0.133019, 0.971274, 0.171782) +bones/48/position = Vector3(1.88476e-07, 0.143946, 1.02445e-08) +bones/48/rotation = Quaternion(8.70013e-08, -0.00137778, 7.62615e-08, 0.999999) +bones/49/position = Vector3(6.5191e-09, 0.143946, -1.95094e-08) +bones/49/rotation = Quaternion(0.312005, -0.00137739, 0.0286124, 0.949649) +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.34061, -0.026958) +bones/71/rotation = Quaternion(1.89928e-08, 0.617641, 0.78646, -4.65874e-08) +bones/72/position = Vector3(-0.113426, 1.34061, -0.0269581) +bones/72/rotation = Quaternion(1.89929e-08, 0.617641, 0.78646, -4.65873e-08) + +[node name="RightHandBone" parent="RigPivot/Rig" index="2"] +transform = Transform3D(-0.962343, -0.2708, -0.0237162, 0.246289, -0.9055, 0.34556, -0.115053, 0.326706, 0.938097, -0.336809, 0.973542, -0.0481699) + +[node name="LeftHandBone" parent="RigPivot/Rig" index="3"] +transform = Transform3D(-0.970496, 0.239167, 0.0306141, -0.224995, -0.943919, 0.241652, 0.0866923, 0.227634, 0.96988, 0.344327, 0.96324, -0.0615967) + +[node name="RayAttachment" type="BoneAttachment3D" parent="RigPivot/Rig"] +transform = Transform3D(-0.962343, -0.2708, -0.0237162, 0.246289, -0.9055, 0.34556, -0.115053, 0.326706, 0.938097, -0.336809, 0.973542, -0.0481699) +bone_name = "DEF-hand.R" +bone_idx = 51 +use_external_skeleton = true +external_skeleton = NodePath("../CharacterRig/GameRig/Skeleton3D") + +[node name="AttackCast" type="RayCast3D" parent="RigPivot/Rig/RayAttachment"] +unique_name_in_owner = true +transform = Transform3D(0.16656, 0.0770401, -0.983017, -0.982939, 0.0918653, -0.159347, 0.078029, 0.992787, 0.0910268, -0.0211409, 0.0798348, 0.00721136) +target_position = Vector3(0, 1, 0) +collision_mask = 8 +script = ExtResource("4_cx3ie") + +[node name="AreaAttack" parent="RigPivot" instance=ExtResource("6_wmokw")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1) +collision_mask = 8 + +[connection signal="defeat" from="HealthComponent" to="." method="_on_health_component_defeat"] +[connection signal="heavy_attack" from="RigPivot/Rig" to="." method="_on_rig_heavy_attack"] + +[editable path="RigPivot/Rig"] +[editable path="RigPivot/Rig/CharacterRig"] diff --git a/src/scenes/characters/rig.tscn b/src/scenes/characters/rig.tscn new file mode 100644 index 0000000..722df8b --- /dev/null +++ b/src/scenes/characters/rig.tscn @@ -0,0 +1,224 @@ +[gd_scene load_steps=19 format=3 uid="uid://ckwydalda0teo"] + +[ext_resource type="Script" uid="uid://ckjbqjere1jpf" path="res://src/scripts/characters/rig.gd" id="1_n80wy"] +[ext_resource type="PackedScene" uid="uid://xivf38sp0l78" path="res://assets/models/character/character_rig.glb" id="2_ow4sk"] +[ext_resource type="PackedScene" uid="uid://bnkhiay2id2kl" path="res://assets/models/character/gear/longsword.glb" id="3_dka8l"] +[ext_resource type="PackedScene" uid="uid://c7ahf78h5s3kx" path="res://assets/models/character/gear/tall_shield.glb" id="4_i4vhj"] + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_6b80y"] +animation = &"Defeat" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_eek7r"] +animation = &"Run" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_gxy77"] +animation = &"Idle" + +[sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_djdpq"] +blend_point_0/node = SubResource("AnimationNodeAnimation_eek7r") +blend_point_0/pos = 1.0 +blend_point_1/node = SubResource("AnimationNodeAnimation_gxy77") +blend_point_1/pos = -1.0 + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_q073i"] +animation = &"Overhead" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_bd73k"] +animation = &"OverheadRecover" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_1br2m"] +animation = &"Slash" + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_gkl4x"] +advance_mode = 2 + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_eek7r"] + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_gxy77"] +xfade_time = 0.1 +switch_mode = 2 +advance_mode = 2 + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_isuva"] + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_8x2vi"] +switch_mode = 2 +advance_mode = 2 + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_eqygr"] +xfade_time = 0.1 +switch_mode = 2 +advance_mode = 2 + +[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_mq48a"] +states/Defeat/node = SubResource("AnimationNodeAnimation_6b80y") +states/Defeat/position = Vector2(584, -69) +states/MoveSpace/node = SubResource("AnimationNodeBlendSpace1D_djdpq") +states/MoveSpace/position = Vector2(434, 28) +states/Overhead/node = SubResource("AnimationNodeAnimation_q073i") +states/Overhead/position = Vector2(652, 28) +states/OverheadRecover/node = SubResource("AnimationNodeAnimation_bd73k") +states/OverheadRecover/position = Vector2(652, 123) +states/Slash/node = SubResource("AnimationNodeAnimation_1br2m") +states/Slash/position = Vector2(434, 243) +states/Start/position = Vector2(239, 28) +transitions = ["Start", "MoveSpace", SubResource("AnimationNodeStateMachineTransition_gkl4x"), "MoveSpace", "Slash", SubResource("AnimationNodeStateMachineTransition_eek7r"), "Slash", "MoveSpace", SubResource("AnimationNodeStateMachineTransition_gxy77"), "MoveSpace", "Overhead", SubResource("AnimationNodeStateMachineTransition_isuva"), "Overhead", "OverheadRecover", SubResource("AnimationNodeStateMachineTransition_8x2vi"), "OverheadRecover", "MoveSpace", SubResource("AnimationNodeStateMachineTransition_eqygr")] +graph_offset = Vector2(-50, -104) + +[node name="Rig" type="Node3D"] +script = ExtResource("1_n80wy") + +[node name="CharacterRig" parent="." instance=ExtResource("2_ow4sk")] + +[node name="Skeleton3D" parent="CharacterRig/GameRig" index="0"] +bones/0/position = Vector3(0.0276682, 0.903179, 0.0086448) +bones/0/rotation = Quaternion(0.155586, 1.17758e-07, 1.85474e-08, 0.987822) +bones/1/rotation = Quaternion(-0.0497934, 0.00362305, 0.058142, 0.997059) +bones/2/position = Vector3(6.23959e-10, 0.140892, 3.06754e-08) +bones/2/rotation = Quaternion(0.00933042, 0.000201999, -0.0491224, 0.998749) +bones/3/position = Vector3(2.32707e-09, 0.175705, -2.21538e-07) +bones/3/rotation = Quaternion(-0.265407, 0.0310372, -0.0790426, 0.96039) +bones/4/position = Vector3(-7.45063e-09, 0.0827501, -4.22106e-08) +bones/4/rotation = Quaternion(0.430518, 0.0184732, 0.225987, 0.873638) +bones/5/rotation = Quaternion(-0.0948568, -5.65495e-09, -1.01598e-07, 0.995491) +bones/6/rotation = Quaternion(-0.180423, -0.04801, -0.149312, 0.971004) +bones/7/position = Vector3(0.0276682, 0.903179, 0.00864496) +bones/7/rotation = Quaternion(-0.0703741, -0.739249, -0.405459, 0.533068) +bones/8/position = Vector3(0.0276682, 0.903179, 0.00864482) +bones/8/rotation = Quaternion(-0.070374, 0.739249, 0.405459, 0.533068) +bones/9/position = Vector3(0.158812, 0.968479, 0.0256444) +bones/9/rotation = Quaternion(0.986866, -0.0347172, -0.036593, -0.153461) +bones/10/position = Vector3(-1.28047e-08, 0.263565, 5.48525e-08) +bones/10/rotation = Quaternion(-4.57173e-08, -0.0075665, 2.94687e-08, 0.999971) +bones/11/position = Vector3(-7.19732e-09, 0.263565, -7.01984e-08) +bones/11/rotation = Quaternion(0.533853, -0.00756582, 0.00477709, 0.84553) +bones/12/position = Vector3(-6.11355e-09, 0.223526, 5.72814e-09) +bones/12/rotation = Quaternion(2.18907e-08, -0.00327906, 7.14397e-08, 0.999995) +bones/13/position = Vector3(-1.06738e-08, 0.223526, 1.43191e-08) +bones/13/rotation = Quaternion(-0.486355, 0.0179254, -0.0581729, 0.871638) +bones/14/position = Vector3(2.45242e-09, 0.139878, -1.43056e-08) +bones/14/rotation = Quaternion(-0.000103867, 0.96745, -0.253064, -0.000381529) +bones/15/position = Vector3(-0.103475, 0.968479, 0.0256444) +bones/15/rotation = Quaternion(0.925588, 1.73114e-05, 0.0210855, 0.377945) +bones/16/position = Vector3(-1.98544e-08, 0.26553, -1.10504e-07) +bones/16/rotation = Quaternion(1.83106e-08, 0.00524275, -7.19832e-08, 0.999986) +bones/17/position = Vector3(1.9963e-08, 0.26553, 2.04309e-08) +bones/17/rotation = Quaternion(0.428998, 0.00524208, -0.00248965, 0.903287) +bones/18/position = Vector3(2.07135e-08, 0.225541, 2.05872e-08) +bones/18/rotation = Quaternion(6.82911e-08, -0.00656821, 1.66762e-09, 0.999978) +bones/19/position = Vector3(6.57201e-09, 0.225541, -9.83437e-09) +bones/19/rotation = Quaternion(-0.676712, -0.0268497, 0.00119576, 0.735757) +bones/20/position = Vector3(1.26393e-08, 0.139878, -1.33116e-08) +bones/20/rotation = Quaternion(-9.94648e-05, 0.967459, -0.253029, -0.00038312) +bones/21/position = Vector3(0.0318322, 1.38876, 0.13565) +bones/21/rotation = Quaternion(-0.498675, -0.214179, -0.455467, 0.705692) +bones/22/position = Vector3(0.198838, 1.40388, 0.0699175) +bones/22/rotation = Quaternion(-0.208708, 0.364962, 0.899386, -0.119786) +bones/23/position = Vector3(-9.60146e-08, 0.140731, 1.69161e-07) +bones/23/rotation = Quaternion(-1.48099e-08, -0.153514, -5.42637e-08, 0.988147) +bones/24/position = Vector3(-5.41769e-08, 0.140731, 9.8138e-08) +bones/24/rotation = Quaternion(0.52553, -0.153514, -0.276021, 0.789977) +bones/25/position = Vector3(1.8073e-08, 0.124275, 4.49017e-08) +bones/25/rotation = Quaternion(-4.36853e-07, 0.0212255, 1.16255e-07, 0.999775) +bones/26/position = Vector3(1.16654e-07, 0.124275, 2.52368e-07) +bones/26/rotation = Quaternion(-0.139349, 0.0209606, -0.253272, 0.957077) +bones/28/rotation = Quaternion(0.702583, -0.000939986, -0.00133528, 0.7116) +bones/29/rotation = Quaternion(0.74112, 0.00218249, 0.00265346, 0.671364) +bones/30/rotation = Quaternion(0.32527, 0.890055, 0.295977, -0.119997) +bones/31/rotation = Quaternion(0.514882, -0.114149, 0.114483, 0.841879) +bones/32/rotation = Quaternion(0.592003, -0.038135, -0.0906995, 0.799907) +bones/34/position = Vector3(-0.00316934, 0.0987206, 0.0147916) +bones/34/rotation = Quaternion(-0.0674701, 0.718446, 0.0663974, 0.689112) +bones/35/rotation = Quaternion(0.580804, -0.000892605, -0.0014976, 0.814042) +bones/36/rotation = Quaternion(0.682777, 0.00174459, 0.00256601, 0.730621) +bones/37/rotation = Quaternion(-0.00426538, 0.736714, 0.0394789, 0.675038) +bones/38/position = Vector3(-0.00622947, 0.0926414, -0.0236346) +bones/38/rotation = Quaternion(-0.109874, 0.743351, 0.0333518, 0.658973) +bones/39/rotation = Quaternion(0.63004, 0.00151927, 0.00238002, 0.776557) +bones/40/rotation = Quaternion(0.652642, -0.00308157, -0.0042118, 0.757649) +bones/41/rotation = Quaternion(-0.0684189, 0.72411, 0.0332352, 0.685477) +bones/42/position = Vector3(-0.00715369, 0.0679858, -0.0481985) +bones/42/rotation = Quaternion(-0.120913, 0.799109, 0.0358923, 0.587807) +bones/43/rotation = Quaternion(0.498693, -0.020271, -0.0256949, 0.866161) +bones/44/rotation = Quaternion(0.715384, 0.0353053, 0.0573144, 0.695481) +bones/45/rotation = Quaternion(-0.129059, 0.728936, -0.0250262, 0.67184) +bones/46/position = Vector3(-0.00423753, 1.39393, 0.137642) +bones/46/rotation = Quaternion(-0.437715, 0.32082, 0.377528, 0.750302) +bones/47/position = Vector3(-0.166419, 1.45619, 0.090094) +bones/47/rotation = Quaternion(-0.165904, -0.456877, 0.803189, 0.344421) +bones/48/position = Vector3(-1.79147e-07, 0.142917, 7.63032e-08) +bones/48/rotation = Quaternion(-2.96833e-08, -0.0422389, 4.1837e-08, 0.999108) +bones/49/position = Vector3(1.0754e-07, 0.142917, 2.90456e-08) +bones/49/rotation = Quaternion(0.316857, -0.0422384, 0.415565, 0.851542) +bones/50/position = Vector3(5.42904e-08, 0.126555, 7.38829e-09) +bones/50/rotation = Quaternion(-1.10793e-07, 0.0256502, 2.23855e-08, 0.999671) +bones/51/position = Vector3(-9.53121e-09, 0.126556, 5.9332e-09) +bones/51/rotation = Quaternion(-0.0783404, 0.0259177, 0.201201, 0.976068) +bones/52/rotation = Quaternion(-0.2563, 0.855859, 0.0299184, -0.448241) +bones/53/rotation = Quaternion(0.694912, 0.107144, -0.103548, 0.703488) +bones/54/rotation = Quaternion(0.741121, -0.00218248, -0.00265434, 0.671363) +bones/55/rotation = Quaternion(-0.32527, 0.890055, 0.295976, 0.119998) +bones/56/rotation = Quaternion(0.514882, 0.11415, -0.114482, 0.841879) +bones/57/rotation = Quaternion(0.592004, 0.038134, 0.0906991, 0.799907) +bones/59/position = Vector3(0.00316948, 0.0987208, 0.0147918) +bones/59/rotation = Quaternion(0.138771, -0.704916, 0.15571, 0.677932) +bones/60/rotation = Quaternion(0.579985, 0.0462612, -0.0308753, 0.812727) +bones/61/rotation = Quaternion(0.682777, -0.00174739, -0.00256467, 0.730621) +bones/62/rotation = Quaternion(-0.0042654, -0.736714, -0.0394787, 0.675038) +bones/63/position = Vector3(0.00622964, 0.0926415, -0.0236343) +bones/63/rotation = Quaternion(0.104096, -0.719607, 0.186262, 0.660785) +bones/64/rotation = Quaternion(0.670693, 0.0163393, -0.0185665, 0.741323) +bones/65/rotation = Quaternion(0.692499, 0.00330374, 0.0040394, 0.7214) +bones/66/rotation = Quaternion(-0.0684177, -0.72411, -0.033234, 0.685477) +bones/67/position = Vector3(0.00715371, 0.0679857, -0.0481984) +bones/67/rotation = Quaternion(0.108364, -0.768224, 0.166291, 0.608635) +bones/68/rotation = Quaternion(0.629954, 0.0295146, 0.0177509, 0.775868) +bones/69/rotation = Quaternion(0.816677, -0.0439534, -0.0509862, 0.573155) +bones/70/rotation = Quaternion(-0.12906, -0.728936, 0.0250259, 0.67184) +bones/71/position = Vector3(0.118584, 1.30715, 0.0484368) +bones/71/rotation = Quaternion(0.0614123, 0.53913, 0.83878, 0.0449082) +bones/72/position = Vector3(-0.119248, 1.34121, 0.0615744) +bones/72/rotation = Quaternion(0.0614123, 0.53913, 0.83878, 0.0449082) + +[node name="Knight_01" parent="CharacterRig/GameRig/Skeleton3D" index="0"] +visible = false + +[node name="Villager_01" parent="CharacterRig/GameRig/Skeleton3D" index="2"] +visible = false + +[node name="Villager_02" parent="CharacterRig/GameRig/Skeleton3D" index="3"] +visible = false + +[node name="AnimationTree" type="AnimationTree" parent="."] +root_node = NodePath("../CharacterRig") +tree_root = SubResource("AnimationNodeStateMachine_mq48a") +anim_player = NodePath("../CharacterRig/AnimationPlayer") +parameters/MoveSpace/blend_position = -5.743 + +[node name="RightHandBone" type="BoneAttachment3D" parent="."] +transform = Transform3D(-0.771571, 0.518161, -0.369035, -0.386879, -0.842715, -0.374375, -0.504978, -0.146085, 0.85068, -0.253479, 1.11055, -0.200387) +bone_name = "DEF-hand.R" +bone_idx = 51 +use_external_skeleton = true +external_skeleton = NodePath("../CharacterRig/GameRig/Skeleton3D") + +[node name="WeaponSlot" type="Node3D" parent="RightHandBone"] +transform = Transform3D(0.16656, 0.0770401, -0.983017, -0.982939, 0.0918653, -0.159347, 0.078029, 0.992787, 0.0910268, -0.0211409, 0.0798348, 0.00721136) + +[node name="longsword" parent="RightHandBone/WeaponSlot" instance=ExtResource("3_dka8l")] + +[node name="LeftHandBone" type="BoneAttachment3D" parent="."] +transform = Transform3D(-0.513018, -0.843256, 0.16041, 0.0314673, 0.168275, 0.985238, -0.857801, 0.510492, -0.0597935, 0.114817, 1.2992, 0.475246) +bone_name = "DEF-hand.L" +bone_idx = 26 +use_external_skeleton = true +external_skeleton = NodePath("../CharacterRig/GameRig/Skeleton3D") + +[node name="OffHandSlot" type="Node3D" parent="LeftHandBone"] +transform = Transform3D(0.10564, 0.417333, -0.902592, -0.99124, 0.116542, -0.0621291, 0.0792616, 0.90125, 0.425989, -0.084208, -0.04557, -0.025934) + +[node name="tall_shield" parent="LeftHandBone/OffHandSlot" instance=ExtResource("4_i4vhj")] + +[connection signal="animation_finished" from="AnimationTree" to="." method="_on_animation_tree_animation_finished"] + +[editable path="CharacterRig"] diff --git a/src/scenes/levels/level.tscn b/src/scenes/levels/level.tscn index d07eb16..2ce2abf 100644 --- a/src/scenes/levels/level.tscn +++ b/src/scenes/levels/level.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=10 format=3 uid="uid://dw0lbkh31rofd"] +[gd_scene load_steps=11 format=3 uid="uid://dw0lbkh31rofd"] -[ext_resource type="PackedScene" uid="uid://nsv4lbw7j8mi" path="res://src/scenes/player/player.tscn" id="1_crbv0"] +[ext_resource type="PackedScene" uid="uid://nsv4lbw7j8mi" path="res://src/scenes/characters/player.tscn" id="1_crbv0"] [ext_resource type="PackedScene" uid="uid://b1fe4n68iivfm" path="res://assets/models/environment/rock_cliff_env_03.glb" id="2_d2tjv"] [ext_resource type="PackedScene" uid="uid://duotcsmd2fwkk" path="res://assets/models/environment/bush_vege_2.glb" id="3_fqsoq"] [ext_resource type="PackedScene" uid="uid://bdg8366pt8iu7" path="res://assets/models/environment/topiary_tree_vege_01.glb" id="4_uvsco"] [ext_resource type="PackedScene" uid="uid://ddh3p0sg6i080" path="res://assets/models/environment/tree_group_vege.glb" id="5_eyekk"] +[ext_resource type="PackedScene" uid="uid://cwvrti8hmxj0k" path="res://src/scenes/characters/enemy.tscn" id="6_uvsco"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_amufq"] sky_horizon_color = Color(0.662243, 0.671743, 0.686743, 1) @@ -94,3 +95,17 @@ transform = Transform3D(0.910214, 0, 0.414137, 0, 1, 0, -0.414137, 0, 0.910214, [node name="tree_group_vege" parent="Vegetation" instance=ExtResource("5_eyekk")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.01405, 3.8147e-06, 6.12766) + +[node name="Enemies" type="Node3D" parent="."] + +[node name="Enemy1" parent="Enemies" instance=ExtResource("6_uvsco")] +transform = Transform3D(0.748366, 0, -0.663286, 0, 1, 0, 0.663286, 0, 0.748366, 5.25312, 1, -7.01228) + +[node name="Enemy2" parent="Enemies" instance=ExtResource("6_uvsco")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.44962, 1, -7.01217) + +[node name="Enemy3" parent="Enemies" instance=ExtResource("6_uvsco")] +transform = Transform3D(0.910684, 0, 0.413104, 0, 1, 0, -0.413104, 0, 0.910684, -11.1807, 1, -13.9047) + +[node name="Enemy4" parent="Enemies" instance=ExtResource("6_uvsco")] +transform = Transform3D(-0.503623, 0, 0.863923, 0, 1, 0, -0.863923, 0, -0.503623, -5.81376, 1, 15.3224) diff --git a/src/scenes/player/player.tscn b/src/scenes/player/player.tscn deleted file mode 100644 index d087d66..0000000 --- a/src/scenes/player/player.tscn +++ /dev/null @@ -1,33 +0,0 @@ -[gd_scene load_steps=6 format=3 uid="uid://nsv4lbw7j8mi"] - -[ext_resource type="Script" uid="uid://csgybabwb8cbg" path="res://src/scripts/player/player.gd" id="1_swhsd"] -[ext_resource type="Script" uid="uid://cxnvqh8ijf0ox" path="res://src/scripts/player/boom.gd" id="2_qopur"] -[ext_resource type="PackedScene" uid="uid://ckwydalda0teo" path="res://src/scenes/player/rig.tscn" id="3_n52bt"] - -[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_yx56f"] - -[sub_resource type="SeparationRayShape3D" id="SeparationRayShape3D_swhsd"] - -[node name="Player" type="CharacterBody3D"] -script = ExtResource("1_swhsd") - -[node name="CollisionShape" type="CollisionShape3D" parent="."] -shape = SubResource("CapsuleShape3D_yx56f") - -[node name="Boom" type="SpringArm3D" parent="." node_paths=PackedStringArray("target")] -transform = Transform3D(1, 0, 0, 0, 0.866025, 0.5, 0, -0.5, 0.866025, 0, 1, 0) -shape = SubResource("SeparationRayShape3D_swhsd") -spring_length = 4.0 -script = ExtResource("2_qopur") -target = NodePath("../HorizontalPivot/VerticalPivot") - -[node name="Camera" type="Camera3D" parent="Boom"] - -[node name="HorizontalPivot" type="Node3D" parent="."] - -[node name="VerticalPivot" type="Node3D" parent="HorizontalPivot"] - -[node name="RigPivot" type="Node3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0) - -[node name="Rig" parent="RigPivot" instance=ExtResource("3_n52bt")] diff --git a/src/scenes/player/player.tscn29126206583.tmp b/src/scenes/player/player.tscn29126206583.tmp deleted file mode 100644 index 33f63e3..0000000 --- a/src/scenes/player/player.tscn29126206583.tmp +++ /dev/null @@ -1,32 +0,0 @@ -[gd_scene load_steps=6 format=3 uid="uid://nsv4lbw7j8mi"] - -[ext_resource type="Script" uid="uid://csgybabwb8cbg" path="res://src/scripts/player/player.gd" id="1_swhsd"] -[ext_resource type="Script" uid="uid://cxnvqh8ijf0ox" path="res://src/scripts/player/boom.gd" id="2_qopur"] - -[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_yx56f"] - -[sub_resource type="CapsuleMesh" id="CapsuleMesh_swhsd"] - -[sub_resource type="SeparationRayShape3D" id="SeparationRayShape3D_swhsd"] - -[node name="Player" type="CharacterBody3D"] -script = ExtResource("1_swhsd") - -[node name="CollisionShape" type="CollisionShape3D" parent="."] -shape = SubResource("CapsuleShape3D_yx56f") - -[node name="Mesh" type="MeshInstance3D" parent="."] -mesh = SubResource("CapsuleMesh_swhsd") - -[node name="Boom" type="SpringArm3D" parent="." node_paths=PackedStringArray("target")] -transform = Transform3D(1, 0, 0, 0, 0.866025, 0.5, 0, -0.5, 0.866025, 0, 1, 0) -shape = SubResource("SeparationRayShape3D_swhsd") -spring_length = 4.0 -script = ExtResource("2_qopur") -target = NodePath("../HorizontalPivot/VerticalPivot") - -[node name="Camera" type="Camera3D" parent="Boom"] - -[node name="HorizontalPivot" type="Node3D" parent="."] - -[node name="VerticalPivot" type="Node3D" parent="HorizontalPivot"] diff --git a/src/scenes/player/player.tscn29133398622.tmp b/src/scenes/player/player.tscn29133398622.tmp deleted file mode 100644 index 33f63e3..0000000 --- a/src/scenes/player/player.tscn29133398622.tmp +++ /dev/null @@ -1,32 +0,0 @@ -[gd_scene load_steps=6 format=3 uid="uid://nsv4lbw7j8mi"] - -[ext_resource type="Script" uid="uid://csgybabwb8cbg" path="res://src/scripts/player/player.gd" id="1_swhsd"] -[ext_resource type="Script" uid="uid://cxnvqh8ijf0ox" path="res://src/scripts/player/boom.gd" id="2_qopur"] - -[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_yx56f"] - -[sub_resource type="CapsuleMesh" id="CapsuleMesh_swhsd"] - -[sub_resource type="SeparationRayShape3D" id="SeparationRayShape3D_swhsd"] - -[node name="Player" type="CharacterBody3D"] -script = ExtResource("1_swhsd") - -[node name="CollisionShape" type="CollisionShape3D" parent="."] -shape = SubResource("CapsuleShape3D_yx56f") - -[node name="Mesh" type="MeshInstance3D" parent="."] -mesh = SubResource("CapsuleMesh_swhsd") - -[node name="Boom" type="SpringArm3D" parent="." node_paths=PackedStringArray("target")] -transform = Transform3D(1, 0, 0, 0, 0.866025, 0.5, 0, -0.5, 0.866025, 0, 1, 0) -shape = SubResource("SeparationRayShape3D_swhsd") -spring_length = 4.0 -script = ExtResource("2_qopur") -target = NodePath("../HorizontalPivot/VerticalPivot") - -[node name="Camera" type="Camera3D" parent="Boom"] - -[node name="HorizontalPivot" type="Node3D" parent="."] - -[node name="VerticalPivot" type="Node3D" parent="HorizontalPivot"] diff --git a/src/scripts/characters/area_attack.gd b/src/scripts/characters/area_attack.gd new file mode 100644 index 0000000..806b6ba --- /dev/null +++ b/src/scripts/characters/area_attack.gd @@ -0,0 +1,7 @@ +extends ShapeCast3D + +func deal_damage(damage: float) -> void: + for collision_id in get_collision_count(): + var collider = get_collider(collision_id) + if collider is Player or collider is Enemy: + collider.health_component.take_damage(damage) diff --git a/src/scripts/characters/area_attack.gd.uid b/src/scripts/characters/area_attack.gd.uid new file mode 100644 index 0000000..f6b9dfe --- /dev/null +++ b/src/scripts/characters/area_attack.gd.uid @@ -0,0 +1 @@ +uid://nekr2inm6vnq diff --git a/src/scripts/characters/attack_cast.gd b/src/scripts/characters/attack_cast.gd new file mode 100644 index 0000000..0109352 --- /dev/null +++ b/src/scripts/characters/attack_cast.gd @@ -0,0 +1,10 @@ +extends RayCast3D + +func deal_damage() -> void: + if !is_colliding(): + return + + var collider = get_collider() + if collider is Enemy: + collider.health_component.take_damage(15.0) + add_exception(collider) diff --git a/src/scripts/characters/attack_cast.gd.uid b/src/scripts/characters/attack_cast.gd.uid new file mode 100644 index 0000000..fbe8f39 --- /dev/null +++ b/src/scripts/characters/attack_cast.gd.uid @@ -0,0 +1 @@ +uid://blbnvx6pe37mc diff --git a/src/scripts/player/boom.gd b/src/scripts/characters/boom.gd similarity index 100% rename from src/scripts/player/boom.gd rename to src/scripts/characters/boom.gd diff --git a/src/scripts/player/boom.gd.uid b/src/scripts/characters/boom.gd.uid similarity index 100% rename from src/scripts/player/boom.gd.uid rename to src/scripts/characters/boom.gd.uid diff --git a/src/scripts/characters/dash.gd b/src/scripts/characters/dash.gd new file mode 100644 index 0000000..028c2b7 --- /dev/null +++ b/src/scripts/characters/dash.gd @@ -0,0 +1,18 @@ +extends Node3D + +@export var player: Player + +@onready var timer: Timer = $Timer + +var direction: Vector3 = Vector3.ZERO + +func _unhandled_input(event: InputEvent) -> void: + if not timer.is_stopped(): + return + + if event.is_action_pressed("dash"): + direction = player.get_movement_direction() + if not direction.is_zero_approx(): + print("We can dash!") + timer.start(1.0) + diff --git a/src/scripts/characters/dash.gd.uid b/src/scripts/characters/dash.gd.uid new file mode 100644 index 0000000..cc8b5e0 --- /dev/null +++ b/src/scripts/characters/dash.gd.uid @@ -0,0 +1 @@ +uid://ekvwb7r88vda diff --git a/src/scripts/characters/enemy.gd b/src/scripts/characters/enemy.gd new file mode 100644 index 0000000..b3f1874 --- /dev/null +++ b/src/scripts/characters/enemy.gd @@ -0,0 +1,34 @@ +extends CharacterBody3D +class_name Enemy + +@export var max_health: float = 20.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 area_attack: ShapeCast3D = $Rig/AreaAttack + +func _ready() -> void: + var mesh = rig.villager_meshes.pick_random() + rig.set_active_mesh(mesh) + health_component.update_max_health(max_health) + +func _physics_process(delta: float) -> void: + if rig.is_idle(): + check_for_attacks() + +func check_for_attacks() -> void: + for collision_id in player_detector.get_collision_count(): + var collider = player_detector.get_collider(collision_id) + if collider is Player: + rig.playback.travel("Overhead") + +func _on_health_component_defeat() -> void: + rig.playback.travel("Defeat") + collision_shape.disabled = true + set_physics_process(false) + + +func _on_rig_heavy_attack() -> void: + area_attack.deal_damage(20.0) diff --git a/src/scripts/characters/enemy.gd.uid b/src/scripts/characters/enemy.gd.uid new file mode 100644 index 0000000..2b60f18 --- /dev/null +++ b/src/scripts/characters/enemy.gd.uid @@ -0,0 +1 @@ +uid://p38hhb8jwgor diff --git a/src/scripts/characters/health_component.gd b/src/scripts/characters/health_component.gd new file mode 100644 index 0000000..875be17 --- /dev/null +++ b/src/scripts/characters/health_component.gd @@ -0,0 +1,20 @@ +extends Node +class_name HealthComponent + +signal defeat() +signal health_changed() + +var max_health: float +var current_health: float: + set(value): + current_health = max(value, 0.0) + if current_health == 0.0: + defeat.emit() + health_changed.emit() + +func update_max_health(max_hp_in: float) -> void: + max_health = max_hp_in + current_health = max_health + +func take_damage(damage_in: float) -> void: + current_health -= damage_in diff --git a/src/scripts/characters/health_component.gd.uid b/src/scripts/characters/health_component.gd.uid new file mode 100644 index 0000000..d5723bd --- /dev/null +++ b/src/scripts/characters/health_component.gd.uid @@ -0,0 +1 @@ +uid://b80knj2xg2m76 diff --git a/src/scripts/player/player.gd b/src/scripts/characters/player.gd similarity index 52% rename from src/scripts/player/player.gd rename to src/scripts/characters/player.gd index c09ef2b..0cfed90 100644 --- a/src/scripts/player/player.gd +++ b/src/scripts/characters/player.gd @@ -1,4 +1,5 @@ extends CharacterBody3D +class_name Player const SPEED = 5.0 @@ -6,22 +7,36 @@ const JUMP_VELOCITY = 4.5 # Stores the x/y direction of the camera var _look := Vector2.ZERO +# Stores the direction the player moves when attacking +var _attack_direction: Vector3 = Vector3.ZERO @export var mouse_sensitivity: float = 0.0075 @export var camera_max_pitch: float = 25 @export var camera_min_pitch: float = -75 @export var animation_decay: float = 25.0 +@export var attack_move_speed: float = 3.0 @onready var horizontal_pivot: Node3D = $HorizontalPivot @onready var vertical_pivot: Node3D = $HorizontalPivot/VerticalPivot @onready var rig_pivot: Node3D = $RigPivot @onready var rig: Node3D = $RigPivot/Rig +@onready var attack_cast: RayCast3D = %AttackCast +@onready var health_component: HealthComponent = $HealthComponent +@onready var collision_shape: CollisionShape3D = $CollisionShape +@onready var area_attack: ShapeCast3D = $RigPivot/AreaAttack func _ready() -> void: Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + health_component.update_max_health(30.0) func _physics_process(delta: float) -> void: frame_camera_rotation() + var direction := get_movement_direction() + rig.update_animation_tree(direction) + handle_idle_physics_frame(delta, direction) + handle_slashing_physics_frame(delta) + handle_overhead_physics_frame() + # Add the gravity. if not is_on_floor(): velocity += get_gravity() * delta @@ -30,16 +45,6 @@ func _physics_process(delta: float) -> void: if Input.is_action_just_pressed("move_jump") and is_on_floor(): velocity.y = JUMP_VELOCITY - var direction := get_movement_direction() - rig.update_animation_tree(direction) - if direction: - velocity.x = direction.x * SPEED - velocity.z = direction.z * SPEED - look_toward_direction(direction, delta) - else: - velocity.x = move_toward(velocity.x, 0, SPEED) - velocity.z = move_toward(velocity.z, 0, SPEED) - move_and_slide() func _unhandled_input(event: InputEvent) -> void: @@ -49,6 +54,11 @@ func _unhandled_input(event: InputEvent) -> void: if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: if event is InputEventMouseMotion: _look = -event.relative * mouse_sensitivity + if rig.is_idle(): + if event.is_action_pressed("click"): + slash_attack() + if event.is_action_pressed("right_click"): + heavy_attack() func frame_camera_rotation() -> void: horizontal_pivot.rotate_y(_look.x) @@ -67,3 +77,56 @@ func look_toward_direction(direction: Vector3, delta: float) -> void: rig_pivot.global_position + direction, Vector3.UP, true ) rig_pivot.global_transform = rig_pivot.global_transform.interpolate_with(target_transform, 1.0 - exp(-animation_decay * delta)) + +func slash_attack() -> void: + rig.playback.travel("Slash") + var movement_direction = get_movement_direction() + if movement_direction.is_zero_approx(): + _attack_direction = rig.global_basis * Vector3(0, 0, 1) + else: + _attack_direction = movement_direction + attack_cast.clear_exceptions() + +func heavy_attack() -> void: + rig.playback.travel("Overhead") + var movement_direction = get_movement_direction() + if movement_direction.is_zero_approx(): + _attack_direction = rig.global_basis * Vector3(0, 0, 1) + else: + _attack_direction = movement_direction + attack_cast.clear_exceptions() + +func handle_idle_physics_frame(delta: float, direction: Vector3) -> void: + if !rig.is_idle(): + return + + if direction: + velocity.x = direction.x * SPEED + velocity.z = direction.z * SPEED + look_toward_direction(direction, delta) + else: + velocity.x = move_toward(velocity.x, 0, SPEED) + velocity.z = move_toward(velocity.z, 0, SPEED) + +func handle_slashing_physics_frame(delta: float) -> void: + if !rig.is_slashing(): + return + + velocity.x = _attack_direction.x * attack_move_speed + velocity.z = _attack_direction.z * attack_move_speed + look_toward_direction(_attack_direction, delta) + attack_cast.deal_damage() + +func handle_overhead_physics_frame() -> void: + if !rig.is_overhead(): + return + velocity.x = 0.0 + velocity.z = 0.0 + +func _on_health_component_defeat() -> void: + rig.playback.travel("Defeat") + collision_shape.disabled = true + set_physics_process(false) + +func _on_rig_heavy_attack() -> void: + area_attack.deal_damage(50.0) diff --git a/src/scripts/player/player.gd.uid b/src/scripts/characters/player.gd.uid similarity index 100% rename from src/scripts/player/player.gd.uid rename to src/scripts/characters/player.gd.uid diff --git a/src/scripts/characters/rig.gd b/src/scripts/characters/rig.gd new file mode 100644 index 0000000..dd87279 --- /dev/null +++ b/src/scripts/characters/rig.gd @@ -0,0 +1,47 @@ +extends Node3D + +signal heavy_attack() + +@export var animation_speed: float = 10.0 + +@onready var animation_tree: AnimationTree = $AnimationTree +@onready var playback: AnimationNodeStateMachinePlayback = animation_tree["parameters/playback"] +@onready var skeleton_3d: Skeleton3D = $CharacterRig/GameRig/Skeleton3D +@onready var villager_meshes: Array[MeshInstance3D] = [ + $CharacterRig/GameRig/Skeleton3D/Villager_01, + $CharacterRig/GameRig/Skeleton3D/Villager_02 +] + +var run_path: String = "parameters/MoveSpace/blend_position" +var run_weight_target: float = -1.0 + +func _physics_process(delta: float) -> void: + animation_tree[run_path] = move_toward( + animation_tree[run_path], + run_weight_target, + delta * animation_speed + ) + +func update_animation_tree(direction: Vector3) -> void: + if direction.is_zero_approx(): + run_weight_target = -1.0 + else: + run_weight_target = 1.0 + +func is_idle() -> bool: + return playback.get_current_node() == "MoveSpace" + +func is_slashing() -> bool: + return playback.get_current_node() == "Slash" + +func is_overhead() -> bool: + return playback.get_current_node() == "Overhead" + +func set_active_mesh(active_mesh: MeshInstance3D) -> void: + for child in skeleton_3d.get_children(): + child.visible = false + active_mesh.visible = true + +func _on_animation_tree_animation_finished(anim_name: StringName) -> void: + if anim_name == "Overhead": + heavy_attack.emit() diff --git a/src/scripts/player/rig.gd.uid b/src/scripts/characters/rig.gd.uid similarity index 100% rename from src/scripts/player/rig.gd.uid rename to src/scripts/characters/rig.gd.uid diff --git a/src/scripts/player/rig.gd b/src/scripts/player/rig.gd deleted file mode 100644 index bf903b1..0000000 --- a/src/scripts/player/rig.gd +++ /dev/null @@ -1,21 +0,0 @@ -extends Node3D - -@export var animation_speed: float = 10.0 - -@onready var animation_tree: AnimationTree = $AnimationTree - -var run_path: String = "parameters/MoveSpace/blend_position" -var run_weight_target: float = -1.0 - -func _physics_process(delta: float) -> void: - animation_tree[run_path] = move_toward( - animation_tree[run_path], - run_weight_target, - delta * animation_speed - ) - -func update_animation_tree(direction: Vector3) -> void: - if direction.is_zero_approx(): - run_weight_target = -1.0 - else: - run_weight_target = 1.0