17 Commits
main ... remy

Author SHA1 Message Date
89b62317d4 brodacast shoot 2024-08-27 16:21:42 +02:00
2353cbb2be make factories 2024-08-27 15:42:23 +02:00
3c6a3dba44 refactor player 2024-08-27 15:29:45 +02:00
0d72e7f765 set bullet transform 2024-08-27 15:01:32 +02:00
60d0a83345 bullet: remove transparency 2024-08-27 15:01:14 +02:00
e5436241ef attach pencil case to right arm 2024-08-26 12:23:40 +02:00
b64a372af8 add bullet decay 2024-08-25 12:20:20 +02:00
9df52e0016 stick pens on walls 2024-08-25 12:03:52 +02:00
8d12eff214 shooting pens (locally) 2024-08-24 18:32:24 +02:00
b28fdc0a94 la trousse 2024-08-24 18:13:53 +02:00
137559ad29 scene: remove uids 2024-08-24 16:05:22 +02:00
39b9e6039c set firstperson model invisible 2024-08-24 16:00:16 +02:00
da8232f62b fixed jump 2024-08-24 15:54:23 +02:00
ed771ad861 upload ressources and remove old player 2024-08-24 15:18:07 +02:00
ad7b48d1fb remrem 2024-08-23 20:58:40 +02:00
57a46db439 upload assets 2024-08-22 12:43:21 +02:00
f06f3305ea Remy 2024-08-22 12:42:55 +02:00
57 changed files with 1692 additions and 7799 deletions

2
.gitattributes vendored
View File

@@ -1,3 +1,5 @@
*.zip filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text *.png filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text *.fbx filter=lfs diff=lfs merge=lfs -text
*.glb filter=lfs diff=lfs merge=lfs -text
*.res filter=lfs diff=lfs merge=lfs -text

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,860 @@
[gd_scene load_steps=32 format=3 uid="uid://c8qr7bgsuv3fj"]
[ext_resource type="ArrayMesh" path="res://Assets/Models/Characters/Remy/Remy_Body.res" id="1_tfpbs"]
[ext_resource type="ArrayMesh" path="res://Assets/Models/Characters/Remy/Remy_Bottoms.res" id="2_omx5l"]
[ext_resource type="ArrayMesh" path="res://Assets/Models/Characters/Remy/Remy_Eyelashes.res" id="3_fp6ml"]
[ext_resource type="ArrayMesh" path="res://Assets/Models/Characters/Remy/Remy_Eyes.res" id="4_xwbnc"]
[ext_resource type="ArrayMesh" path="res://Assets/Models/Characters/Remy/Remy_Hair.res" id="5_u0ca1"]
[ext_resource type="ArrayMesh" path="res://Assets/Models/Characters/Remy/Remy_Shoes.res" id="6_xg4n7"]
[ext_resource type="ArrayMesh" path="res://Assets/Models/Characters/Remy/Remy_Tops.res" id="7_skjds"]
[ext_resource type="PackedScene" path="res://Scenes/Characters/remy_fpv.tscn" id="9_0cwor"]
[ext_resource type="AnimationLibrary" path="res://Assets/Animations/Shooter_Pack.res" id="17_0rhm1"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_voxql"]
[sub_resource type="Skin" id="Skin_unkc0"]
resource_name = "Skin"
bind_count = 67
bind/0/name = &"mixamorig_Hips"
bind/0/bone = -1
bind/0/pose = Transform3D(100, 0, 0, 0, 100, 4.37114e-06, 0, -4.37114e-06, 100, 0.0419201, -209.151, 1.41641)
bind/1/name = &"mixamorig_Spine"
bind/1/bone = -1
bind/1/pose = Transform3D(99.9934, 1.15074, 4.26326e-08, -1.14498, 99.4929, -9.99272, -0.11499, 9.99206, 99.4995, -2.39798, -228.327, -17.5981)
bind/2/name = &"mixamorig_Spine1"
bind/2/bone = -1
bind/2/pose = Transform3D(99.9992, 0.392417, 6.03961e-08, -0.392055, 99.907, -4.29468, -0.0168531, 4.29465, 99.9077, -0.483516, -252.552, -3.18282)
bind/3/name = &"mixamorig_Spine2"
bind/3/bone = -1
bind/3/pose = Transform3D(99.983, -1.84448, 5.68434e-08, 1.83111, 99.258, 12.0204, -0.221714, -12.0184, 99.2749, 5.78559, -277.107, 42.4792)
bind/4/name = &"mixamorig_Neck"
bind/4/bone = -1
bind/4/pose = Transform3D(99.8904, -4.68136, 0, 4.49289, 95.8689, 28.0886, -1.31493, -28.0578, 95.9741, 14.6175, -297.03, 92.2453)
bind/5/name = &"mixamorig_Head"
bind/5/bone = -1
bind/5/pose = Transform3D(99.8904, -4.68136, 1.13687e-07, 4.49289, 95.8689, 28.0886, -1.31493, -28.0578, 95.9741, 14.6175, -320.219, 92.2453)
bind/6/name = &"mixamorig_HeadTop_End"
bind/6/bone = -1
bind/6/pose = Transform3D(99.8904, -4.68135, 4.54747e-07, 4.49289, 95.8689, 28.0886, -1.31493, -28.0578, 95.9741, 16.2573, -359.996, 92.6064)
bind/7/name = &"mixamorig_RightEye"
bind/7/bone = -1
bind/7/pose = Transform3D(99.8904, -4.68136, 1.13687e-07, 4.49289, 95.8689, 28.0886, -1.31493, -28.0578, 95.9741, 21.4989, -340.362, 80.9932)
bind/8/name = &"mixamorig_LeftEye"
bind/8/bone = -1
bind/8/pose = Transform3D(99.8904, -4.68135, 6.82121e-07, 4.49289, 95.8689, 28.0886, -1.31493, -28.0578, 95.9741, 9.3221, -341.245, 80.9355)
bind/9/name = &"mixamorig_LeftShoulder"
bind/9/bone = -1
bind/9/pose = Transform3D(-15.2443, -0.449328, -98.8302, 98.7873, 2.9119, -15.2509, 2.94636, -99.9566, -1.79057e-05, -2.88629, -21.8424, 298.665)
bind/10/name = &"mixamorig_LeftArm"
bind/10/bone = -1
bind/10/pose = Transform3D(4.12623e-05, 2.54824e-06, -100, 100, -5.83008e-05, 4.52544e-05, -5.51343e-05, -100, -4.91009e-07, -10.2379, -38.5985, 299.932)
bind/11/name = &"mixamorig_LeftForeArm"
bind/11/bone = -1
bind/11/pose = Transform3D(4.33707e-05, 4.42927e-06, -100, 100, -6.09941e-05, 4.73628e-05, -5.78276e-05, -100, -2.37204e-06, -10.2379, -93.7262, 299.932)
bind/12/name = &"mixamorig_LeftHand"
bind/12/bone = -1
bind/12/pose = Transform3D(3.5985e-05, -2.95641e-06, -100, 100, -3.16651e-06, 3.99771e-05, 2.30722e-12, -100, 5.01367e-06, -10.2379, -146.5, 299.932)
bind/13/name = &"mixamorig_LeftHandMiddle1"
bind/13/bone = -1
bind/13/pose = Transform3D(4.1275e-05, 2.33357e-06, -100, 100, -3.16651e-06, 4.52671e-05, 4.49066e-12, -100, -2.76313e-07, -10.2379, -174.244, 299.932)
bind/14/name = &"mixamorig_LeftHandMiddle2"
bind/14/bone = -1
bind/14/pose = Transform3D(4.19282e-05, 2.98677e-06, -100, 100, -0.000450401, 4.59203e-05, -0.000447234, -100, -9.29715e-07, -10.2379, -181.175, 299.933)
bind/15/name = &"mixamorig_LeftHandMiddle3"
bind/15/bone = -1
bind/15/pose = Transform3D(3.87006e-05, -2.4079e-07, -100, 100, -3.1665e-06, 4.26927e-05, -2.58102e-12, -100, 2.29805e-06, -10.2379, -188, 299.932)
bind/16/name = &"mixamorig_LeftHandMiddle4"
bind/16/bone = -1
bind/16/pose = Transform3D(3.87007e-05, -2.4079e-07, -100, 100, -3.1665e-06, 4.26928e-05, -2.58102e-12, -100, 2.29805e-06, -10.238, -195.392, 299.932)
bind/17/name = &"mixamorig_LeftHandThumb1"
bind/17/bone = -1
bind/17/pose = Transform3D(38.73, -22.3607, -89.4426, 77.4596, -44.7213, 44.7215, -49.9999, -86.6026, -5.63887e-05, 1.60829, 12.405, 335.71)
bind/18/name = &"mixamorig_LeftHandThumb2"
bind/18/bone = -1
bind/18/pose = Transform3D(38.7299, -22.3607, -89.4427, 77.4597, -44.7213, 44.7215, -50, -86.6026, 3.09228e-05, 1.60861, 1.18065, 335.71)
bind/19/name = &"mixamorig_LeftHandThumb3"
bind/19/bone = -1
bind/19/pose = Transform3D(38.7299, -22.3608, -89.4427, 77.4597, -44.7212, 44.7215, -49.9999, -86.6026, 0.000112777, 1.60875, -7.77524, 335.71)
bind/20/name = &"mixamorig_LeftHandThumb4"
bind/20/bone = -1
bind/20/pose = Transform3D(38.7299, -22.3608, -89.4427, 77.4597, -44.7212, 44.7215, -49.9999, -86.6026, 9.09495e-05, 1.60865, -13.5698, 335.71)
bind/21/name = &"mixamorig_LeftHandIndex1"
bind/21/bone = -1
bind/21/pose = Transform3D(4.27364e-05, 1.56652e-06, -100, 100, -3.16651e-06, 4.67285e-05, 4.24015e-12, -100, 4.90744e-07, -5.08588, -174.99, 299.478)
bind/22/name = &"mixamorig_LeftHandIndex2"
bind/22/bone = -1
bind/22/pose = Transform3D(4.40478e-05, 5.10635e-06, -100, 100, -3.16651e-06, 4.80399e-05, 5.79937e-12, -100, -3.04909e-06, -5.0859, -182.053, 299.478)
bind/23/name = &"mixamorig_LeftHandIndex3"
bind/23/bone = -1
bind/23/pose = Transform3D(4.33923e-05, 4.4509e-06, -100, 100, -3.16651e-06, 4.73844e-05, 5.51495e-12, -100, -2.39364e-06, -5.08587, -188.548, 299.478)
bind/24/name = &"mixamorig_LeftHandIndex4"
bind/24/bone = -1
bind/24/pose = Transform3D(4.33923e-05, 4.4509e-06, -100, 100, -3.16651e-06, 4.73844e-05, 5.51495e-12, -100, -2.39364e-06, -5.08584, -195.142, 299.478)
bind/25/name = &"mixamorig_LeftHandRing1"
bind/25/bone = -1
bind/25/pose = Transform3D(4.35421e-05, 6.40099e-06, -100, 100, -3.16651e-06, 4.75342e-05, 6.38163e-12, -100, -4.34373e-06, -14.479, -171.984, 300.012)
bind/26/name = &"mixamorig_LeftHandRing2"
bind/26/bone = -1
bind/26/pose = Transform3D(4.49878e-05, 6.04632e-06, -100, 100, -3.16651e-06, 4.89799e-05, 6.22207e-12, -100, -3.98906e-06, -14.4789, -178.294, 300.012)
bind/27/name = &"mixamorig_LeftHandRing3"
bind/27/bone = -1
bind/27/pose = Transform3D(-0.000108406, -0.000147347, -100, 100, -3.1665e-06, -0.000104414, 1.66702e-10, -100, 0.000149405, -14.4782, -184.653, 300.012)
bind/28/name = &"mixamorig_LeftHandRing4"
bind/28/bone = -1
bind/28/pose = Transform3D(4.06522e-05, 1.71072e-06, -100, 100, -3.16659e-06, 4.46443e-05, -8.28545e-11, -100, 3.46547e-07, -14.4789, -191.691, 300.011)
bind/29/name = &"mixamorig_LeftHandPinky1"
bind/29/bone = -1
bind/29/pose = Transform3D(2.13955e-05, -9.76242e-06, -100, 100, -3.16651e-06, 2.53876e-05, 8.51037e-13, -100, 1.18197e-05, -19.0188, -168.406, 299.491)
bind/30/name = &"mixamorig_LeftHandPinky2"
bind/30/bone = -1
bind/30/pose = Transform3D(0.000229854, 0.000190912, -100, 100, -0.000738696, 0.000233845, -0.000735529, -100, -0.000188856, -19.0198, -174.94, 299.493)
bind/31/name = &"mixamorig_LeftHandPinky3"
bind/31/bone = -1
bind/31/pose = Transform3D(3.4283e-05, -4.65839e-06, -100, 100, -3.16654e-06, 3.82751e-05, -3.8009e-12, -100, 6.71569e-06, -19.0188, -179.091, 299.491)
bind/32/name = &"mixamorig_LeftHandPinky4"
bind/32/bone = -1
bind/32/pose = Transform3D(3.4283e-05, -4.65842e-06, -100, 100, -3.16654e-06, 3.82751e-05, -3.80091e-12, -100, 6.71572e-06, -19.0188, -184.655, 299.491)
bind/33/name = &"mixamorig_RightShoulder"
bind/33/bone = -1
bind/33/pose = Transform3D(-20.1629, 0.35292, 97.9456, -97.9306, 1.71404, -20.166, -1.74999, -99.9847, 1.80194e-05, 2.8144, -19.4598, 299.201)
bind/34/name = &"mixamorig_RightArm"
bind/34/bone = -1
bind/34/pose = Transform3D(8.68049e-05, -1.24537e-05, 100, -100, -1.86276e-07, 8.8915e-05, -3.72535e-07, -100, -1.15962e-05, 12.104, -39.589, 299.94)
bind/35/name = &"mixamorig_RightForeArm"
bind/35/bone = -1
bind/35/pose = Transform3D(7.96092e-05, -4.90495e-06, 100, -100, -5.58804e-07, 8.17193e-05, 2.57644e-13, -100, -4.0475e-06, 12.104, -95.4317, 299.94)
bind/36/name = &"mixamorig_RightHand"
bind/36/bone = -1
bind/36/pose = Transform3D(8.07296e-05, -6.02537e-06, 100, -100, -5.58804e-07, 8.28397e-05, -6.43239e-13, -100, -5.16792e-06, 12.1041, -145.745, 299.94)
bind/37/name = &"mixamorig_RightHandMiddle1"
bind/37/bone = -1
bind/37/pose = Transform3D(7.74089e-05, -2.70475e-06, 100, -100, -5.58804e-07, 7.95191e-05, 1.92722e-12, -100, -1.8473e-06, 12.1041, -171.811, 299.94)
bind/38/name = &"mixamorig_RightHandMiddle2"
bind/38/bone = -1
bind/38/pose = Transform3D(7.86091e-05, -3.90488e-06, 100, -100, -5.58804e-07, 8.07192e-05, 1.04055e-12, -100, -3.04743e-06, 12.1041, -177.971, 299.94)
bind/39/name = &"mixamorig_RightHandMiddle3"
bind/39/bone = -1
bind/39/pose = Transform3D(7.67034e-05, -1.9992e-06, 100, -100, -5.58804e-07, 7.88136e-05, 2.47705e-12, -100, -1.14175e-06, 12.104, -185.25, 299.94)
bind/40/name = &"mixamorig_RightHandMiddle4"
bind/40/bone = -1
bind/40/pose = Transform3D(7.67034e-05, -1.9992e-06, 100, -100, -5.58804e-07, 7.88136e-05, 2.47705e-12, -100, -1.14175e-06, 12.1041, -192.71, 299.94)
bind/41/name = &"mixamorig_RightHandThumb1"
bind/41/bone = -1
bind/41/pose = Transform3D(38.7301, 22.3611, 89.4425, -77.4593, -44.7216, 44.7218, 50.0004, -86.6023, -2.00089e-05, -0.744326, 14.7863, 333.975)
bind/42/name = &"mixamorig_RightHandThumb2"
bind/42/bone = -1
bind/42/pose = Transform3D(38.7302, 22.3611, 89.4425, -77.4593, -44.7216, 44.7218, 50.0004, -86.6023, -4.72937e-05, -0.744248, 4.43724, 333.976)
bind/43/name = &"mixamorig_RightHandThumb3"
bind/43/bone = -1
bind/43/pose = Transform3D(38.7302, 22.3611, 89.4425, -77.4594, -44.7214, 44.7219, 50.0002, -86.6024, 0.000150976, -0.744501, -4.13842, 333.976)
bind/44/name = &"mixamorig_RightHandThumb4"
bind/44/bone = -1
bind/44/pose = Transform3D(38.73, 22.3612, 89.4426, -77.4592, -44.7218, 44.7217, 50.0006, -86.6022, 5.82077e-05, -0.744883, -10.2759, 333.976)
bind/45/name = &"mixamorig_RightHandIndex1"
bind/45/bone = -1
bind/45/pose = Transform3D(8.07296e-05, -5.97738e-06, 100, -100, -5.58804e-07, 8.28397e-05, -6.04494e-13, -100, -5.11993e-06, 6.99748, -172.348, 299.393)
bind/46/name = &"mixamorig_RightHandIndex2"
bind/46/bone = -1
bind/46/pose = Transform3D(7.71745e-05, -2.47024e-06, 100, -100, -5.58804e-07, 7.92846e-05, 2.12874e-12, -100, -1.61279e-06, 6.99749, -179.441, 299.393)
bind/47/name = &"mixamorig_RightHandIndex3"
bind/47/bone = -1
bind/47/pose = Transform3D(7.77097e-05, -3.00546e-06, 100, -100, -5.58804e-07, 7.98198e-05, 1.72759e-12, -100, -2.14801e-06, 6.99748, -186.855, 299.393)
bind/48/name = &"mixamorig_RightHandIndex4"
bind/48/bone = -1
bind/48/pose = Transform3D(7.77097e-05, -3.00546e-06, 100, -100, -5.58804e-07, 7.98198e-05, 1.72759e-12, -100, -2.14801e-06, 6.99744, -192.378, 299.393)
bind/49/name = &"mixamorig_RightHandRing1"
bind/49/bone = -1
bind/49/pose = Transform3D(8.42064e-05, -8.73814e-06, 100, -100, -5.58805e-07, 8.63165e-05, -2.92757e-12, -100, -7.88069e-06, 16.0881, -169.833, 299.941)
bind/50/name = &"mixamorig_RightHandRing2"
bind/50/bone = -1
bind/50/pose = Transform3D(8.37108e-05, -9.00656e-06, 100, -100, 0.000445899, 8.58209e-05, -0.000446457, -100, -8.14873e-06, 16.0881, -176.691, 299.94)
bind/51/name = &"mixamorig_RightHandRing3"
bind/51/bone = -1
bind/51/pose = Transform3D(6.33971e-05, 1.13072e-05, 100, -100, -5.58695e-07, 6.55072e-05, -3.49916e-11, -100, 1.21646e-05, 16.088, -183.526, 299.941)
bind/52/name = &"mixamorig_RightHandRing4"
bind/52/bone = -1
bind/52/pose = Transform3D(0.000253585, -0.000178882, 100, -100, 0.000506614, 0.000255696, -0.000507173, -100, -0.000178023, 16.0889, -189.544, 299.94)
bind/53/name = &"mixamorig_RightHandPinky1"
bind/53/bone = -1
bind/53/pose = Transform3D(6.46733e-05, 1.04791e-05, 100, -100, -5.58803e-07, 6.67834e-05, 1.00308e-11, -100, 1.13366e-05, 20.6451, -166.735, 299.442)
bind/54/name = &"mixamorig_RightHandPinky2"
bind/54/bone = -1
bind/54/pose = Transform3D(0.000101329, -2.66244e-05, 100, -100, -5.58805e-07, 0.000103439, -2.16801e-11, -100, -2.5767e-05, 20.6453, -172.674, 299.442)
bind/55/name = &"mixamorig_RightHandPinky3"
bind/55/bone = -1
bind/55/pose = Transform3D(8.98217e-05, -1.51174e-05, 100, -100, -5.58805e-07, 9.19318e-05, -8.88232e-12, -100, -1.426e-05, 20.6452, -176.439, 299.442)
bind/56/name = &"mixamorig_RightHandPinky4"
bind/56/bone = -1
bind/56/pose = Transform3D(-8.98231e-05, 0.000164526, 100, -100, -0.000958654, -8.77114e-05, 0.000958095, -100, 0.000165384, 20.6444, -182.807, 299.444)
bind/57/name = &"mixamorig_LeftUpLeg"
bind/57/bone = -1
bind/57/pose = Transform3D(-99.9989, 0.47673, 0.00835485, -0.476803, -99.9831, -1.77224, -9.66054e-05, -1.77226, 99.9843, 17.5511, 195.39, 2.21604)
bind/58/name = &"mixamorig_LeftLeg"
bind/58/bone = -1
bind/58/pose = Transform3D(-99.9986, -0.525834, -0.0315128, 0.526778, -99.8177, -6.01202, 0.000156614, -6.0121, 99.8191, 18.6545, 109.769, 6.88281)
bind/59/name = &"mixamorig_LeftFoot"
bind/59/bone = -1
bind/59/pose = Transform3D(-99.6558, -5.47894, 6.22056, 8.2894, -65.8684, 74.7839, 1.77351e-05, 75.0422, 66.0959, 20.151, 18.7568, -14.9342)
bind/60/name = &"mixamorig_LeftToeBase"
bind/60/bone = -1
bind/60/pose = Transform3D(-99.9851, -0.0227067, -1.72832, -1.72847, 1.31393, 99.9764, 8.68106e-06, 99.9914, -1.31411, 21.5432, -18.5528, -3.02252)
bind/61/name = &"mixamorig_LeftToe_End"
bind/61/bone = -1
bind/61/pose = Transform3D(-99.9851, -0.022726, -1.72834, -1.72849, 1.31394, 99.9764, -1.00826e-05, 99.9914, -1.31412, 21.5432, -37.6176, -3.02251)
bind/62/name = &"mixamorig_RightUpLeg"
bind/62/bone = -1
bind/62/pose = Transform3D(-99.9979, -0.647505, 0.00783087, 0.647552, -99.9909, 1.18213, 0.00017401, 1.18215, 99.993, -17.2208, 194.856, -1.04611)
bind/63/name = &"mixamorig_RightLeg"
bind/63/bone = -1
bind/63/pose = Transform3D(-99.9976, 0.694097, 0.0420051, -0.695367, -99.8151, -6.03798, 1.62395e-05, -6.03812, 99.8175, -18.6954, 109.584, 6.89046)
bind/64/name = &"mixamorig_RightFoot"
bind/64/bone = -1
bind/64/pose = Transform3D(-99.5418, 6.2595, -7.22856, -9.56208, -65.1618, 75.2496, -1.09139e-05, 75.596, 65.4618, -20.3771, 18.3728, -15.1041)
bind/65/name = &"mixamorig_RightToeBase"
bind/65/bone = -1
bind/65/pose = Transform3D(-99.0345, -0.159739, -13.8615, -13.8624, 1.14128, 99.028, 1.17808e-05, 99.9934, -1.1524, -18.7761, -22.2602, -2.95062)
bind/66/name = &"mixamorig_RightToe_End"
bind/66/bone = -1
bind/66/pose = Transform3D(-99.0345, -0.159767, -13.8615, -13.8624, 1.14127, 99.028, -1.58735e-05, 99.9934, -1.1524, -18.7761, -41.9626, -2.95062)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8rx3k"]
albedo_color = Color(0, 0.4, 1, 1)
[sub_resource type="CylinderMesh" id="CylinderMesh_spot0"]
material = SubResource("StandardMaterial3D_8rx3k")
top_radius = 0.03
bottom_radius = 0.03
height = 0.2
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_jv0gp"]
animation = &"Shooter_Pack/Jump"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_8ge3e"]
animation = &"Shooter_Pack/Idle"
[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_x8j1e"]
[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_j1jfn"]
graph_offset = Vector2(-79.757, 54.8124)
nodes/Animation/node = SubResource("AnimationNodeAnimation_8ge3e")
nodes/Animation/position = Vector2(143.482, 239.136)
"nodes/Animation 2/node" = SubResource("AnimationNodeAnimation_jv0gp")
"nodes/Animation 2/position" = Vector2(120, 386.667)
nodes/Blender/node = SubResource("AnimationNodeBlend2_x8j1e")
nodes/Blender/position = Vector2(400, 280)
nodes/output/position = Vector2(640, 280)
node_connections = [&"Blender", 0, &"Animation", &"Blender", 1, &"Animation 2", &"output", 0, &"Blender"]
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_kx08l"]
animation = &"Shooter_Pack/Run Backwards"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_i8uph"]
animation = &"Shooter_Pack/Run Forward"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_5a8ln"]
animation = &"Shooter_Pack/Run Right"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_sp5dv"]
animation = &"Shooter_Pack/Run Left"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_deruj"]
animation = &"Shooter_Pack/Idle"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_s5ywk"]
animation = &"Shooter_Pack/Idle"
[sub_resource type="AnimationNodeBlend3" id="AnimationNodeBlend3_ovt6x"]
[sub_resource type="AnimationNodeBlend3" id="AnimationNodeBlend3_od5jq"]
[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_58hhc"]
[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_2hvva"]
graph_offset = Vector2(-134.257, 191.327)
"nodes/Derriere Run/node" = SubResource("AnimationNodeAnimation_kx08l")
"nodes/Derriere Run/position" = Vector2(-26.6667, 493.333)
"nodes/Devant Run/node" = SubResource("AnimationNodeAnimation_i8uph")
"nodes/Devant Run/position" = Vector2(-26.6667, 213.333)
"nodes/Droite Run/node" = SubResource("AnimationNodeAnimation_5a8ln")
"nodes/Droite Run/position" = Vector2(80, 853.333)
"nodes/Gauche Run/node" = SubResource("AnimationNodeAnimation_sp5dv")
"nodes/Gauche Run/position" = Vector2(-160, 640)
nodes/Idle/node = SubResource("AnimationNodeAnimation_s5ywk")
nodes/Idle/position = Vector2(-26.6667, 346.667)
"nodes/Idle 2/node" = SubResource("AnimationNodeAnimation_deruj")
"nodes/Idle 2/position" = Vector2(-146.667, 773.333)
nodes/Side/node = SubResource("AnimationNodeBlend3_ovt6x")
nodes/Side/position = Vector2(453.333, 573.333)
nodes/Straight/node = SubResource("AnimationNodeBlend3_od5jq")
nodes/Straight/position = Vector2(413.333, 253.333)
nodes/Walking/node = SubResource("AnimationNodeBlend2_58hhc")
nodes/Walking/position = Vector2(680, 213.333)
nodes/output/position = Vector2(1000, 240)
node_connections = [&"Side", 0, &"Gauche Run", &"Side", 1, &"Idle 2", &"Side", 2, &"Droite Run", &"Straight", 0, &"Devant Run", &"Straight", 1, &"Idle", &"Straight", 2, &"Derriere Run", &"Walking", 0, &"Straight", &"Walking", 1, &"Side", &"output", 0, &"Walking"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_d2yto"]
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_04hs0"]
xfade_time = 0.1
advance_mode = 2
advance_condition = &"is_on_floor"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_a4m5g"]
switch_mode = 1
advance_mode = 2
advance_condition = &"jump"
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_n5an4"]
states/JumpBlend/node = SubResource("AnimationNodeBlendTree_j1jfn")
states/JumpBlend/position = Vector2(683.333, 121.272)
states/Movement/node = SubResource("AnimationNodeBlendTree_2hvva")
states/Movement/position = Vector2(368, 120.908)
states/Start/position = Vector2(107.334, 120.683)
transitions = ["Start", "Movement", SubResource("AnimationNodeStateMachineTransition_d2yto"), "JumpBlend", "Movement", SubResource("AnimationNodeStateMachineTransition_04hs0"), "Movement", "JumpBlend", SubResource("AnimationNodeStateMachineTransition_a4m5g")]
graph_offset = Vector2(18, 52)
[node name="Player" type="Player"]
collision_layer = 2
collision_mask = 3
[node name="Head" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.55647, 0)
visible = false
[node name="FPV" parent="Head" instance=ExtResource("9_0cwor")]
transform = Transform3D(-1, 0, -1.50996e-07, 0, 1, 0, 1.50996e-07, 0, -1, 0, -1.55647, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = SubResource("CapsuleShape3D_voxql")
[node name="Armature" type="Node3D" parent="."]
transform = Transform3D(-0.00499887, -7.90034e-05, -7.10373e-05, 7.56296e-05, -0.000298055, -0.00499053, 7.46192e-05, -0.00499048, 0.000299183, 0.00105977, 0, 0.0886294)
[node name="Skeleton3D" type="Skeleton3D" parent="Armature"]
transform = Transform3D(1, -2.79397e-09, -7.567e-10, 0, 1, -3.72529e-09, -5.82077e-10, 0, 1, 0, 0, 0)
bones/0/name = "mixamorig_Hips"
bones/0/parent = -1
bones/0/rest = Transform3D(1, 0, 0, 0, 0, 1, 0, -1, 0, -0.0419201, -1.41641, -209.151)
bones/0/enabled = true
bones/0/position = Vector3(1.31847, -4.02682, -200.943)
bones/0/rotation = Quaternion(-0.737988, -0.258812, 0.222558, 0.582116)
bones/0/scale = Vector3(1, 1, 1)
bones/1/name = "mixamorig_Spine"
bones/1/parent = 0
bones/1/rest = Transform3D(0.999934, -0.0114498, -0.0011499, 0.0115074, 0.994929, 0.0999206, -3.49246e-10, -0.0999272, 0.994995, -0.194802, 19.8048, -3.88975)
bones/1/enabled = true
bones/1/position = Vector3(-0.194802, 19.8048, -3.88975)
bones/1/rotation = Quaternion(0.00601573, -0.00115254, 0.00737783, 0.999954)
bones/1/scale = Vector3(1, 1, 1)
bones/2/name = "mixamorig_Spine1"
bones/2/parent = 1
bones/2/rest = Transform3D(0.999971, 0.00757641, 0.000325683, -0.00754545, 0.99834, -0.0571043, -0.000757788, 0.0571002, 0.998368, -3.2684e-09, 23.6201, 1.45286e-06)
bones/2/enabled = true
bones/2/position = Vector3(-1.19257e-06, 23.6201, -1.8128e-06)
bones/2/rotation = Quaternion(0.161755, -0.000345839, -0.00903295, 0.98679)
bones/2/scale = Vector3(1, 1, 1)
bones/3/name = "mixamorig_Spine2"
bones/3/parent = 2
bones/3/rest = Transform3D(0.99975, 0.022206, -0.00268874, -0.0223475, 0.986423, -0.162699, -0.000960642, 0.162718, 0.986672, -9.47592e-08, 27.8335, -3.24631e-07)
bones/3/enabled = true
bones/3/position = Vector3(-2.2861e-06, 27.8335, -9.58577e-06)
bones/3/rotation = Quaternion(0.218357, 0.000101476, -0.0162451, 0.975734)
bones/3/scale = Vector3(1, 1, 1)
bones/4/name = "mixamorig_Neck"
bones/4/parent = 3
bones/4/rest = Transform3D(0.999597, 0.0272384, -0.00797183, -0.0281752, 0.986162, -0.163372, 0.00341151, 0.163531, 0.986532, 1.09979e-06, 31.2942, 3.40958e-06)
bones/4/enabled = true
bones/4/position = Vector3(5.31052e-06, 31.2941, -5.5078e-06)
bones/4/rotation = Quaternion(0.0872076, 0.0627506, -0.0194703, 0.994021)
bones/4/scale = Vector3(1, 1, 1)
bones/5/name = "mixamorig_Head"
bones/5/parent = 4
bones/5/rest = Transform3D(1, 4.02525e-09, -1.3034e-09, -4.02525e-09, 1, -2.98314e-08, 1.3034e-09, 2.98314e-08, 1, 4.17233e-07, 23.1889, -1.84905e-05)
bones/5/enabled = true
bones/5/position = Vector3(-5.18166e-06, 23.189, -3.23355e-06)
bones/5/rotation = Quaternion(-0.0417769, 0.207732, 0.0337613, 0.97671)
bones/5/scale = Vector3(1, 1, 1)
bones/6/name = "mixamorig_HeadTop_End"
bones/6/parent = 5
bones/6/rest = Transform3D(1, -1.50158e-08, -3.91768e-10, 1.50158e-08, 1, -1.74624e-10, 3.91768e-10, 1.74624e-10, 1, -1.6398, 39.7774, -0.361088)
bones/6/enabled = true
bones/6/position = Vector3(-1.63982, 39.7775, -0.361111)
bones/6/rotation = Quaternion(8.73119e-11, -1.95884e-10, 7.50791e-09, 1)
bones/6/scale = Vector3(1, 1, 1)
bones/7/name = "mixamorig_RightEye"
bones/7/parent = 5
bones/7/rest = Transform3D(1, -3.37098e-09, 2.79287e-10, 3.37098e-09, 1, -8.73124e-11, -2.79287e-10, 8.73124e-11, 1, -6.88148, 20.143, 11.2521)
bones/7/enabled = true
bones/7/position = Vector3(-6.88148, 20.143, 11.2521)
bones/7/rotation = Quaternion(4.36562e-11, 1.39643e-10, 1.68549e-09, 1)
bones/7/scale = Vector3(1, 1, 1)
bones/8/name = "mixamorig_LeftEye"
bones/8/parent = 5
bones/8/rest = Transform3D(1, -1.90364e-08, -9.35203e-10, 1.90364e-08, 1, 5.94591e-08, 9.35201e-10, -5.94591e-08, 1, 5.29535, 21.026, 11.3098)
bones/8/enabled = true
bones/8/position = Vector3(5.29535, 21.026, 11.3098)
bones/8/rotation = Quaternion(-2.97296e-08, -4.67601e-10, 9.51822e-09, 1)
bones/8/scale = Vector3(1, 1, 1)
bones/9/name = "mixamorig_LeftShoulder"
bones/9/parent = 3
bones/9/rest = Transform3D(-0.152334, 0.987167, 0.0478953, -0.126049, 0.0286596, -0.99161, -0.980258, -0.157094, 0.120066, 12.6034, 19.3138, 0.359166)
bones/9/enabled = true
bones/9/position = Vector3(12.6034, 19.3138, 0.359121)
bones/9/rotation = Quaternion(-0.23609, -0.305407, 0.662257, -0.642186)
bones/9/scale = Vector3(1, 1, 1)
bones/10/name = "mixamorig_LeftArm"
bones/10/parent = 9
bones/10/rest = Transform3D(0.988302, -0.152444, 0.00449339, 0.15251, 0.987873, -0.0291195, 1.86963e-07, 0.0294642, 0.999566, -1.19209e-06, 26.5833, 2.22179e-05)
bones/10/enabled = true
bones/10/position = Vector3(-3.56706e-07, 26.5833, -3.24625e-05)
bones/10/rotation = Quaternion(0.503659, -0.215816, 0.280938, 0.787925)
bones/10/scale = Vector3(1, 1, 1)
bones/11/name = "mixamorig_LeftForeArm"
bones/11/parent = 10
bones/11/rest = Transform3D(1, -2.10846e-08, 1.88103e-08, 2.10846e-08, 1, -2.69332e-08, -1.88103e-08, 2.69332e-08, 1, 5.1085e-05, 55.1277, -2.11076e-05)
bones/11/enabled = true
bones/11/position = Vector3(5.7048e-05, 55.1277, 7.05517e-06)
bones/11/rotation = Quaternion(-6.44932e-08, -5.59393e-08, 0.530515, 0.847676)
bones/11/scale = Vector3(1, 1, 1)
bones/12/name = "mixamorig_LeftHand"
bones/12/parent = 11
bones/12/rest = Transform3D(1, 7.38569e-08, -7.38568e-08, -7.38568e-08, 1, 5.78276e-07, 7.38568e-08, -5.78276e-07, 1, -4.24793e-07, 52.7734, 3.75958e-05)
bones/12/enabled = true
bones/12/position = Vector3(-1.91235e-06, 52.7734, 1.86238e-06)
bones/12/rotation = Quaternion(-0.128131, -0.832138, -0.239333, 0.483578)
bones/12/scale = Vector3(1, 1, 1)
bones/13/name = "mixamorig_LeftHandMiddle1"
bones/13/parent = 12
bones/13/rest = Transform3D(1, -5.29001e-08, 5.28998e-08, 5.29001e-08, 1, 3.84015e-15, -5.28998e-08, -1.04175e-15, 1, -1.95983e-05, 27.7446, 3.00043e-05)
bones/13/enabled = true
bones/13/position = Vector3(-2.07878e-05, 27.7446, 2.08545e-05)
bones/13/rotation = Quaternion(0.44135, -0.0180835, -0.0445141, 0.896048)
bones/13/scale = Vector3(1, 1, 1)
bones/14/name = "mixamorig_LeftHandMiddle2"
bones/14/parent = 13
bones/14/rest = Transform3D(1, -6.53159e-09, 6.53199e-09, 6.53162e-09, 1, -4.47234e-06, -6.53197e-09, 4.47234e-06, 1, -2.36411e-07, 6.9316, 2.82965e-08)
bones/14/enabled = true
bones/14/position = Vector3(-1.90278e-06, 6.93162, -1.75854e-05)
bones/14/rotation = Quaternion(0.536752, 1.99106e-07, -0.0548792, 0.841954)
bones/14/scale = Vector3(1, 1, 1)
bones/15/name = "mixamorig_LeftHandMiddle3"
bones/15/parent = 14
bones/15/rest = Transform3D(1, 3.22756e-08, -3.22756e-08, -3.22755e-08, 1, 4.47234e-06, 3.22757e-08, -4.47234e-06, 1, 3.62847e-05, 6.82363, -1.67285e-05)
bones/15/enabled = true
bones/15/position = Vector3(3.2711e-05, 6.82364, 3.80479e-06)
bones/15/rotation = Quaternion(0.154934, 5.53911e-08, -0.0158412, 0.987798)
bones/15/scale = Vector3(1, 1, 1)
bones/16/name = "mixamorig_LeftHandMiddle4"
bones/16/parent = 15
bones/16/rest = Transform3D(1, -4.55111e-13, -1.02024e-15, 4.55111e-13, 1, 5.13997e-16, 1.02024e-15, -5.13997e-16, 1, 4.05636e-05, 7.3927, -3.07529e-05)
bones/16/enabled = true
bones/16/position = Vector3(4.55729e-05, 7.39272, -3.40614e-05)
bones/16/rotation = Quaternion(-2.56998e-16, -5.10121e-16, 2.27556e-13, 1)
bones/16/scale = Vector3(1, 1, 1)
bones/17/name = "mixamorig_LeftHandThumb1"
bones/17/parent = 12
bones/17/rest = Transform3D(0.894427, -0.447215, 3.7998e-07, 0.3873, 0.774596, -0.499999, 0.223607, 0.447213, 0.866026, -6.12881, 11.1231, 3.29153)
bones/17/enabled = true
bones/17/position = Vector3(-6.12881, 11.1231, 3.29155)
bones/17/rotation = Quaternion(0.226138, -0.0317322, 0.133707, 0.964353)
bones/17/scale = Vector3(1, 1, 1)
bones/18/name = "mixamorig_LeftHandThumb2"
bones/18/parent = 17
bones/18/rest = Transform3D(1, 5.40167e-07, -9.05024e-07, -5.40167e-07, 1, 2.06644e-07, 9.05024e-07, -2.06644e-07, 1, 1.055e-05, 11.2243, 1.47453e-05)
bones/18/enabled = true
bones/18/position = Vector3(-3.57633e-07, 11.2243, 7.37929e-06)
bones/18/rotation = Quaternion(0.0133201, 0.168602, -0.0634784, 0.983548)
bones/18/scale = Vector3(1, 1, 1)
bones/19/name = "mixamorig_LeftHandThumb3"
bones/19/parent = 18
bones/19/rest = Transform3D(1, -2.60768e-08, -3.95331e-07, 2.60772e-08, 1, 1.05448e-06, 3.95331e-07, -1.05448e-06, 1, -8.58307e-06, 8.95556, 5.49258e-05)
bones/19/enabled = true
bones/19/position = Vector3(-1.60933e-05, 8.95554, 2.45866e-05)
bones/19/rotation = Quaternion(-0.0116399, 0.0130987, 0.0923086, 0.995576)
bones/19/scale = Vector3(1, 1, 1)
bones/20/name = "mixamorig_LeftHandThumb4"
bones/20/parent = 19
bones/20/rest = Transform3D(1, -1.04308e-07, 2.171e-07, 1.04308e-07, 1, 1.06592e-08, -2.171e-07, -1.06592e-08, 1, 3.14713e-05, 5.79451, -2.20513e-05)
bones/20/enabled = true
bones/20/position = Vector3(2.98023e-05, 5.79453, 3.6382e-05)
bones/20/rotation = Quaternion(-5.32959e-09, 1.0855e-07, 5.21541e-08, 1)
bones/20/scale = Vector3(1, 1, 1)
bones/21/name = "mixamorig_LeftHandIndex1"
bones/21/parent = 12
bones/21/rest = Transform3D(1, -6.75132e-08, 4.52292e-08, 6.75132e-08, 1, 3.72461e-15, -4.52292e-08, -6.71043e-16, 1, -5.15204, 28.4902, 0.454742)
bones/21/enabled = true
bones/21/position = Vector3(-5.15204, 28.4902, 0.454752)
bones/21/rotation = Quaternion(0.315622, -0.0126546, -0.0318108, 0.948267)
bones/21/scale = Vector3(1, 1, 1)
bones/22/name = "mixamorig_LeftHandIndex2"
bones/22/parent = 21
bones/22/rest = Transform3D(1, -1.31144e-08, 3.53983e-08, 1.31144e-08, 1, 7.36016e-16, -3.53983e-08, -2.7179e-16, 1, 5.24651e-06, 7.06285, -6.10601e-05)
bones/22/enabled = true
bones/22/position = Vector3(1.12294e-05, 7.06286, -6.22361e-05)
bones/22/rotation = Quaternion(0.49948, -1.0769e-09, -0.0510686, 0.864819)
bones/22/scale = Vector3(1, 1, 1)
bones/23/name = "mixamorig_LeftHandIndex3"
bones/23/parent = 22
bones/23/rest = Transform3D(1, 6.55469e-09, -6.55452e-09, -6.55469e-09, 1, -1.14067e-17, 6.55452e-09, 5.43696e-17, 1, -2.61108e-05, 6.49529, -6.08801e-05)
bones/23/enabled = true
bones/23/position = Vector3(-2.585e-05, 6.49531, -9.60397e-06)
bones/23/rotation = Quaternion(0.209061, -6.83487e-08, -0.0213751, 0.977669)
bones/23/scale = Vector3(1, 1, 1)
bones/24/name = "mixamorig_LeftHandIndex4"
bones/24/parent = 23
bones/24/rest = Transform3D(1, -1.38319e-14, -6.52865e-16, 1.38319e-14, 1, 1.1298e-16, 6.52865e-16, -1.1298e-16, 1, -2.97865e-05, 6.5934, 3.06393e-05)
bones/24/enabled = true
bones/24/position = Vector3(-5.62285e-05, 6.59338, 4.18611e-05)
bones/24/rotation = Quaternion(-5.64899e-17, -3.26432e-16, 6.91594e-15, 1)
bones/24/scale = Vector3(1, 1, 1)
bones/25/name = "mixamorig_LeftHandRing1"
bones/25/parent = 12
bones/25/rest = Transform3D(1, -7.55707e-08, 9.35739e-08, 7.55707e-08, 1, 8.50463e-15, -9.35739e-08, -1.43318e-15, 1, 4.24104, 25.4841, -0.0792854)
bones/25/enabled = true
bones/25/position = Vector3(4.24103, 25.4841, -0.0792398)
bones/25/rotation = Quaternion(0.50551, -0.0258801, -0.0424506, 0.861387)
bones/25/scale = Vector3(1, 1, 1)
bones/26/name = "mixamorig_LeftHandRing2"
bones/26/parent = 25
bones/26/rest = Transform3D(1, -1.44568e-08, -3.54665e-09, 1.44568e-08, 1, 1.59121e-15, 3.54665e-09, -1.64249e-15, 1, -3.19095e-05, 6.30981, 6.16641e-05)
bones/26/enabled = true
bones/26/position = Vector3(-3.14336e-05, 6.30984, 3.05136e-05)
bones/26/rotation = Quaternion(0.586017, -2.30502e-08, -0.0599165, 0.80808)
bones/26/scale = Vector3(1, 1, 1)
bones/27/name = "mixamorig_LeftHandRing3"
bones/27/parent = 26
bones/27/rest = Transform3D(1, 1.53394e-06, -1.53394e-06, -1.53394e-06, 1, 2.29699e-12, 1.53394e-06, 5.59637e-14, 1, 2.02894e-06, 6.35954, 5.77582e-07)
bones/27/enabled = true
bones/27/position = Vector3(1.46642e-05, 6.35957, -1.96264e-06)
bones/27/rotation = Quaternion(0.222645, -8.35639e-07, -0.0227646, 0.974634)
bones/27/scale = Vector3(1, 1, 1)
bones/28/name = "mixamorig_LeftHandRing4"
bones/28/parent = 27
bones/28/rest = Transform3D(1, -1.49058e-06, 1.49058e-06, 1.49058e-06, 1, -8.82107e-13, -1.49058e-06, 3.10393e-12, 1, -3.85576e-05, 7.03783, 3.94035e-05)
bones/28/enabled = true
bones/28/position = Vector3(-2.21076e-05, 7.03783, 5.2122e-05)
bones/28/rotation = Quaternion(9.9651e-13, 7.4529e-07, 7.4529e-07, 1)
bones/28/scale = Vector3(1, 1, 1)
bones/29/name = "mixamorig_LeftHandPinky1"
bones/29/parent = 12
bones/29/rest = Transform3D(1, 1.45895e-07, -6.80601e-08, -1.45895e-07, 1, 1.02676e-14, 6.80601e-08, -3.37994e-16, 1, 8.78095, 21.9058, 0.441009)
bones/29/enabled = true
bones/29/position = Vector3(8.78094, 21.9058, 0.44099)
bones/29/rotation = Quaternion(0.591694, -0.0695364, 0.00180756, 0.803156)
bones/29/scale = Vector3(1, 1, 1)
bones/30/name = "mixamorig_LeftHandPinky2"
bones/30/parent = 29
bones/30/rest = Transform3D(1, -2.08457e-06, 2.00675e-06, 2.08459e-06, 1, -7.35529e-06, -2.00674e-06, 7.35529e-06, 1, -1.34452e-06, 6.53671, -2.24796e-06)
bones/30/enabled = true
bones/30/position = Vector3(-8.71362e-06, 6.5367, -1.73846e-05)
bones/30/rotation = Quaternion(0.528831, 1.56796e-06, -0.0540688, 0.847003)
bones/30/scale = Vector3(1, 1, 1)
bones/31/name = "mixamorig_LeftHandPinky3"
bones/31/parent = 30
bones/31/rest = Transform3D(1, 1.95571e-06, -1.9557e-06, -1.9557e-06, 1, 7.35529e-06, 1.95571e-06, -7.35529e-06, 1, -2.74823e-05, 4.14905, -3.01297e-05)
bones/31/enabled = true
bones/31/position = Vector3(-2.29305e-05, 4.14906, -4.04979e-05)
bones/31/rotation = Quaternion(0.122177, -1.12236e-06, -0.0124931, 0.99243)
bones/31/scale = Vector3(1, 1, 1)
bones/32/name = "mixamorig_LeftHandPinky4"
bones/32/parent = 31
bones/32/rest = Transform3D(1, 1.31476e-14, -2.38131e-13, -1.31476e-14, 1, 3.32816e-17, 2.38131e-13, -3.32816e-17, 1, 2.45582e-05, 5.56355, -1.27725e-06)
bones/32/enabled = true
bones/32/position = Vector3(2.55337e-05, 5.56354, 2.65978e-06)
bones/32/rotation = Quaternion(-1.66408e-17, -1.19065e-13, -6.57379e-15, 1)
bones/32/scale = Vector3(1, 1, 1)
bones/33/name = "mixamorig_RightShoulder"
bones/33/parent = 3
bones/33/rest = Transform3D(-0.20166, -0.979455, 0.000945032, 0.117545, -0.0251592, -0.992749, 0.972377, -0.200086, 0.120204, -12.9896, 19.1035, -0.116241)
bones/33/enabled = true
bones/33/position = Vector3(-12.9896, 19.1035, -0.116252)
bones/33/rotation = Quaternion(0.143082, -0.351468, 0.743994, 0.549974)
bones/33/scale = Vector3(1, 1, 1)
bones/34/name = "mixamorig_RightArm"
bones/34/parent = 33
bones/34/rest = Transform3D(0.979455, 0.20163, -0.00352932, -0.201661, 0.979305, -0.0171403, 2.81609e-07, 0.0174999, 0.999847, 0, 26.8919, 5.34301e-05)
bones/34/enabled = true
bones/34/position = Vector3(-6.16595e-06, 26.892, -2.96828e-05)
bones/34/rotation = Quaternion(0.484551, -0.188853, -0.610398, 0.597461)
bones/34/scale = Vector3(1, 1, 1)
bones/35/name = "mixamorig_RightForeArm"
bones/35/parent = 34
bones/35/rest = Transform3D(1, -7.19568e-08, 7.54872e-08, 7.19568e-08, 1, -3.72529e-09, -7.54872e-08, 3.7253e-09, 1, -9.15826e-05, 55.8427, 1.75912e-06)
bones/35/enabled = true
bones/35/position = Vector3(-9.2777e-05, 55.8427, -1.47738e-05)
bones/35/rotation = Quaternion(-1.02351e-07, 3.7518e-08, -0.757914, 0.652354)
bones/35/scale = Vector3(1, 1, 1)
bones/36/name = "mixamorig_RightHand"
bones/36/parent = 35
bones/36/rest = Transform3D(1, 1.12042e-08, -1.12042e-08, -1.12042e-08, 1, 2.94192e-16, 1.12042e-08, -1.68659e-16, 1, -4.39542e-05, 50.3137, 4.89908e-07)
bones/36/enabled = true
bones/36/position = Vector3(-4.22876e-05, 50.3137, 3.33394e-05)
bones/36/rotation = Quaternion(-0.163969, 0.394819, 0.244212, 0.870398)
bones/36/scale = Vector3(1, 1, 1)
bones/37/name = "mixamorig_RightHandMiddle1"
bones/37/parent = 36
bones/37/rest = Transform3D(1, -3.32064e-08, 3.32062e-08, 3.32064e-08, 1, 1.33872e-15, -3.32062e-08, -2.36065e-16, 1, -2.4214e-05, 26.0656, -2.98921e-05)
bones/37/enabled = true
bones/37/position = Vector3(-1.0388e-05, 26.0655, -3.3759e-05)
bones/37/rotation = Quaternion(0.430941, 0.000423647, 0.0693873, 0.899708)
bones/37/scale = Vector3(1, 1, 1)
bones/38/name = "mixamorig_RightHandMiddle2"
bones/38/parent = 37
bones/38/rest = Transform3D(1, 1.20018e-08, -1.20014e-08, -1.20018e-08, 1, 2.78164e-17, 1.20014e-08, 1.16221e-16, 1, 3.81811e-05, 6.15998, 3.07412e-05)
bones/38/enabled = true
bones/38/position = Vector3(5.23648e-05, 6.15998, 7.32391e-06)
bones/38/rotation = Quaternion(0.819307, -3.18281e-08, 0.0666546, 0.569467)
bones/38/scale = Vector3(1, 1, 1)
bones/39/name = "mixamorig_RightHandMiddle3"
bones/39/parent = 38
bones/39/rest = Transform3D(1, -1.9057e-08, 1.90568e-08, 1.9057e-08, 1, 4.54668e-16, -1.90568e-08, -9.15018e-17, 1, 3.62601e-05, 7.27912, 3.08864e-05)
bones/39/enabled = true
bones/39/position = Vector3(2.36217e-05, 7.27911, -1.11389e-06)
bones/39/rotation = Quaternion(0.163201, 6.96247e-08, 0.0132772, 0.986504)
bones/39/scale = Vector3(1, 1, 1)
bones/40/name = "mixamorig_RightHandMiddle4"
bones/40/parent = 39
bones/40/rest = Transform3D(1, -5.68753e-14, -5.21442e-16, 5.68753e-14, 1, 1.15398e-16, 5.21442e-16, -1.15398e-16, 1, -5.08148e-05, 7.45998, 1.38192e-07)
bones/40/enabled = true
bones/40/position = Vector3(-5.32012e-05, 7.45997, 5.62788e-07)
bones/40/rotation = Quaternion(-5.7699e-17, -2.60721e-16, 2.84377e-14, 1)
bones/40/scale = Vector3(1, 1, 1)
bones/41/name = "mixamorig_RightHandThumb1"
bones/41/parent = 36
bones/41/rest = Transform3D(0.894425, 0.447218, 2.23517e-07, -0.387301, 0.774593, -0.500004, -0.223611, 0.447216, 0.866023, 6.15705, 9.50198, 3.93002)
bones/41/enabled = true
bones/41/position = Vector3(6.15705, 9.50198, 3.93002)
bones/41/rotation = Quaternion(0.349264, 0.0275473, -0.150638, 0.924426)
bones/41/scale = Vector3(1, 1, 1)
bones/42/name = "mixamorig_RightHandThumb2"
bones/42/parent = 41
bones/42/rest = Transform3D(1, 2.42144e-07, -2.7209e-07, -2.42144e-07, 1, 2.7867e-08, 2.7209e-07, -2.78669e-08, 1, 8.58307e-06, 10.3491, 3.84108e-05)
bones/42/enabled = true
bones/42/position = Vector3(2.3246e-06, 10.3491, 1.36069e-05)
bones/42/rotation = Quaternion(-0.11155, -0.18871, 0.210432, 0.952714)
bones/42/scale = Vector3(1, 1, 1)
bones/43/name = "mixamorig_RightHandThumb3"
bones/43/parent = 42
bones/43/rest = Transform3D(1, 3.05473e-07, 8.19067e-07, -3.05475e-07, 1, 2.80118e-06, -8.19066e-07, -2.80118e-06, 1, -2.15769e-05, 8.57471, -0.000108002)
bones/43/enabled = true
bones/43/position = Vector3(-2.13981e-05, 8.57471, -6.78445e-05)
bones/43/rotation = Quaternion(-0.273034, -0.0182039, 0.407636, 0.871179)
bones/43/scale = Vector3(1, 1, 1)
bones/44/name = "mixamorig_RightHandThumb4"
bones/44/parent = 43
bones/44/rest = Transform3D(1, -1.79559e-06, 1.09886e-06, 1.79559e-06, 1, -4.29345e-06, -1.09885e-06, 4.29345e-06, 1, 5.54323e-06, 6.13889, 3.14353e-07)
bones/44/enabled = true
bones/44/position = Vector3(-2.2054e-06, 6.13889, 1.30792e-05)
bones/44/rotation = Quaternion(2.14673e-06, 5.49427e-07, 8.97795e-07, 1)
bones/44/scale = Vector3(1, 1, 1)
bones/45/name = "mixamorig_RightHandIndex1"
bones/45/parent = 36
bones/45/rest = Transform3D(1, -1.43051e-16, 4.79928e-10, 1.43051e-16, 1, 1.10797e-16, -4.79928e-10, -1.10797e-16, 1, 5.10661, 26.6031, 0.546357)
bones/45/enabled = true
bones/45/position = Vector3(5.10665, 26.6031, 0.546355)
bones/45/rotation = Quaternion(0.108688, 0.00642474, -0.0154604, 0.993935)
bones/45/scale = Vector3(1, 1, 1)
bones/46/name = "mixamorig_RightHandIndex2"
bones/46/parent = 45
bones/46/rest = Transform3D(1, -3.55512e-08, 3.50714e-08, 3.55512e-08, 1, 9.16763e-16, -3.50714e-08, 3.30065e-16, 1, -2.01832e-05, 7.09212, 3.08758e-05)
bones/46/enabled = true
bones/46/position = Vector3(-4.95055e-06, 7.09214, 5.23942e-08)
bones/46/rotation = Quaternion(0.282953, 1.86972e-08, 0.0230195, 0.958858)
bones/46/scale = Vector3(1, 1, 1)
bones/47/name = "mixamorig_RightHandIndex3"
bones/47/parent = 46
bones/47/rest = Transform3D(1, 5.35195e-09, -5.35221e-09, -5.35195e-09, 1, -2.05457e-16, 5.35221e-09, 2.34102e-16, 1, 1.29087e-05, 7.41442, 3.06304e-05)
bones/47/enabled = true
bones/47/position = Vector3(2.59956e-05, 7.41443, 6.92974e-06)
bones/47/rotation = Quaternion(0.256703, -7.20469e-08, 0.020884, 0.966265)
bones/47/scale = Vector3(1, 1, 1)
bones/48/name = "mixamorig_RightHandIndex4"
bones/48/parent = 47
bones/48/rest = Transform3D(1, -2.84817e-14, 3.94852e-16, 2.84817e-14, 1, -2.2639e-16, -3.94852e-16, 2.2639e-16, 1, 3.79628e-05, 5.52251, 3.06679e-05)
bones/48/enabled = true
bones/48/position = Vector3(8.07328e-05, 5.52252, 3.1823e-06)
bones/48/rotation = Quaternion(1.13195e-16, 1.97426e-16, 1.42409e-14, 1)
bones/48/scale = Vector3(1, 1, 1)
bones/49/name = "mixamorig_RightHandRing1"
bones/49/parent = 36
bones/49/rest = Transform3D(1, 3.47676e-08, -2.71277e-08, -3.47676e-08, 1, 1.13774e-15, 2.71277e-08, -1.94576e-16, 1, -3.98397, 24.0872, -0.00140298)
bones/49/enabled = true
bones/49/position = Vector3(-3.98395, 24.0872, -0.00137292)
bones/49/rotation = Quaternion(0.477497, 0.0365067, 0.00592117, 0.877855)
bones/49/scale = Vector3(1, 1, 1)
bones/50/name = "mixamorig_RightHandRing2"
bones/50/parent = 49
bones/50/rest = Transform3D(1, -4.956e-09, -2.68422e-09, 4.95601e-09, 1, 4.46457e-06, 2.68419e-09, -4.46457e-06, 1, 2.38981e-06, 6.85748, 1.26784e-06)
bones/50/enabled = true
bones/50/position = Vector3(2.40837e-05, 6.85748, 6.28673e-06)
bones/50/rotation = Quaternion(0.762141, 1.57438e-07, 0.0620041, 0.644435)
bones/50/scale = Vector3(1, 1, 1)
bones/51/name = "mixamorig_RightHandRing3"
bones/51/parent = 50
bones/51/rest = Transform3D(1, -2.03137e-07, 2.03137e-07, 2.03138e-07, 1, -4.46457e-06, -2.03136e-07, 4.46457e-06, 1, 2.34412e-05, 6.83549, 2.72178e-05)
bones/51/enabled = true
bones/51/position = Vector3(3.05916e-05, 6.8355, 3.4144e-05)
bones/51/rotation = Quaternion(0.425588, 4.01725e-08, 0.0346237, 0.904254)
bones/51/scale = Vector3(1, 1, 1)
bones/52/name = "mixamorig_RightHandRing4"
bones/52/parent = 51
bones/52/rest = Transform3D(1, 1.90189e-06, -1.90188e-06, -1.90188e-06, 1, 5.07173e-06, 1.90189e-06, -5.07173e-06, 1, 1.4883e-06, 6.01715, -1.95696e-06)
bones/52/enabled = true
bones/52/position = Vector3(-1.71106e-05, 6.01714, 3.06189e-06)
bones/52/rotation = Quaternion(-2.53586e-06, -9.50944e-07, -9.50944e-07, 1)
bones/52/scale = Vector3(1, 1, 1)
bones/53/name = "mixamorig_RightHandPinky1"
bones/53/parent = 36
bones/53/rest = Transform3D(1, -1.60563e-07, 1.65045e-07, 1.60563e-07, 1, 2.66784e-14, -1.65045e-07, -1.78373e-16, 1, -8.54112, 20.9893, 0.497743)
bones/53/enabled = true
bones/53/position = Vector3(-8.54112, 20.9893, 0.497743)
bones/53/rotation = Quaternion(0.534612, 0.0448573, 0.0056568, 0.843887)
bones/53/scale = Vector3(1, 1, 1)
bones/54/name = "mixamorig_RightHandPinky2"
bones/54/parent = 53
bones/54/rest = Transform3D(1, 3.66553e-07, -3.71035e-07, -3.66553e-07, 1, 7.69019e-14, 3.71035e-07, 5.91023e-14, 1, 4.36823e-05, 5.93961, -2.34046e-06)
bones/54/enabled = true
bones/54/position = Vector3(6.44007e-05, 5.93959, 1.5255e-06)
bones/54/rotation = Quaternion(0.658067, -2.65365e-07, 0.0535371, 0.751054)
bones/54/scale = Vector3(1, 1, 1)
bones/55/name = "mixamorig_RightHandPinky3"
bones/55/parent = 54
bones/55/rest = Transform3D(1, -1.1507e-07, 1.1507e-07, 1.1507e-07, 1, -1.12673e-14, -1.1507e-07, 2.45083e-14, 1, -2.58114e-05, 3.76469, 5.31963e-06)
bones/55/enabled = true
bones/55/position = Vector3(-8.55002e-06, 3.76469, 2.50986e-06)
bones/55/rotation = Quaternion(0.497387, -4.86841e-07, 0.0404649, 0.866584)
bones/55/scale = Vector3(1, 1, 1)
bones/56/name = "mixamorig_RightHandPinky4"
bones/56/parent = 55
bones/56/rest = Transform3D(1, -1.79643e-06, 1.79645e-06, 1.79645e-06, 1, -9.58095e-06, -1.79643e-06, 9.58095e-06, 1, 3.3787e-07, 6.37046, 2.94399e-06)
bones/56/enabled = true
bones/56/position = Vector3(3.65182e-06, 6.37045, 2.99509e-06)
bones/56/rotation = Quaternion(4.79048e-06, 8.9822e-07, 8.98219e-07, 1)
bones/56/scale = Vector3(1, 1, 1)
bones/57/name = "mixamorig_LeftUpLeg"
bones/57/parent = 0
bones/57/rest = Transform3D(-0.999989, -0.00476803, -9.59866e-07, 0.0047673, -0.999832, -0.0177226, 8.35421e-05, -0.0177224, 0.999843, 18.5244, -13.8385, 2.66202)
bones/57/enabled = true
bones/57/position = Vector3(18.5244, -13.8385, 2.66202)
bones/57/rotation = Quaternion(0.397643, 0.0598779, 0.904218, -0.143821)
bones/57/scale = Vector3(1, 1, 1)
bones/58/name = "mixamorig_LeftLeg"
bones/58/parent = 57
bones/58/rest = Transform3D(0.99995, -0.0100314, -0.000204796, 0.010031, 0.999049, 0.0424205, -0.000220934, -0.0424205, 0.9991, 1.7493e-06, 85.2457, -8.76553e-08)
bones/58/enabled = true
bones/58/position = Vector3(-9.96835e-07, 85.2457, -8.22109e-07)
bones/58/rotation = Quaternion(-0.19935, -0.00148469, -0.00250753, 0.979924)
bones/58/scale = Vector3(1, 1, 1)
bones/59/name = "mixamorig_LeftFoot"
bones/59/parent = 58
bones/59/rest = Transform3D(0.996813, -0.079665, -0.00415444, 0.0457001, 0.61296, -0.788791, 0.0653856, 0.786088, 0.614647, -1.80688e-06, 85.5711, -6.67515e-07)
bones/59/enabled = true
bones/59/position = Vector3(1.32316e-06, 85.5711, -8.44399e-06)
bones/59/rotation = Quaternion(0.411364, -0.0414975, 0.0186893, 0.910334)
bones/59/scale = Vector3(1, 1, 1)
bones/60/name = "mixamorig_LeftToeBase"
bones/60/parent = 59
bones/60/rest = Transform3D(0.995347, 0.0786963, -0.0556022, -0.0956571, 0.737576, -0.668455, -0.0115941, 0.670663, 0.741672, 1.59442e-06, 32.4812, 3.52485e-06)
bones/60/enabled = true
bones/60/position = Vector3(2.43488e-06, 32.4812, -7.36337e-06)
bones/60/rotation = Quaternion(0.359201, -0.0118046, -0.046768, 0.932013)
bones/60/scale = Vector3(1, 1, 1)
bones/61/name = "mixamorig_LeftToe_End"
bones/61/parent = 60
bones/61/rest = Transform3D(1, 2.09794e-07, 1.90009e-07, -2.09794e-07, 1, -1.34251e-07, -1.90009e-07, 1.34251e-07, 1, 6.54953e-07, 19.0648, -2.42908e-07)
bones/61/enabled = true
bones/61/position = Vector3(6.54953e-07, 19.0648, -2.42908e-07)
bones/61/rotation = Quaternion(6.71255e-08, 9.50047e-08, -1.04897e-07, 1)
bones/61/scale = Vector3(1, 1, 1)
bones/62/name = "mixamorig_RightUpLeg"
bones/62/parent = 0
bones/62/rest = Transform3D(-0.999979, 0.00647552, 1.74921e-06, -0.00647505, -0.999909, 0.0118216, 7.82998e-05, 0.0118213, 0.99993, -18.4403, -14.4117, 0.16034)
bones/62/enabled = true
bones/62/position = Vector3(-18.4403, -14.4117, 0.16034)
bones/62/rotation = Quaternion(0.04734, -0.0316465, 0.997339, 0.0455322)
bones/62/scale = Vector3(1, 1, 1)
bones/63/name = "mixamorig_RightLeg"
bones/63/parent = 62
bones/63/rest = Transform3D(0.99991, 0.0134119, 0.000468956, -0.0134107, 0.997302, 0.0721754, 0.000500317, -0.0721752, 0.997392, 2.27134e-06, 84.8197, -1.21319e-07)
bones/63/enabled = true
bones/63/position = Vector3(2.27134e-06, 84.8197, -1.21319e-07)
bones/63/rotation = Quaternion(-0.295329, 0.0109313, 0.00223221, 0.95533)
bones/63/scale = Vector3(1, 1, 1)
bones/64/name = "mixamorig_RightFoot"
bones/64/parent = 63
bones/64/rest = Transform3D(0.995798, 0.0914117, 0.00552216, -0.0511929, 0.605643, -0.794088, -0.0759334, 0.790468, 0.607777, 2.32039e-06, 85.4194, 9.07708e-08)
bones/64/enabled = true
bones/64/position = Vector3(3.58406e-06, 85.4194, -2.00182e-06)
bones/64/rotation = Quaternion(0.583469, 0.181129, -0.0304388, 0.791094)
bones/64/scale = Vector3(1, 1, 1)
bones/65/name = "mixamorig_RightToeBase"
bones/65/parent = 64
bones/65/rest = Transform3D(0.995727, 0.06712, 0.0634238, -0.00856839, 0.751, -0.660247, -0.091947, 0.656882, 0.748366, -2.98023e-07, 32.9812, 1.88937e-06)
bones/65/enabled = true
bones/65/position = Vector3(-2.98023e-07, 32.9812, 1.88937e-06)
bones/65/rotation = Quaternion(0.352468, 0.0415776, -0.020241, 0.934681)
bones/65/scale = Vector3(1, 1, 1)
bones/66/name = "mixamorig_RightToe_End"
bones/66/parent = 65
bones/66/rest = Transform3D(1, 2.77262e-07, 2.70338e-07, -2.77262e-07, 1, 6.50943e-08, -2.70338e-07, -6.50944e-08, 1, -8.0606e-07, 19.7023, -7.00339e-07)
bones/66/enabled = true
bones/66/position = Vector3(-8.0606e-07, 19.7023, -7.00339e-07)
bones/66/rotation = Quaternion(-3.25472e-08, 1.35169e-07, -1.38631e-07, 1)
bones/66/scale = Vector3(1, 1, 1)
[node name="Body" type="MeshInstance3D" parent="Armature/Skeleton3D"]
transform = Transform3D(1, 7.10543e-15, 0, -7.10543e-15, 1, 3.55271e-15, 4.23516e-22, -3.55271e-15, 1, 0, 0, 0)
mesh = ExtResource("1_tfpbs")
skin = SubResource("Skin_unkc0")
[node name="Bottoms" type="MeshInstance3D" parent="Armature/Skeleton3D"]
mesh = ExtResource("2_omx5l")
skin = SubResource("Skin_unkc0")
[node name="Eyelashes" type="MeshInstance3D" parent="Armature/Skeleton3D"]
mesh = ExtResource("3_fp6ml")
skin = SubResource("Skin_unkc0")
[node name="Eyes" type="MeshInstance3D" parent="Armature/Skeleton3D"]
mesh = ExtResource("4_xwbnc")
skin = SubResource("Skin_unkc0")
[node name="Hair" type="MeshInstance3D" parent="Armature/Skeleton3D"]
transform = Transform3D(1, -2.79397e-09, -7.567e-10, 0, 1, -3.72529e-09, -5.82077e-10, 0, 1, 0, 0, 0)
mesh = ExtResource("5_u0ca1")
skin = SubResource("Skin_unkc0")
[node name="Shoes" type="MeshInstance3D" parent="Armature/Skeleton3D"]
mesh = ExtResource("6_xg4n7")
skin = SubResource("Skin_unkc0")
[node name="Tops" type="MeshInstance3D" parent="Armature/Skeleton3D"]
mesh = ExtResource("7_skjds")
skin = SubResource("Skin_unkc0")
[node name="Hand" type="BoneAttachment3D" parent="Armature/Skeleton3D"]
transform = Transform3D(-0.101809, 0.0274908, 0.994424, -0.100283, 0.994242, -0.0377525, -0.989736, -0.103568, -0.0984655, -33.2805, 32.3409, -274.352)
bone_name = "mixamorig_RightHand"
bone_idx = 36
[node name="Pencil Case" type="MeshInstance3D" parent="Armature/Skeleton3D/Hand"]
transform = Transform3D(9.99555, 15.6762, -299.423, -7.80417, 299.502, 15.4192, 299.732, 7.27518, 10.3868, 14.9476, 66.4479, 12.5163)
mesh = SubResource("CylinderMesh_spot0")
skeleton = NodePath("../..")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
"Shooter_Pack": ExtResource("17_0rhm1")
}
[node name="AnimationTree" type="AnimationTree" parent="."]
tree_root = SubResource("AnimationNodeStateMachine_n5an4")
anim_player = NodePath("../AnimationPlayer")
parameters/conditions/is_on_floor = false
parameters/conditions/jump = false
parameters/JumpBlend/Blender/blend_amount = 0.5
parameters/Movement/Side/blend_amount = 0.0
parameters/Movement/Straight/blend_amount = 0.0
parameters/Movement/Walking/blend_amount = 0.0

View File

@@ -0,0 +1,224 @@
[gd_scene load_steps=4 format=3 uid="uid://cwbg6ekri5onf"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4xaty"]
albedo_color = Color(0, 0.4, 1, 1)
[sub_resource type="CylinderMesh" id="CylinderMesh_iro55"]
material = SubResource("StandardMaterial3D_4xaty")
top_radius = 0.05
bottom_radius = 0.05
height = 0.2
[sub_resource type="Skin" id="Skin_cysku"]
resource_name = "Skin"
bind_count = 67
bind/0/name = &"mixamorig_Hips"
bind/0/bone = -1
bind/0/pose = Transform3D(100, 0, 0, 0, 100, 4.37114e-06, 0, -4.37114e-06, 100, 0.0419201, -209.151, 1.41641)
bind/1/name = &"mixamorig_Spine"
bind/1/bone = -1
bind/1/pose = Transform3D(99.9934, 1.15074, 4.26326e-08, -1.14498, 99.4929, -9.99272, -0.11499, 9.99206, 99.4995, -2.39798, -228.327, -17.5981)
bind/2/name = &"mixamorig_Spine1"
bind/2/bone = -1
bind/2/pose = Transform3D(99.9992, 0.392417, 6.03961e-08, -0.392055, 99.907, -4.29468, -0.0168531, 4.29465, 99.9077, -0.483516, -252.552, -3.18282)
bind/3/name = &"mixamorig_Spine2"
bind/3/bone = -1
bind/3/pose = Transform3D(99.983, -1.84448, 5.68434e-08, 1.83111, 99.258, 12.0204, -0.221714, -12.0184, 99.2749, 5.78559, -277.107, 42.4792)
bind/4/name = &"mixamorig_Neck"
bind/4/bone = -1
bind/4/pose = Transform3D(99.8904, -4.68136, 0, 4.49289, 95.8689, 28.0886, -1.31493, -28.0578, 95.9741, 14.6175, -297.03, 92.2453)
bind/5/name = &"mixamorig_Head"
bind/5/bone = -1
bind/5/pose = Transform3D(99.8904, -4.68136, 1.13687e-07, 4.49289, 95.8689, 28.0886, -1.31493, -28.0578, 95.9741, 14.6175, -320.219, 92.2453)
bind/6/name = &"mixamorig_HeadTop_End"
bind/6/bone = -1
bind/6/pose = Transform3D(99.8904, -4.68135, 4.54747e-07, 4.49289, 95.8689, 28.0886, -1.31493, -28.0578, 95.9741, 16.2573, -359.996, 92.6064)
bind/7/name = &"mixamorig_RightEye"
bind/7/bone = -1
bind/7/pose = Transform3D(99.8904, -4.68136, 1.13687e-07, 4.49289, 95.8689, 28.0886, -1.31493, -28.0578, 95.9741, 21.4989, -340.362, 80.9932)
bind/8/name = &"mixamorig_LeftEye"
bind/8/bone = -1
bind/8/pose = Transform3D(99.8904, -4.68135, 6.82121e-07, 4.49289, 95.8689, 28.0886, -1.31493, -28.0578, 95.9741, 9.3221, -341.245, 80.9355)
bind/9/name = &"mixamorig_LeftShoulder"
bind/9/bone = -1
bind/9/pose = Transform3D(-15.2443, -0.449328, -98.8302, 98.7873, 2.9119, -15.2509, 2.94636, -99.9566, -1.79057e-05, -2.88629, -21.8424, 298.665)
bind/10/name = &"mixamorig_LeftArm"
bind/10/bone = -1
bind/10/pose = Transform3D(4.12623e-05, 2.54824e-06, -100, 100, -5.83008e-05, 4.52544e-05, -5.51343e-05, -100, -4.91009e-07, -10.2379, -38.5985, 299.932)
bind/11/name = &"mixamorig_LeftForeArm"
bind/11/bone = -1
bind/11/pose = Transform3D(4.33707e-05, 4.42927e-06, -100, 100, -6.09941e-05, 4.73628e-05, -5.78276e-05, -100, -2.37204e-06, -10.2379, -93.7262, 299.932)
bind/12/name = &"mixamorig_LeftHand"
bind/12/bone = -1
bind/12/pose = Transform3D(3.5985e-05, -2.95641e-06, -100, 100, -3.16651e-06, 3.99771e-05, 2.30722e-12, -100, 5.01367e-06, -10.2379, -146.5, 299.932)
bind/13/name = &"mixamorig_LeftHandMiddle1"
bind/13/bone = -1
bind/13/pose = Transform3D(4.1275e-05, 2.33357e-06, -100, 100, -3.16651e-06, 4.52671e-05, 4.49066e-12, -100, -2.76313e-07, -10.2379, -174.244, 299.932)
bind/14/name = &"mixamorig_LeftHandMiddle2"
bind/14/bone = -1
bind/14/pose = Transform3D(4.19282e-05, 2.98677e-06, -100, 100, -0.000450401, 4.59203e-05, -0.000447234, -100, -9.29715e-07, -10.2379, -181.175, 299.933)
bind/15/name = &"mixamorig_LeftHandMiddle3"
bind/15/bone = -1
bind/15/pose = Transform3D(3.87006e-05, -2.4079e-07, -100, 100, -3.1665e-06, 4.26927e-05, -2.58102e-12, -100, 2.29805e-06, -10.2379, -188, 299.932)
bind/16/name = &"mixamorig_LeftHandMiddle4"
bind/16/bone = -1
bind/16/pose = Transform3D(3.87007e-05, -2.4079e-07, -100, 100, -3.1665e-06, 4.26928e-05, -2.58102e-12, -100, 2.29805e-06, -10.238, -195.392, 299.932)
bind/17/name = &"mixamorig_LeftHandThumb1"
bind/17/bone = -1
bind/17/pose = Transform3D(38.73, -22.3607, -89.4426, 77.4596, -44.7213, 44.7215, -49.9999, -86.6026, -5.63887e-05, 1.60829, 12.405, 335.71)
bind/18/name = &"mixamorig_LeftHandThumb2"
bind/18/bone = -1
bind/18/pose = Transform3D(38.7299, -22.3607, -89.4427, 77.4597, -44.7213, 44.7215, -50, -86.6026, 3.09228e-05, 1.60861, 1.18065, 335.71)
bind/19/name = &"mixamorig_LeftHandThumb3"
bind/19/bone = -1
bind/19/pose = Transform3D(38.7299, -22.3608, -89.4427, 77.4597, -44.7212, 44.7215, -49.9999, -86.6026, 0.000112777, 1.60875, -7.77524, 335.71)
bind/20/name = &"mixamorig_LeftHandThumb4"
bind/20/bone = -1
bind/20/pose = Transform3D(38.7299, -22.3608, -89.4427, 77.4597, -44.7212, 44.7215, -49.9999, -86.6026, 9.09495e-05, 1.60865, -13.5698, 335.71)
bind/21/name = &"mixamorig_LeftHandIndex1"
bind/21/bone = -1
bind/21/pose = Transform3D(4.27364e-05, 1.56652e-06, -100, 100, -3.16651e-06, 4.67285e-05, 4.24015e-12, -100, 4.90744e-07, -5.08588, -174.99, 299.478)
bind/22/name = &"mixamorig_LeftHandIndex2"
bind/22/bone = -1
bind/22/pose = Transform3D(4.40478e-05, 5.10635e-06, -100, 100, -3.16651e-06, 4.80399e-05, 5.79937e-12, -100, -3.04909e-06, -5.0859, -182.053, 299.478)
bind/23/name = &"mixamorig_LeftHandIndex3"
bind/23/bone = -1
bind/23/pose = Transform3D(4.33923e-05, 4.4509e-06, -100, 100, -3.16651e-06, 4.73844e-05, 5.51495e-12, -100, -2.39364e-06, -5.08587, -188.548, 299.478)
bind/24/name = &"mixamorig_LeftHandIndex4"
bind/24/bone = -1
bind/24/pose = Transform3D(4.33923e-05, 4.4509e-06, -100, 100, -3.16651e-06, 4.73844e-05, 5.51495e-12, -100, -2.39364e-06, -5.08584, -195.142, 299.478)
bind/25/name = &"mixamorig_LeftHandRing1"
bind/25/bone = -1
bind/25/pose = Transform3D(4.35421e-05, 6.40099e-06, -100, 100, -3.16651e-06, 4.75342e-05, 6.38163e-12, -100, -4.34373e-06, -14.479, -171.984, 300.012)
bind/26/name = &"mixamorig_LeftHandRing2"
bind/26/bone = -1
bind/26/pose = Transform3D(4.49878e-05, 6.04632e-06, -100, 100, -3.16651e-06, 4.89799e-05, 6.22207e-12, -100, -3.98906e-06, -14.4789, -178.294, 300.012)
bind/27/name = &"mixamorig_LeftHandRing3"
bind/27/bone = -1
bind/27/pose = Transform3D(-0.000108406, -0.000147347, -100, 100, -3.1665e-06, -0.000104414, 1.66702e-10, -100, 0.000149405, -14.4782, -184.653, 300.012)
bind/28/name = &"mixamorig_LeftHandRing4"
bind/28/bone = -1
bind/28/pose = Transform3D(4.06522e-05, 1.71072e-06, -100, 100, -3.16659e-06, 4.46443e-05, -8.28545e-11, -100, 3.46547e-07, -14.4789, -191.691, 300.011)
bind/29/name = &"mixamorig_LeftHandPinky1"
bind/29/bone = -1
bind/29/pose = Transform3D(2.13955e-05, -9.76242e-06, -100, 100, -3.16651e-06, 2.53876e-05, 8.51037e-13, -100, 1.18197e-05, -19.0188, -168.406, 299.491)
bind/30/name = &"mixamorig_LeftHandPinky2"
bind/30/bone = -1
bind/30/pose = Transform3D(0.000229854, 0.000190912, -100, 100, -0.000738696, 0.000233845, -0.000735529, -100, -0.000188856, -19.0198, -174.94, 299.493)
bind/31/name = &"mixamorig_LeftHandPinky3"
bind/31/bone = -1
bind/31/pose = Transform3D(3.4283e-05, -4.65839e-06, -100, 100, -3.16654e-06, 3.82751e-05, -3.8009e-12, -100, 6.71569e-06, -19.0188, -179.091, 299.491)
bind/32/name = &"mixamorig_LeftHandPinky4"
bind/32/bone = -1
bind/32/pose = Transform3D(3.4283e-05, -4.65842e-06, -100, 100, -3.16654e-06, 3.82751e-05, -3.80091e-12, -100, 6.71572e-06, -19.0188, -184.655, 299.491)
bind/33/name = &"mixamorig_RightShoulder"
bind/33/bone = -1
bind/33/pose = Transform3D(-20.1629, 0.35292, 97.9456, -97.9306, 1.71404, -20.166, -1.74999, -99.9847, 1.80194e-05, 2.8144, -19.4598, 299.201)
bind/34/name = &"mixamorig_RightArm"
bind/34/bone = -1
bind/34/pose = Transform3D(8.68049e-05, -1.24537e-05, 100, -100, -1.86276e-07, 8.8915e-05, -3.72535e-07, -100, -1.15962e-05, 12.104, -39.589, 299.94)
bind/35/name = &"mixamorig_RightForeArm"
bind/35/bone = -1
bind/35/pose = Transform3D(7.96092e-05, -4.90495e-06, 100, -100, -5.58804e-07, 8.17193e-05, 2.57644e-13, -100, -4.0475e-06, 12.104, -95.4317, 299.94)
bind/36/name = &"mixamorig_RightHand"
bind/36/bone = -1
bind/36/pose = Transform3D(8.07296e-05, -6.02537e-06, 100, -100, -5.58804e-07, 8.28397e-05, -6.43239e-13, -100, -5.16792e-06, 12.1041, -145.745, 299.94)
bind/37/name = &"mixamorig_RightHandMiddle1"
bind/37/bone = -1
bind/37/pose = Transform3D(7.74089e-05, -2.70475e-06, 100, -100, -5.58804e-07, 7.95191e-05, 1.92722e-12, -100, -1.8473e-06, 12.1041, -171.811, 299.94)
bind/38/name = &"mixamorig_RightHandMiddle2"
bind/38/bone = -1
bind/38/pose = Transform3D(7.86091e-05, -3.90488e-06, 100, -100, -5.58804e-07, 8.07192e-05, 1.04055e-12, -100, -3.04743e-06, 12.1041, -177.971, 299.94)
bind/39/name = &"mixamorig_RightHandMiddle3"
bind/39/bone = -1
bind/39/pose = Transform3D(7.67034e-05, -1.9992e-06, 100, -100, -5.58804e-07, 7.88136e-05, 2.47705e-12, -100, -1.14175e-06, 12.104, -185.25, 299.94)
bind/40/name = &"mixamorig_RightHandMiddle4"
bind/40/bone = -1
bind/40/pose = Transform3D(7.67034e-05, -1.9992e-06, 100, -100, -5.58804e-07, 7.88136e-05, 2.47705e-12, -100, -1.14175e-06, 12.1041, -192.71, 299.94)
bind/41/name = &"mixamorig_RightHandThumb1"
bind/41/bone = -1
bind/41/pose = Transform3D(38.7301, 22.3611, 89.4425, -77.4593, -44.7216, 44.7218, 50.0004, -86.6023, -2.00089e-05, -0.744326, 14.7863, 333.975)
bind/42/name = &"mixamorig_RightHandThumb2"
bind/42/bone = -1
bind/42/pose = Transform3D(38.7302, 22.3611, 89.4425, -77.4593, -44.7216, 44.7218, 50.0004, -86.6023, -4.72937e-05, -0.744248, 4.43724, 333.976)
bind/43/name = &"mixamorig_RightHandThumb3"
bind/43/bone = -1
bind/43/pose = Transform3D(38.7302, 22.3611, 89.4425, -77.4594, -44.7214, 44.7219, 50.0002, -86.6024, 0.000150976, -0.744501, -4.13842, 333.976)
bind/44/name = &"mixamorig_RightHandThumb4"
bind/44/bone = -1
bind/44/pose = Transform3D(38.73, 22.3612, 89.4426, -77.4592, -44.7218, 44.7217, 50.0006, -86.6022, 5.82077e-05, -0.744883, -10.2759, 333.976)
bind/45/name = &"mixamorig_RightHandIndex1"
bind/45/bone = -1
bind/45/pose = Transform3D(8.07296e-05, -5.97738e-06, 100, -100, -5.58804e-07, 8.28397e-05, -6.04494e-13, -100, -5.11993e-06, 6.99748, -172.348, 299.393)
bind/46/name = &"mixamorig_RightHandIndex2"
bind/46/bone = -1
bind/46/pose = Transform3D(7.71745e-05, -2.47024e-06, 100, -100, -5.58804e-07, 7.92846e-05, 2.12874e-12, -100, -1.61279e-06, 6.99749, -179.441, 299.393)
bind/47/name = &"mixamorig_RightHandIndex3"
bind/47/bone = -1
bind/47/pose = Transform3D(7.77097e-05, -3.00546e-06, 100, -100, -5.58804e-07, 7.98198e-05, 1.72759e-12, -100, -2.14801e-06, 6.99748, -186.855, 299.393)
bind/48/name = &"mixamorig_RightHandIndex4"
bind/48/bone = -1
bind/48/pose = Transform3D(7.77097e-05, -3.00546e-06, 100, -100, -5.58804e-07, 7.98198e-05, 1.72759e-12, -100, -2.14801e-06, 6.99744, -192.378, 299.393)
bind/49/name = &"mixamorig_RightHandRing1"
bind/49/bone = -1
bind/49/pose = Transform3D(8.42064e-05, -8.73814e-06, 100, -100, -5.58805e-07, 8.63165e-05, -2.92757e-12, -100, -7.88069e-06, 16.0881, -169.833, 299.941)
bind/50/name = &"mixamorig_RightHandRing2"
bind/50/bone = -1
bind/50/pose = Transform3D(8.37108e-05, -9.00656e-06, 100, -100, 0.000445899, 8.58209e-05, -0.000446457, -100, -8.14873e-06, 16.0881, -176.691, 299.94)
bind/51/name = &"mixamorig_RightHandRing3"
bind/51/bone = -1
bind/51/pose = Transform3D(6.33971e-05, 1.13072e-05, 100, -100, -5.58695e-07, 6.55072e-05, -3.49916e-11, -100, 1.21646e-05, 16.088, -183.526, 299.941)
bind/52/name = &"mixamorig_RightHandRing4"
bind/52/bone = -1
bind/52/pose = Transform3D(0.000253585, -0.000178882, 100, -100, 0.000506614, 0.000255696, -0.000507173, -100, -0.000178023, 16.0889, -189.544, 299.94)
bind/53/name = &"mixamorig_RightHandPinky1"
bind/53/bone = -1
bind/53/pose = Transform3D(6.46733e-05, 1.04791e-05, 100, -100, -5.58803e-07, 6.67834e-05, 1.00308e-11, -100, 1.13366e-05, 20.6451, -166.735, 299.442)
bind/54/name = &"mixamorig_RightHandPinky2"
bind/54/bone = -1
bind/54/pose = Transform3D(0.000101329, -2.66244e-05, 100, -100, -5.58805e-07, 0.000103439, -2.16801e-11, -100, -2.5767e-05, 20.6453, -172.674, 299.442)
bind/55/name = &"mixamorig_RightHandPinky3"
bind/55/bone = -1
bind/55/pose = Transform3D(8.98217e-05, -1.51174e-05, 100, -100, -5.58805e-07, 9.19318e-05, -8.88232e-12, -100, -1.426e-05, 20.6452, -176.439, 299.442)
bind/56/name = &"mixamorig_RightHandPinky4"
bind/56/bone = -1
bind/56/pose = Transform3D(-8.98231e-05, 0.000164526, 100, -100, -0.000958654, -8.77114e-05, 0.000958095, -100, 0.000165384, 20.6444, -182.807, 299.444)
bind/57/name = &"mixamorig_LeftUpLeg"
bind/57/bone = -1
bind/57/pose = Transform3D(-99.9989, 0.47673, 0.00835485, -0.476803, -99.9831, -1.77224, -9.66054e-05, -1.77226, 99.9843, 17.5511, 195.39, 2.21604)
bind/58/name = &"mixamorig_LeftLeg"
bind/58/bone = -1
bind/58/pose = Transform3D(-99.9986, -0.525834, -0.0315128, 0.526778, -99.8177, -6.01202, 0.000156614, -6.0121, 99.8191, 18.6545, 109.769, 6.88281)
bind/59/name = &"mixamorig_LeftFoot"
bind/59/bone = -1
bind/59/pose = Transform3D(-99.6558, -5.47894, 6.22056, 8.2894, -65.8684, 74.7839, 1.77351e-05, 75.0422, 66.0959, 20.151, 18.7568, -14.9342)
bind/60/name = &"mixamorig_LeftToeBase"
bind/60/bone = -1
bind/60/pose = Transform3D(-99.9851, -0.0227067, -1.72832, -1.72847, 1.31393, 99.9764, 8.68106e-06, 99.9914, -1.31411, 21.5432, -18.5528, -3.02252)
bind/61/name = &"mixamorig_LeftToe_End"
bind/61/bone = -1
bind/61/pose = Transform3D(-99.9851, -0.022726, -1.72834, -1.72849, 1.31394, 99.9764, -1.00826e-05, 99.9914, -1.31412, 21.5432, -37.6176, -3.02251)
bind/62/name = &"mixamorig_RightUpLeg"
bind/62/bone = -1
bind/62/pose = Transform3D(-99.9979, -0.647505, 0.00783087, 0.647552, -99.9909, 1.18213, 0.00017401, 1.18215, 99.993, -17.2208, 194.856, -1.04611)
bind/63/name = &"mixamorig_RightLeg"
bind/63/bone = -1
bind/63/pose = Transform3D(-99.9976, 0.694097, 0.0420051, -0.695367, -99.8151, -6.03798, 1.62395e-05, -6.03812, 99.8175, -18.6954, 109.584, 6.89046)
bind/64/name = &"mixamorig_RightFoot"
bind/64/bone = -1
bind/64/pose = Transform3D(-99.5418, 6.2595, -7.22856, -9.56208, -65.1618, 75.2496, -1.09139e-05, 75.596, 65.4618, -20.3771, 18.3728, -15.1041)
bind/65/name = &"mixamorig_RightToeBase"
bind/65/bone = -1
bind/65/pose = Transform3D(-99.0345, -0.159739, -13.8615, -13.8624, 1.14128, 99.028, 1.17808e-05, 99.9934, -1.1524, -18.7761, -22.2602, -2.95062)
bind/66/name = &"mixamorig_RightToe_End"
bind/66/bone = -1
bind/66/pose = Transform3D(-99.0345, -0.159767, -13.8615, -13.8624, 1.14127, 99.028, -1.58735e-05, 99.9934, -1.1524, -18.7761, -41.9626, -2.95062)
[node name="Arms" type="Node3D"]
transform = Transform3D(-1, 0, -1.50996e-07, 0, 1, 0, 1.50996e-07, 0, -1, 0, 0, 0)
[node name="Pencil Case" type="MeshInstance3D" parent="."]
transform = Transform3D(0.98209, 0.177463, 0.0632861, 1.42223e-07, 0.335895, -0.941899, -0.18841, 0.92503, 0.32988, -0.376089, 1.33587, 0.356095)
cast_shadow = 0
mesh = SubResource("CylinderMesh_iro55")
skin = SubResource("Skin_cysku")

View File

@@ -87,3 +87,5 @@ surface_material_override/0 = SubResource("StandardMaterial3D_pfpgv")
shape = SubResource("ConcavePolygonShape3D_rit6o") shape = SubResource("ConcavePolygonShape3D_rit6o")
[node name="Players" type="Node" parent="."] [node name="Players" type="Node" parent="."]
[node name="Entities" type="Node" parent="."]

View File

@@ -0,0 +1,20 @@
[gd_scene load_steps=3 format=3 uid="uid://c475s3klxqoej"]
[ext_resource type="ArrayMesh" path="res://Assets/Models/Weapons/pen_base.res" id="1_clcko"]
[ext_resource type="ArrayMesh" path="res://Assets/Models/Weapons/pen_lid.res" id="2_0u0nh"]
[node name="Stylo" type="Bullet"]
transform = Transform3D(3, 0, 0, 0, 3, 0, 0, 0, 3, 0, -7.45058e-09, 0)
[node name="Armature" type="Node3D" parent="."]
transform = Transform3D(5, 0, 0, 0, 0.0178025, -4.99997, 0, 4.99997, 0.0178025, 0, 0, -0.0828303)
[node name="pen_base" type="MeshInstance3D" parent="Armature"]
transform = Transform3D(0.140708, 0, 0, 0, -1.6822e-08, 0.140708, 0, -0.140708, -1.6822e-08, -1.12406e-11, 0.00809256, -4.84818e-06)
mesh = ExtResource("1_clcko")
skeleton = NodePath("")
[node name="pen_lid" type="MeshInstance3D" parent="Armature/pen_base"]
transform = Transform3D(1.14449, 0, 0, 0, 1.14449, 0, 0, 0, 1.14449, 7.98797e-11, 5.07782e-10, -0.0671831)
mesh = ExtResource("2_0u0nh")
skeleton = NodePath("")

View File

@@ -57,3 +57,15 @@ escape={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
] ]
} }
shoot={
"deadzone": 0.5,
"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":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
]
}
[layer_names]
3d_physics/layer_1="World"
3d_physics/layer_2="No Team"
3d_physics/layer_3="Team 1"
3d_physics/layer_4="Team 2"

View File

@@ -0,0 +1,11 @@
#pragma once
#include <client/Player.h>
namespace blitz {
namespace PlayerFactory {
Player* CreateStudent();
} // namespace PlayerFactory
} // namespace blitz

View File

@@ -0,0 +1,11 @@
#pragma once
#include <client/Bullet.h>
namespace blitz {
namespace ProjectileFactory {
Bullet* CreatePen();
} // namespace ProjectileFactory
} // namespace blitz

View File

@@ -25,13 +25,15 @@ class World : public godot::Node3D, public protocol::PacketHandler {
void HandlePacket(const protocol::packets::PlayerJoin&) override; void HandlePacket(const protocol::packets::PlayerJoin&) override;
void HandlePacket(const protocol::packets::PlayerLeave&) override; void HandlePacket(const protocol::packets::PlayerLeave&) override;
void HandlePacket(const protocol::packets::PlayerShoot&) override;
protected: protected:
NetworkInterface* m_NetworkInterface; NetworkInterface* m_NetworkInterface;
godot::Node* m_Players; godot::Node* m_Players;
float m_PassedTime; float m_PassedTime;
virtual void AddProjectile(
PlayerID a_Shooter, const godot::Vector3& a_Position, const godot::Vector3& a_Rotation, const godot::Vector3& a_Velocity);
virtual void AddPlayer(PlayerID a_PlayerId, godot::String a_PlayerName); virtual void AddPlayer(PlayerID a_PlayerId, godot::String a_PlayerName);
virtual void RemovePlayer(PlayerID a_PlayerId); virtual void RemovePlayer(PlayerID a_PlayerId);
virtual void SetPlayerPositionAndRotation( virtual void SetPlayerPositionAndRotation(

View File

@@ -1,9 +1,9 @@
#pragma once #pragma once
#include <blitz/common/Types.h> #include <blitz/common/Types.h>
#include <vector>
#include <godot_cpp/variant/string.hpp> #include <godot_cpp/variant/string.hpp>
#include <godot_cpp/variant/vector3.hpp> #include <godot_cpp/variant/vector3.hpp>
#include <vector>
namespace blitz { namespace blitz {
namespace protocol { namespace protocol {
@@ -66,7 +66,12 @@ struct PlayerPositionAndRotation {
godot::Vector3 m_Velocity; godot::Vector3 m_Velocity;
}; };
struct PlayerShoot {}; struct PlayerShoot {
PlayerID m_Sender;
godot::Vector3 m_Position;
godot::Vector3 m_Rotation;
godot::Vector3 m_Velocity;
};
} // namespace data } // namespace data
} // namespace protocol } // namespace protocol

25
include/client/Bullet.h Normal file
View File

@@ -0,0 +1,25 @@
#pragma once
#include <godot_cpp/classes/node3d.hpp>
#include <godot_cpp/classes/ray_cast3d.hpp>
namespace blitz {
class Bullet : public godot::Node3D {
GDCLASS(Bullet, godot::Node3D)
protected:
static void _bind_methods();
public:
Bullet();
~Bullet();
void _process(float delta);
void _ready() override;
private:
bool m_Stuck;
void Destroy();
};
} // namespace blitz

View File

@@ -1,13 +1,14 @@
#pragma once #pragma once
#include <blitz/common/Types.h>
#include <godot_cpp/classes/animation_tree.hpp> #include <godot_cpp/classes/animation_tree.hpp>
#include <godot_cpp/classes/character_body3d.hpp> #include <godot_cpp/classes/character_body3d.hpp>
#include <godot_cpp/classes/node3d.hpp> #include <godot_cpp/classes/node3d.hpp>
#include <blitz/common/Types.h>
namespace blitz { namespace blitz {
class World; class World;
class PlayerController;
class Player : public godot::CharacterBody3D { class Player : public godot::CharacterBody3D {
@@ -22,7 +23,13 @@ class Player : public godot::CharacterBody3D {
void _ready() override; void _ready() override;
virtual void _physics_process(float delta); virtual void _physics_process(float delta);
void animate(float delta);
godot::Vector3 GetPosition() const;
void SetPosition(const godot::Vector3& a_Position);
godot::Vector3 GetVelocity() const;
void SetVelocity(const godot::Vector3& a_Velocity);
godot::Vector3 GetCameraRotation() const; godot::Vector3 GetCameraRotation() const;
void SetCameraRotation(const godot::Vector3& a_Rotation); void SetCameraRotation(const godot::Vector3& a_Rotation);
@@ -38,6 +45,11 @@ class Player : public godot::CharacterBody3D {
godot::Vector3 m_SnapVector; godot::Vector3 m_SnapVector;
PeerID m_PeerId; PeerID m_PeerId;
void SetModelVisible(bool visible);
void UpdateAnimation(float delta);
void BlendAnimation(const godot::String& a_AnimationName, float a_Goal, float a_Delta);
friend class World; friend class World;
friend class PlayerController;
}; };
} // namespace blitz } // namespace blitz

View File

@@ -5,32 +5,35 @@
namespace blitz { namespace blitz {
class FirstPersonPlayer : public Player { class NetworkInterface;
GDCLASS(FirstPersonPlayer, godot::CharacterBody3D)
class PlayerController : public godot::Node {
GDCLASS(PlayerController, godot::Node)
protected: protected:
static void _bind_methods(); static void _bind_methods();
public: public:
FirstPersonPlayer(); PlayerController();
~FirstPersonPlayer(); ~PlayerController();
// Godot overrides // Godot overrides
void _unhandled_input(const godot::Ref<godot::InputEvent>&); void _unhandled_input(const godot::Ref<godot::InputEvent>&);
void _physics_process(float delta) override; void _process(float delta);
void _ready() override; void _ready();
private: private:
godot::Camera3D* m_Camera; godot::Camera3D* m_Camera;
godot::Node3D* m_Head;
float m_BobTime; float m_BobTime;
float m_Speed; float m_Speed;
Player* m_Player;
godot::Node3D* m_Head;
NetworkInterface* m_NetworkInterface;
void UpdateBobbing(float delta); void UpdateBobbing(float delta);
void UpdateFOV(float delta); void UpdateFOV(float delta);
void UpdateCamera(const godot::InputEventMouseMotion&); void UpdateCamera(const godot::InputEventMouseMotion&);
void UpdatePosition(float delta); void UpdateVelocity(float delta);
void Shoot();
void UpdateAnimation(float delta);
}; };
} // namespace blitz } // namespace blitz

View File

@@ -0,0 +1,17 @@
#include <blitz/factory/PlayerFactory.h>
#include <godot_cpp/classes/packed_scene.hpp>
#include <godot_cpp/classes/resource_loader.hpp>
namespace blitz {
namespace PlayerFactory {
using namespace godot;
Player* CreateStudent() {
Ref<PackedScene> scene = ResourceLoader::get_singleton()->load("res://Scenes/Characters/remy.tscn");
return Object::cast_to<Player>(scene->instantiate());
}
} // namespace PlayerFactory
} // namespace blitz

View File

@@ -0,0 +1,17 @@
#include <blitz/factory/ProjectileFactory.h>
#include <godot_cpp/classes/packed_scene.hpp>
#include <godot_cpp/classes/resource_loader.hpp>
namespace blitz {
namespace ProjectileFactory {
using namespace godot;
Bullet* CreatePen() {
Ref<PackedScene> bulletScene = ResourceLoader::get_singleton()->load("res://Scenes/Weapons/pen.tscn");
return Object::cast_to<Bullet>(bulletScene->instantiate());
}
} // namespace ProjectileFactory
} // namespace blitz

View File

@@ -1,12 +1,12 @@
#include <blitz/godot/World.h> #include <blitz/godot/World.h>
#include <blitz/factory/PlayerFactory.h>
#include <blitz/factory/ProjectileFactory.h>
#include <blitz/godot/NetworkInterface.h> #include <blitz/godot/NetworkInterface.h>
#include <client/FirstPersonPlayer.h>
#include <client/Player.h> #include <client/Player.h>
#include <client/PlayerController.h>
#include <godot_cpp/classes/engine.hpp> #include <godot_cpp/classes/engine.hpp>
#include <godot_cpp/classes/multiplayer_api.hpp> #include <godot_cpp/classes/multiplayer_api.hpp>
#include <godot_cpp/classes/packed_scene.hpp>
#include <godot_cpp/classes/resource_loader.hpp>
#include <godot_cpp/variant/utility_functions.hpp> #include <godot_cpp/variant/utility_functions.hpp>
@@ -14,9 +14,6 @@ using namespace godot;
namespace blitz { namespace blitz {
static const char FirstPersonPlayerScenePath[] = "res://Scenes/Characters/first_person_player.tscn";
static const char PlayerScenePath[] = "res://Scenes/Characters/player.tscn";
void World::_bind_methods() {} void World::_bind_methods() {}
void World::_ready() { void World::_ready() {
@@ -32,6 +29,7 @@ void World::_ready() {
m_NetworkInterface->RegisterHandler(protocol::PacketType::PlayerJoin, *this); m_NetworkInterface->RegisterHandler(protocol::PacketType::PlayerJoin, *this);
m_NetworkInterface->RegisterHandler(protocol::PacketType::PlayerLeave, *this); m_NetworkInterface->RegisterHandler(protocol::PacketType::PlayerLeave, *this);
m_NetworkInterface->RegisterHandler(protocol::PacketType::PlayerPositionAndRotation, *this); m_NetworkInterface->RegisterHandler(protocol::PacketType::PlayerPositionAndRotation, *this);
m_NetworkInterface->RegisterHandler(protocol::PacketType::PlayerShoot, *this);
} }
@@ -64,20 +62,23 @@ void World::HandlePacket(const protocol::packets::PlayerLeave& a_PlayerLeave) {
RemovePlayer(a_PlayerLeave.m_Data.m_PlayerId); RemovePlayer(a_PlayerLeave.m_Data.m_PlayerId);
} }
void World::HandlePacket(const protocol::packets::PlayerShoot& a_PlayerShoot) {
const protocol::data::PlayerShoot& playerShoot = a_PlayerShoot.m_Data;
AddProjectile(playerShoot.m_Sender, playerShoot.m_Position, playerShoot.m_Rotation, playerShoot.m_Velocity);
}
void World::AddPlayer(PlayerID a_PlayerId, String a_PlayerName) { void World::AddPlayer(PlayerID a_PlayerId, String a_PlayerName) {
UtilityFunctions::print("New Player with id : ", a_PlayerId, " and name ", a_PlayerName); UtilityFunctions::print("New Player with id : ", a_PlayerId, " and name ", a_PlayerName);
Player* player = PlayerFactory::CreateStudent();
player->set_name(UtilityFunctions::var_to_str(a_PlayerId));
player->m_PeerId = a_PlayerId;
m_Players->add_child(player);
if (a_PlayerId == get_multiplayer()->get_unique_id()) { if (a_PlayerId == get_multiplayer()->get_unique_id()) {
Ref<PackedScene> serverScene = ResourceLoader::get_singleton()->load(FirstPersonPlayerScenePath); PlayerController* playerController = memnew(PlayerController);
FirstPersonPlayer* player = Object::cast_to<FirstPersonPlayer>(serverScene->instantiate()); player->add_child(playerController);
player->set_name(UtilityFunctions::var_to_str(a_PlayerId));
player->m_PeerId = a_PlayerId;
m_Players->add_child(player);
} else {
Ref<PackedScene> serverScene = ResourceLoader::get_singleton()->load(PlayerScenePath);
Player* player = Object::cast_to<Player>(serverScene->instantiate());
player->set_name(UtilityFunctions::var_to_str(a_PlayerId));
player->m_PeerId = a_PlayerId;
m_Players->add_child(player);
} }
} }
@@ -93,10 +94,28 @@ void World::SetPlayerPositionAndRotation(
PlayerID a_PlayerId, const Vector3& a_Position, const Vector3& a_Rotation, const godot::Vector3& a_Velocity) { PlayerID a_PlayerId, const Vector3& a_Position, const Vector3& a_Rotation, const godot::Vector3& a_Velocity) {
Player* player = GetPlayerById(a_PlayerId); Player* player = GetPlayerById(a_PlayerId);
if (player) { if (player) {
player->set_position(a_Position); player->SetPosition(a_Position);
player->SetCameraRotation(a_Rotation); player->SetCameraRotation(a_Rotation);
player->set_velocity(a_Velocity); player->SetVelocity(a_Velocity);
} }
} }
void World::AddProjectile(
PlayerID a_Shooter, const godot::Vector3& a_Position, const godot::Vector3& a_Rotation, const godot::Vector3& a_Velocity) {
Player* shooter = GetPlayerById(a_Shooter);
if (!shooter)
return;
Bullet* bullet = ProjectileFactory::CreatePen();
bullet->set_position(a_Position);
Transform3D bulletTransform = bullet->get_transform();
bulletTransform.basis.set_euler(a_Rotation);
bullet->set_transform(bulletTransform);
Node* entities = get_node<Node>("WorldContent/Entities");
entities->add_child(bullet);
}
} // namespace blitz } // namespace blitz

View File

@@ -272,9 +272,13 @@ void Deserializer::DeserializePacketData(data::PlayerPositionAndRotation& a_Pack
void Serializer::SerializePacketData(const data::PlayerShoot& a_Packet) {} void Serializer::SerializePacketData(const data::PlayerShoot& a_Packet) {
m_Buffer << a_Packet.m_Sender << a_Packet.m_Position << a_Packet.m_Rotation << a_Packet.m_Velocity;
}
void Deserializer::DeserializePacketData(data::PlayerShoot& a_Packet) {} void Deserializer::DeserializePacketData(data::PlayerShoot& a_Packet) {
m_Buffer >> a_Packet.m_Sender >> a_Packet.m_Position >> a_Packet.m_Rotation >> a_Packet.m_Velocity;
}

63
src/client/Bullet.cpp Normal file
View File

@@ -0,0 +1,63 @@
#include <client/Bullet.h>
#include <godot_cpp/classes/engine.hpp>
#include <godot_cpp/classes/geometry_instance3d.hpp>
#include <godot_cpp/classes/physics_direct_space_state3d.hpp>
#include <godot_cpp/classes/physics_ray_query_parameters3d.hpp>
#include <godot_cpp/classes/timer.hpp>
#include <godot_cpp/classes/world3d.hpp>
#include <godot_cpp/variant/utility_functions.hpp>
namespace blitz {
using namespace godot;
static constexpr float SPEED = 20.0f;
static constexpr float MaxAlive = 10.0f;
void Bullet::_bind_methods() {}
Bullet::Bullet() : m_Stuck(false) {}
void Bullet::_ready() {
Timer* timer = memnew(Timer);
add_child(timer);
timer->connect("timeout", callable_mp(this, &Bullet::Destroy));
timer->set_wait_time(MaxAlive);
timer->start();
}
Bullet::~Bullet() {}
void Bullet::_process(float a_Delta) {
if (Engine::get_singleton()->is_editor_hint()) {
return;
}
auto* head = get_node<Node3D>("Armature");
if (m_Stuck)
return;
Vector3 start = get_position();
Vector3 finish = start + get_transform().basis.xform(Vector3{0, 0, -SPEED * a_Delta});
auto query = PhysicsRayQueryParameters3D::create(start, finish, 1);
auto result = get_world_3d()->get_direct_space_state()->intersect_ray(query);
if (result.is_empty()) {
set_position(finish);
return;
}
m_Stuck = true;
Vector3 intersectPoint = result["position"];
head->set_global_position(intersectPoint);
}
void Bullet::Destroy() {
queue_free();
}
} // namespace blitz

View File

@@ -36,7 +36,7 @@ void ClientWorld::UpdatePlayerPos() {
Player* player = GetPlayerById(get_multiplayer()->get_unique_id()); Player* player = GetPlayerById(get_multiplayer()->get_unique_id());
if (player) { if (player) {
m_NetworkInterface->BroadcastPacket(protocol::packets::PlayerPositionAndRotation( m_NetworkInterface->BroadcastPacket(protocol::packets::PlayerPositionAndRotation(
{get_multiplayer()->get_unique_id(), player->get_position(), player->GetCameraRotation(), player->get_velocity()})); {get_multiplayer()->get_unique_id(), player->GetPosition(), player->GetCameraRotation(), player->GetVelocity()}));
} }
} }
@@ -44,7 +44,7 @@ void ClientWorld::HandlePacket(const protocol::packets::PlayerPositionAndRotatio
const auto& data = a_PlayerPos.m_Data; const auto& data = a_PlayerPos.m_Data;
if (data.m_Player == get_multiplayer()->get_unique_id()) { if (data.m_Player == get_multiplayer()->get_unique_id()) {
Player* player = GetPlayerById(get_multiplayer()->get_unique_id()); Player* player = GetPlayerById(get_multiplayer()->get_unique_id());
if (player && (a_PlayerPos.m_Data.m_Position - player->get_position()).length() > 10) { if (player && (a_PlayerPos.m_Data.m_Position - player->GetPosition()).length() > 10) {
SetPlayerPositionAndRotation(data.m_Player, data.m_Position, data.m_Rotation, data.m_Velocity); SetPlayerPositionAndRotation(data.m_Player, data.m_Position, data.m_Rotation, data.m_Velocity);
godot::UtilityFunctions::print("Teleported to : ", data.m_Position); godot::UtilityFunctions::print("Teleported to : ", data.m_Position);
} }

View File

@@ -1,179 +0,0 @@
#include <client/FirstPersonPlayer.h>
#include <godot_cpp/classes/camera3d.hpp>
#include <godot_cpp/classes/engine.hpp>
#include <godot_cpp/classes/input.hpp>
#include <godot_cpp/classes/input_event_mouse_motion.hpp>
#include <godot_cpp/classes/input_map.hpp>
#include <godot_cpp/core/math.hpp>
#include <godot_cpp/variant/utility_functions.hpp>
using namespace godot;
namespace blitz {
static constexpr float WALK_SPEED = 5.0f;
static constexpr float SPRINT_SPEED = 7.0f;
static constexpr float JUMP_VELOCITY = 4.5f;
static constexpr float GRAVITY = 9.81f;
static constexpr float SENSITIVITY = 0.003f;
static constexpr float BOB_FREQ = 2.0f;
static constexpr float BOB_AMP = 0.08f;
static constexpr float AIR_MOVEMENT = 3.0f;
static constexpr float GROUND_FRICTION = 7.0f;
static constexpr float BASE_FOV = 75.0f;
static constexpr float FOV_CHANGE = 1.5f;
static constexpr float FOV_TRANSITION = 8.0f;
static constexpr float MIN_FOV_VELOCITY = 0.5;
static constexpr float MAX_FOV_VELOCITY = SPRINT_SPEED * 2.0f;
static const float LerpValue = 0.10;
static const float AnimationBlend = 7.0;
void FirstPersonPlayer::_bind_methods() {}
FirstPersonPlayer::FirstPersonPlayer() : Player(), m_BobTime(0) {}
FirstPersonPlayer::~FirstPersonPlayer() {}
void FirstPersonPlayer::_ready() {
InputMap::get_singleton()->load_from_project_settings();
if (!Engine::get_singleton()->is_editor_hint()) {
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED);
}
m_Head = Object::cast_to<Node3D>(find_child("Head"));
m_Camera = Object::cast_to<Camera3D>(m_Head->find_child("Camera"));
m_AnimationTree = Object::cast_to<AnimationTree>(find_child("AnimationTree"));
m_Mesh = Object::cast_to<Node3D>(find_child("Mesh"));
set_position({0, 0, 0});
set_velocity({0, 0, 0});
}
void FirstPersonPlayer::_unhandled_input(const godot::Ref<godot::InputEvent>& a_Event) {
auto* event = Object::cast_to<InputEventMouseMotion>(a_Event.ptr());
if (event)
UpdateCamera(*event);
// TODO: remove
if (Input::get_singleton()->is_action_just_pressed("escape")) {
Input::MouseMode current = Input::get_singleton()->get_mouse_mode();
Input::get_singleton()->set_mouse_mode(
(current == Input::MOUSE_MODE_CAPTURED) ? Input::MOUSE_MODE_VISIBLE : Input::MOUSE_MODE_CAPTURED);
}
}
void FirstPersonPlayer::_physics_process(float a_Delta) {
#if DEBUG_ENABLED
if (Engine::get_singleton()->is_editor_hint()) {
return;
}
#endif
auto* Input = Input::get_singleton();
if (!is_on_floor())
set_velocity(get_velocity() - Vector3{0, GRAVITY * a_Delta, 0});
if (Input->is_action_pressed("jump") && is_on_floor())
set_velocity({get_velocity().x, JUMP_VELOCITY, get_velocity().z});
m_Speed = Input->is_action_pressed("sprint") ? SPRINT_SPEED : WALK_SPEED;
UpdatePosition(a_Delta);
UpdateFOV(a_Delta);
UpdateBobbing(a_Delta);
move_and_slide();
UpdateAnimation(a_Delta);
}
void FirstPersonPlayer::UpdateBobbing(float a_Delta) {
m_BobTime += a_Delta * get_velocity().length() * is_on_floor();
Vector3 newPos{static_cast<float>(Math::cos(m_BobTime * BOB_FREQ / 2.0) * BOB_AMP),
static_cast<float>(Math::sin(m_BobTime * BOB_FREQ) * BOB_AMP), 0};
m_Camera->set_transform({m_Camera->get_transform().basis, newPos});
}
void FirstPersonPlayer::UpdateCamera(const InputEventMouseMotion& a_Event) {
m_Head->rotate_y(-a_Event.get_relative().x * SENSITIVITY);
m_Mesh->rotate_y(-a_Event.get_relative().x * SENSITIVITY);
m_Camera->rotate_x(-a_Event.get_relative().y * SENSITIVITY);
float rotationX = m_Camera->get_rotation().x;
rotationX = CLAMP(rotationX, Math::deg_to_rad(-80.0), Math::deg_to_rad(80.0));
m_Camera->set_rotation({rotationX, get_rotation().y, get_rotation().z});
}
void FirstPersonPlayer::UpdatePosition(float delta) {
auto* Input = Input::get_singleton();
Vector2 inputDirection = Input->get_vector("move_left", "move_right", "move_forwards", "move_backwards");
Vector3 direction = (m_Head->get_transform().basis.xform(Vector3(inputDirection.x, 0, inputDirection.y))).normalized();
if (is_on_floor()) {
if (!direction.is_zero_approx()) {
set_velocity({direction.x * m_Speed, get_velocity().y, direction.z * m_Speed});
} else {
set_velocity({Math::lerp(static_cast<float>(get_velocity().x), static_cast<float>(direction.x * m_Speed),
static_cast<float>(delta * GROUND_FRICTION)),
get_velocity().y,
Math::lerp(static_cast<float>(get_velocity().z), static_cast<float>(direction.z * m_Speed),
static_cast<float>(delta * GROUND_FRICTION))});
}
} else {
set_velocity({Math::lerp(static_cast<float>(get_velocity().x), static_cast<float>(direction.x * m_Speed),
static_cast<float>(delta * AIR_MOVEMENT)),
get_velocity().y,
Math::lerp(static_cast<float>(get_velocity().z), static_cast<float>(direction.z * m_Speed),
static_cast<float>(delta * AIR_MOVEMENT))});
}
if (!direction.is_zero_approx()) {
godot::Vector3 newRotation = m_Mesh->get_rotation();
newRotation.y = godot::UtilityFunctions::lerp_angle(
newRotation.y, godot::UtilityFunctions::atan2(get_velocity().x, get_velocity().z), LerpValue);
m_Mesh->set_rotation(newRotation);
}
}
void FirstPersonPlayer::UpdateFOV(float a_Delta) {
float velocityClamped = Math::clamp(get_velocity().length(), MIN_FOV_VELOCITY, MAX_FOV_VELOCITY);
float targetFOV = BASE_FOV + FOV_CHANGE * velocityClamped;
m_Camera->set_fov(Math::lerp(static_cast<float>(m_Camera->get_fov()), targetFOV, a_Delta * FOV_TRANSITION));
}
void FirstPersonPlayer::UpdateAnimation(float delta) {
if (is_on_floor()) {
m_AnimationTree->set("parameters/ground_air_transition/transition_request", "grounded");
if (get_velocity().length() > 0.2f) {
if (m_Speed == SPRINT_SPEED) {
m_AnimationTree->set("parameters/iwr_blend/blend_amount",
UtilityFunctions::lerp(m_AnimationTree->get("parameters/iwr_blend/blend_amount"), 1.0, delta * AnimationBlend));
} else {
m_AnimationTree->set("parameters/iwr_blend/blend_amount",
UtilityFunctions::lerp(m_AnimationTree->get("parameters/iwr_blend/blend_amount"), 0.0, delta * AnimationBlend));
}
} else {
m_AnimationTree->set("parameters/iwr_blend/blend_amount",
UtilityFunctions::lerp(m_AnimationTree->get("parameters/iwr_blend/blend_amount"), -1.0, delta * AnimationBlend));
}
} else {
m_AnimationTree->set("parameters/ground_air_transition/transition_request", "air");
}
}
} // namespace blitz

View File

@@ -3,6 +3,8 @@
#include <godot_cpp/classes/engine.hpp> #include <godot_cpp/classes/engine.hpp>
#include <godot_cpp/classes/input.hpp> #include <godot_cpp/classes/input.hpp>
#include <godot_cpp/classes/input_map.hpp> #include <godot_cpp/classes/input_map.hpp>
#include <godot_cpp/classes/mesh_instance3d.hpp>
#include <godot_cpp/classes/skeleton3d.hpp>
#include <godot_cpp/core/class_db.hpp> #include <godot_cpp/core/class_db.hpp>
#include <godot_cpp/variant/utility_functions.hpp> #include <godot_cpp/variant/utility_functions.hpp>
@@ -20,21 +22,23 @@ using namespace godot;
void Player::_bind_methods() {} void Player::_bind_methods() {}
Player::Player() : m_PeerId(0) { Player::Player() : m_PeerId(0) {}
// we set the player to an invalid position
set_position({-99999, -999999, -999999});
}
Player::~Player() {} Player::~Player() {}
void Player::_ready() { void Player::_ready() {
godot::InputMap::get_singleton()->load_from_project_settings(); if (Engine::get_singleton()->is_editor_hint()) {
m_Mesh = Object::cast_to<godot::Node3D>(find_child("Mesh")); return;
m_AnimationTree = Object::cast_to<godot::AnimationTree>(find_child("AnimationTree")); }
DEV_ASSERT(m_Mesh);
DEV_ASSERT(m_AnimationTree);
animate(0); // we set the player to an invalid position
set_position({-99999, -999999, -999999});
m_Mesh = get_node<Node3D>("Armature");
DEV_ASSERT(m_Mesh);
m_AnimationTree = get_node<AnimationTree>("AnimationTree");
DEV_ASSERT(m_AnimationTree);
} }
void Player::_physics_process(float delta) { void Player::_physics_process(float delta) {
@@ -42,41 +46,76 @@ void Player::_physics_process(float delta) {
return; return;
move_and_slide(); move_and_slide();
animate(delta); UpdateAnimation(delta);
} }
void Player::animate(float delta) { Vector3 Player::GetPosition() const {
if (is_on_floor()) { return get_position();
m_AnimationTree->set("parameters/ground_air_transition/transition_request", "grounded"); }
float speed = get_velocity().length(); void Player::SetPosition(const Vector3& a_Position) {
set_position(a_Position);
}
if (speed > 0.2f) { Vector3 Player::GetVelocity() const {
if (speed >= RunSpeed) { return get_velocity();
m_AnimationTree->set("parameters/iwr_blend/blend_amount", }
godot::UtilityFunctions::lerp(
m_AnimationTree->get("parameters/iwr_blend/blend_amount"), 1.0, delta * AnimationBlend)); void Player::SetVelocity(const Vector3& a_Velocity) {
set_velocity(a_Velocity);
}
void Player::UpdateAnimation(float a_Delta) {
Vector3 velocity = get_velocity();
float angle = get_rotation().y;
Vector3 direction = velocity.rotated({0, 1, 0}, -angle);
if (direction.length() < 1.0f) {
direction.zero();
} else { } else {
m_AnimationTree->set("parameters/iwr_blend/blend_amount", direction.normalize();
godot::UtilityFunctions::lerp(
m_AnimationTree->get("parameters/iwr_blend/blend_amount"), 0.0, delta * AnimationBlend));
} }
} else {
m_AnimationTree->set("parameters/iwr_blend/blend_amount", Vector2 inputDirection = Input::get_singleton()->get_vector("move_left", "move_right", "move_forwards", "move_backwards");
godot::UtilityFunctions::lerp(
m_AnimationTree->get("parameters/iwr_blend/blend_amount"), -1.0, delta * AnimationBlend)); BlendAnimation("parameters/Movement/Side/blend_amount", direction.x, a_Delta);
} BlendAnimation("parameters/Movement/Straight/blend_amount", direction.z, a_Delta);
} else {
m_AnimationTree->set("parameters/ground_air_transition/transition_request", "air");
float ratio = 0.5f - (UtilityFunctions::absf(direction.z) - UtilityFunctions::absf(direction.x)) * 0.5f;
BlendAnimation("parameters/Movement/Walking/blend_amount", ratio, a_Delta);
m_AnimationTree->set("parameters/conditions/jump", !is_on_floor() && get_velocity().y > 0.0f);
m_AnimationTree->set("parameters/conditions/is_on_floor", is_on_floor());
}
void Player::BlendAnimation(const godot::String& a_AnimationName, float a_Goal, float a_Delta) {
m_AnimationTree->set(
a_AnimationName, UtilityFunctions::lerp(m_AnimationTree->get(a_AnimationName), a_Goal, a_Delta * AnimationBlend));
}
void Player::SetModelVisible(bool a_Visible) {
auto* skeleton = m_Mesh->get_node<Skeleton3D>("Skeleton3D");
for (int i = 0; i < skeleton->get_child_count(); i++) {
auto* bodyPart = Object::cast_to<MeshInstance3D>(skeleton->get_child(i));
if (bodyPart)
bodyPart->set_cast_shadows_setting(a_Visible
? GeometryInstance3D::ShadowCastingSetting::SHADOW_CASTING_SETTING_ON
: GeometryInstance3D::ShadowCastingSetting::SHADOW_CASTING_SETTING_SHADOWS_ONLY);
} }
// TODO: dirty, make it recursive
auto* pencilCase = m_Mesh->get_node<MeshInstance3D>("Skeleton3D/Hand/Pencil Case");
pencilCase->set_cast_shadows_setting(a_Visible ? GeometryInstance3D::ShadowCastingSetting::SHADOW_CASTING_SETTING_ON
: GeometryInstance3D::ShadowCastingSetting::SHADOW_CASTING_SETTING_SHADOWS_ONLY);
} }
Vector3 Player::GetCameraRotation() const { Vector3 Player::GetCameraRotation() const {
return m_Mesh->get_rotation(); return get_rotation();
} }
void Player::SetCameraRotation(const Vector3& a_Rotation) { void Player::SetCameraRotation(const Vector3& a_Rotation) {
m_Mesh->set_rotation(a_Rotation); set_rotation(a_Rotation);
} }
} // namespace blitz } // namespace blitz

View File

@@ -0,0 +1,172 @@
#include <client/PlayerController.h>
#include <blitz/factory/ProjectileFactory.h>
#include <blitz/godot/NetworkInterface.h>
#include <godot_cpp/classes/camera3d.hpp>
#include <godot_cpp/classes/engine.hpp>
#include <godot_cpp/classes/input.hpp>
#include <godot_cpp/classes/input_event_mouse_motion.hpp>
#include <godot_cpp/classes/input_map.hpp>
#include <godot_cpp/core/math.hpp>
#include <godot_cpp/variant/utility_functions.hpp>
using namespace godot;
namespace blitz {
static constexpr float WALK_SPEED = 5.0f;
static constexpr float SPRINT_SPEED = 7.0f;
static constexpr float JUMP_VELOCITY = 4.5f;
static constexpr float GRAVITY = 9.81f;
static constexpr float SENSITIVITY = 0.003f;
static constexpr float BOB_FREQ = 2.0f;
static constexpr float BOB_AMP = 0.08f;
static constexpr float AIR_MOVEMENT = 3.0f;
static constexpr float GROUND_FRICTION = 7.0f;
static constexpr float BASE_FOV = 75.0f;
static constexpr float FOV_CHANGE = 1.5f;
static constexpr float FOV_TRANSITION = 8.0f;
static constexpr float MIN_FOV_VELOCITY = 0.5;
static constexpr float MAX_FOV_VELOCITY = SPRINT_SPEED * 2.0f;
static const float LerpValue = 0.10;
static const float AnimationBlend = 7.0;
void PlayerController::_bind_methods() {}
PlayerController::PlayerController() : m_BobTime(0) {}
PlayerController::~PlayerController() {}
void PlayerController::_ready() {
InputMap::get_singleton()->load_from_project_settings();
if (!Engine::get_singleton()->is_editor_hint()) {
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED);
} else {
return;
}
m_Player = Object::cast_to<Player>(get_parent());
m_Head = m_Player->get_node<Node3D>("Head");
DEV_ASSERT(m_Head);
m_Head->set_visible(true);
m_Camera = memnew(Camera3D);
m_Camera->set_name("FirstPersonCamera");
m_Head->add_child(m_Camera);
m_Camera->make_current();
m_Player->SetModelVisible(false);
m_Player->SetPosition({0, 1, 0});
m_Player->SetVelocity({0, 0, 0});
m_NetworkInterface = m_Player->get_node<NetworkInterface>("../../../../Network");
DEV_ASSERT(m_NetworkInterface);
}
void PlayerController::_unhandled_input(const godot::Ref<godot::InputEvent>& a_Event) {
auto* event = Object::cast_to<InputEventMouseMotion>(a_Event.ptr());
if (event)
UpdateCamera(*event);
// TODO: remove
if (Input::get_singleton()->is_action_just_pressed("escape")) {
Input::MouseMode current = Input::get_singleton()->get_mouse_mode();
Input::get_singleton()->set_mouse_mode(
(current == Input::MOUSE_MODE_CAPTURED) ? Input::MOUSE_MODE_VISIBLE : Input::MOUSE_MODE_CAPTURED);
}
}
void PlayerController::_process(float a_Delta) {
#if DEBUG_ENABLED
if (Engine::get_singleton()->is_editor_hint()) {
return;
}
#endif
auto* Input = Input::get_singleton();
if (!m_Player->is_on_floor())
m_Player->SetVelocity(m_Player->GetVelocity() - Vector3{0, GRAVITY * a_Delta, 0});
if (Input->is_action_pressed("jump") && m_Player->is_on_floor())
m_Player->SetVelocity({m_Player->GetVelocity().x, JUMP_VELOCITY, m_Player->GetVelocity().z});
m_Speed = Input->is_action_pressed("sprint") ? SPRINT_SPEED : WALK_SPEED;
UpdateFOV(a_Delta);
UpdateBobbing(a_Delta);
UpdateVelocity(a_Delta);
Shoot();
}
void PlayerController::Shoot() {
if (Input::get_singleton()->is_action_pressed("shoot")) {
// we don't use velocity yet
protocol::packets::PlayerShoot packet(
{m_Player->GetId(), m_Camera->get_global_position(), m_Camera->get_global_transform().basis.get_euler(), {}});
m_NetworkInterface->BroadcastPacket(packet);
}
}
void PlayerController::UpdateBobbing(float a_Delta) {
m_BobTime += a_Delta * m_Player->GetVelocity().length() * m_Player->is_on_floor();
Vector3 newPos{static_cast<float>(Math::cos(m_BobTime * BOB_FREQ / 2.0) * BOB_AMP),
static_cast<float>(Math::sin(m_BobTime * BOB_FREQ) * BOB_AMP), 0};
// m_Camera->set_transform({m_Camera->get_transform().basis, newPos});
}
void PlayerController::UpdateCamera(const InputEventMouseMotion& a_Event) {
m_Player->rotate_y(-a_Event.get_relative().x * SENSITIVITY);
m_Head->rotate_x(-a_Event.get_relative().y * SENSITIVITY);
float rotationX = m_Head->get_rotation().x;
rotationX = CLAMP(rotationX, Math::deg_to_rad(-80.0), Math::deg_to_rad(80.0));
m_Head->set_rotation({rotationX, m_Head->get_rotation().y, m_Head->get_rotation().z});
}
void PlayerController::UpdateVelocity(float delta) {
auto* Input = Input::get_singleton();
Vector2 inputDirection = Input->get_vector("move_left", "move_right", "move_forwards", "move_backwards");
Vector3 direction = (m_Player->get_transform().basis.xform(Vector3(inputDirection.x, 0, inputDirection.y))).normalized();
if (m_Player->is_on_floor()) {
if (!direction.is_zero_approx()) {
m_Player->SetVelocity({direction.x * m_Speed, m_Player->GetVelocity().y, direction.z * m_Speed});
} else {
m_Player->SetVelocity({Math::lerp(static_cast<float>(m_Player->GetVelocity().x), static_cast<float>(direction.x * m_Speed),
static_cast<float>(delta * GROUND_FRICTION)),
m_Player->GetVelocity().y,
Math::lerp(static_cast<float>(m_Player->GetVelocity().z), static_cast<float>(direction.z * m_Speed),
static_cast<float>(delta * GROUND_FRICTION))});
}
} else {
m_Player->SetVelocity({Math::lerp(static_cast<float>(m_Player->GetVelocity().x), static_cast<float>(direction.x * m_Speed),
static_cast<float>(delta * AIR_MOVEMENT)),
m_Player->GetVelocity().y,
Math::lerp(static_cast<float>(m_Player->GetVelocity().z), static_cast<float>(direction.z * m_Speed),
static_cast<float>(delta * AIR_MOVEMENT))});
}
}
void PlayerController::UpdateFOV(float a_Delta) {
float velocityClamped = Math::clamp(m_Player->GetVelocity().length(), MIN_FOV_VELOCITY, MAX_FOV_VELOCITY);
float targetFOV = BASE_FOV + FOV_CHANGE * velocityClamped;
m_Camera->set_fov(Math::lerp(static_cast<float>(m_Camera->get_fov()), targetFOV, a_Delta * FOV_TRANSITION));
}
} // namespace blitz

View File

@@ -1,9 +1,10 @@
#include <blitz/godot/NetworkInterface.h> #include <blitz/godot/NetworkInterface.h>
#include <client/Bullet.h>
#include <client/ClientWorld.h> #include <client/ClientWorld.h>
#include <client/FirstPersonPlayer.h>
#include <client/Main.h> #include <client/Main.h>
#include <client/MainMenu.h> #include <client/MainMenu.h>
#include <client/Player.h> #include <client/Player.h>
#include <client/PlayerController.h>
#include <server/Server.h> #include <server/Server.h>
#include <server/ServerWorld.h> #include <server/ServerWorld.h>
@@ -15,7 +16,7 @@ using namespace godot;
static void RegisterClasses() { static void RegisterClasses() {
GDREGISTER_CLASS(blitz::Player); GDREGISTER_CLASS(blitz::Player);
GDREGISTER_CLASS(blitz::FirstPersonPlayer); GDREGISTER_CLASS(blitz::PlayerController);
GDREGISTER_CLASS(blitz::MainMenu); GDREGISTER_CLASS(blitz::MainMenu);
GDREGISTER_CLASS(blitz::Main); GDREGISTER_CLASS(blitz::Main);
GDREGISTER_CLASS(blitz::NetworkInterface); GDREGISTER_CLASS(blitz::NetworkInterface);
@@ -23,6 +24,7 @@ static void RegisterClasses() {
GDREGISTER_ABSTRACT_CLASS(blitz::World); GDREGISTER_ABSTRACT_CLASS(blitz::World);
GDREGISTER_CLASS(blitz::ClientWorld); GDREGISTER_CLASS(blitz::ClientWorld);
GDREGISTER_CLASS(blitz::ServerWorld); GDREGISTER_CLASS(blitz::ServerWorld);
GDREGISTER_CLASS(blitz::Bullet);
} }
static void initialize_blitz_module(ModuleInitializationLevel p_level) { static void initialize_blitz_module(ModuleInitializationLevel p_level) {

View File

@@ -33,7 +33,7 @@ void ServerWorld::SyncPlayersPos() {
Player* player = Object::cast_to<Player>(m_Players->get_child(i)); Player* player = Object::cast_to<Player>(m_Players->get_child(i));
DEV_ASSERT(player); DEV_ASSERT(player);
m_NetworkInterface->BroadcastPacket(protocol::packets::PlayerPositionAndRotation( m_NetworkInterface->BroadcastPacket(protocol::packets::PlayerPositionAndRotation(
{player->GetId(), player->get_position(), player->GetCameraRotation(), player->get_velocity()})); {player->GetId(), player->GetPosition(), player->GetCameraRotation(), player->GetVelocity()}));
} }
} }
@@ -46,9 +46,9 @@ void ServerWorld::HandlePacket(const protocol::packets::PlayerPositionAndRotatio
if (!player) if (!player)
return; return;
if ((data.m_Position - player->get_position()).length() > 10) { if ((data.m_Position - player->GetPosition()).length() > 10) {
UtilityFunctions::print( UtilityFunctions::print(
"Player ", data.m_Player, " moved too fast ! (from ", player->get_position(), " to ", data.m_Position, ")"); "Player ", data.m_Player, " moved too fast ! (from ", player->GetPosition(), " to ", data.m_Position, ")");
return; return;
} }
@@ -58,7 +58,7 @@ void ServerWorld::HandlePacket(const protocol::packets::PlayerPositionAndRotatio
void ServerWorld::AddPlayer(PlayerID a_PlayerId, godot::String a_PlayerName) { void ServerWorld::AddPlayer(PlayerID a_PlayerId, godot::String a_PlayerName) {
World::AddPlayer(a_PlayerId, a_PlayerName); World::AddPlayer(a_PlayerId, a_PlayerName);
Player* player = GetPlayerById(a_PlayerId); Player* player = GetPlayerById(a_PlayerId);
player->set_position({0, 0, 0}); player->SetPosition({0, 0, 0});
} }
} // namespace blitz } // namespace blitz