update jump on server side

This commit is contained in:
AleaJactaEst 2023-11-30 22:06:23 +01:00
parent 2a560388d8
commit 8e7db01cd4
8 changed files with 287 additions and 89 deletions

View file

@ -1,6 +1,7 @@
extends Node extends Node
class_name CharacterMovementComponent class_name CharacterMovementComponent
signal start_jump(vertical_velocity:Vector3)
##################################### #####################################
@export_category("References") @export_category("References")
@ -117,7 +118,7 @@ var input_acceleration :Vector3
var input_direction:Vector3 var input_direction:Vector3
var vertical_velocity :Vector3 var vertical_velocity :Vector3
## returns the actual velocity for the player. ## returns the actual velocity for the player.
## so for example if player is holding forward key, but character is stuck by wall, it will return 0 velocity. ## so for example if player is holding forward key, but character is stuck by wall, it will return 0 velocity.
@ -617,5 +618,6 @@ func jump() -> void:
character_node.apply_impulse(Vector3.UP * jump_magnitude * character_node.mass) character_node.apply_impulse(Vector3.UP * jump_magnitude * character_node.mass)
else: else:
vertical_velocity = Vector3.UP * jump_magnitude vertical_velocity = Vector3.UP * jump_magnitude
start_jump.emit(vertical_velocity)

View file

@ -13,6 +13,8 @@ var camrot_v:float = 0.0
var save_rot:Vector3 var save_rot:Vector3
var tick:int = 0 var tick:int = 0
var jump:Vector3 = Vector3(0.0, 0.0, 0.0)
var tickjump: int = 0
# Get the gravity from the project settings to be synced with RigidBody nodes. # Get the gravity from the project settings to be synced with RigidBody nodes.
@ -37,6 +39,7 @@ func set_otherplayer(value:bool):
func _ready(): func _ready():
$SpringArm3D/Camera3D.set_current(false) $SpringArm3D/Camera3D.set_current(false)
set_process(false) set_process(false)
$CharacterMovementComponent.start_jump.connect(_on_start_jump)
# $CameraComponent.set_process(false) # $CameraComponent.set_process(false)
# $PlayerController.set_process(false) # $PlayerController.set_process(false)
# $PlayerNetworkingComponent.set_process(false) # $PlayerNetworkingComponent.set_process(false)
@ -49,6 +52,10 @@ func _ready():
#$PlayerGameplayComponent.update_animations() #$PlayerGameplayComponent.update_animations()
func _on_start_jump(vertical_velocity:Vector3):
jump = vertical_velocity
tickjump += 1
func get_my_position() -> Vector3: func get_my_position() -> Vector3:
#return $SpringArm3D/Camera3D.get_global_position() #return $SpringArm3D/Camera3D.get_global_position()
@ -62,6 +69,18 @@ func get_my_rotation() -> Vector3:
return $Armature.get_global_rotation() return $Armature.get_global_rotation()
func is_jump() -> bool:
return jump != Vector3( 0.0, 0.0, 0.0)
func get_jump() -> Vector3:
var ret:Vector3 = jump
jump = Vector3(0.0, 0.0, 0.0)
return ret
func get_tickjump() -> int:
return tickjump
func update_player(ctick:int, pos:Vector3, rot:Vector3): func update_player(ctick:int, pos:Vector3, rot:Vector3):
#print(tick, " - ", ctick) #print(tick, " - ", ctick)
if tick != ctick: if tick != ctick:

View file

@ -443,43 +443,43 @@ bones/0/name = "Hips"
bones/0/parent = -1 bones/0/parent = -1
bones/0/rest = Transform3D(0.544576, -0.0348814, -0.837986, 0.0102475, 0.999337, -0.0349382, 0.838649, 0.0104393, 0.544573, -0.000172998, 0.901879, -0.00179914) bones/0/rest = Transform3D(0.544576, -0.0348814, -0.837986, 0.0102475, 0.999337, -0.0349382, 0.838649, 0.0104393, 0.544573, -0.000172998, 0.901879, -0.00179914)
bones/0/enabled = true bones/0/enabled = true
bones/0/position = Vector3(-0.00176314, 0.931469, -0.000860252) bones/0/position = Vector3(0.00269824, 0.928128, -0.00714055)
bones/0/rotation = Quaternion(-0.0401286, -0.36795, -0.01318, 0.928886) bones/0/rotation = Quaternion(-0.0374248, -0.367003, -0.0137477, 0.929365)
bones/0/scale = Vector3(1, 1, 1) bones/0/scale = Vector3(1, 1, 1)
bones/1/name = "Spine" bones/1/name = "Spine"
bones/1/parent = 0 bones/1/parent = 0
bones/1/rest = Transform3D(0.99963, -0.0129189, 0.0239171, 0.01122, 0.997494, 0.0698543, -0.0247596, -0.0695601, 0.99727, 4.88944e-09, 0.0992349, -0.0122733) bones/1/rest = Transform3D(0.99963, -0.0129189, 0.0239171, 0.01122, 0.997494, 0.0698543, -0.0247596, -0.0695601, 0.99727, 4.88944e-09, 0.0992349, -0.0122733)
bones/1/enabled = true bones/1/enabled = true
bones/1/position = Vector3(4.88944e-09, 0.0992349, -0.0122733) bones/1/position = Vector3(4.88944e-09, 0.0992349, -0.0122733)
bones/1/rotation = Quaternion(-0.0133893, 0.0404415, -0.00578242, 0.999075) bones/1/rotation = Quaternion(-0.0109805, 0.0405026, -0.00593335, 0.999101)
bones/1/scale = Vector3(1, 1, 1) bones/1/scale = Vector3(1, 1, 1)
bones/2/name = "Spine1" bones/2/name = "Spine1"
bones/2/parent = 1 bones/2/parent = 1
bones/2/rest = Transform3D(0.99985, -0.015446, 0.00786788, 0.0155655, 0.999761, -0.0153596, -0.00762876, 0.0154798, 0.999851, -2.79397e-09, 0.11732, 1.86265e-09) bones/2/rest = Transform3D(0.99985, -0.015446, 0.00786788, 0.0155655, 0.999761, -0.0153596, -0.00762876, 0.0154798, 0.999851, -2.79397e-09, 0.11732, 1.86265e-09)
bones/2/enabled = true bones/2/enabled = true
bones/2/position = Vector3(-2.79397e-09, 0.11732, 1.86265e-09) bones/2/position = Vector3(-2.79397e-09, 0.11732, 1.86265e-09)
bones/2/rotation = Quaternion(0.0938751, 0.0821744, -0.00781475, 0.992156) bones/2/rotation = Quaternion(0.0998843, 0.0824279, -0.00832312, 0.991544)
bones/2/scale = Vector3(1, 1, 1) bones/2/scale = Vector3(1, 1, 1)
bones/3/name = "Spine2" bones/3/name = "Spine2"
bones/3/parent = 2 bones/3/parent = 2
bones/3/rest = Transform3D(0.999844, -0.014346, 0.0103258, 0.0156141, 0.990645, -0.135571, -0.00828427, 0.135711, 0.990714, -2.79397e-09, 0.134588, -2.51457e-08) bones/3/rest = Transform3D(0.999844, -0.014346, 0.0103258, 0.0156141, 0.990645, -0.135571, -0.00828427, 0.135711, 0.990714, -2.79397e-09, 0.134588, -2.51457e-08)
bones/3/enabled = true bones/3/enabled = true
bones/3/position = Vector3(-2.79397e-09, 0.134588, -2.51457e-08) bones/3/position = Vector3(-2.79397e-09, 0.134588, -2.51457e-08)
bones/3/rotation = Quaternion(0.154004, 0.0814804, -0.0128469, 0.984621) bones/3/rotation = Quaternion(0.15953, 0.0817708, -0.013301, 0.983711)
bones/3/scale = Vector3(1, 1, 1) bones/3/scale = Vector3(1, 1, 1)
bones/4/name = "Neck" bones/4/name = "Neck"
bones/4/parent = 3 bones/4/parent = 3
bones/4/rest = Transform3D(0.968778, 0.12654, 0.213204, -0.00181599, 0.863542, -0.504273, -0.247921, 0.488142, 0.836811, 2.48197e-07, 0.150325, 0.00792907) bones/4/rest = Transform3D(0.968778, 0.12654, 0.213204, -0.00181599, 0.863542, -0.504273, -0.247921, 0.488142, 0.836811, 2.48197e-07, 0.150325, 0.00792907)
bones/4/enabled = true bones/4/enabled = true
bones/4/position = Vector3(2.48197e-07, 0.150325, 0.00792907) bones/4/position = Vector3(2.48197e-07, 0.150325, 0.00792907)
bones/4/rotation = Quaternion(0.129882, -0.00998771, 0.00324898, 0.991474) bones/4/rotation = Quaternion(0.114624, -0.0107021, 0.00344761, 0.993345)
bones/4/scale = Vector3(1, 1, 1) bones/4/scale = Vector3(1, 1, 1)
bones/5/name = "Head" bones/5/name = "Head"
bones/5/parent = 4 bones/5/parent = 4
bones/5/rest = Transform3D(0.840773, 0.330252, 0.428993, -0.33245, 0.940342, -0.0723432, -0.427291, -0.0817944, 0.900406, 5.58794e-09, 0.107895, 5.21541e-08) bones/5/rest = Transform3D(0.840773, 0.330252, 0.428993, -0.33245, 0.940342, -0.0723432, -0.427291, -0.0817944, 0.900406, 5.58794e-09, 0.107895, 5.21541e-08)
bones/5/enabled = true bones/5/enabled = true
bones/5/position = Vector3(5.58794e-09, 0.107895, 5.21541e-08) bones/5/position = Vector3(5.58794e-09, 0.107895, 5.21541e-08)
bones/5/rotation = Quaternion(-0.0476332, 0.169489, -0.0573583, 0.982708) bones/5/rotation = Quaternion(-0.024524, 0.164043, -0.0652615, 0.983986)
bones/5/scale = Vector3(1, 1, 1) bones/5/scale = Vector3(1, 1, 1)
bones/6/name = "HeadTop_End" bones/6/name = "HeadTop_End"
bones/6/parent = 5 bones/6/parent = 5
@ -507,42 +507,42 @@ bones/9/parent = 3
bones/9/rest = Transform3D(-0.250988, 0.959361, -0.128958, 0.025503, -0.126623, -0.991623, -0.967654, -0.252174, 0.0073142, 0.0610582, 0.0911044, 0.00705553) bones/9/rest = Transform3D(-0.250988, 0.959361, -0.128958, 0.025503, -0.126623, -0.991623, -0.967654, -0.252174, 0.0073142, 0.0610582, 0.0911044, 0.00705553)
bones/9/enabled = true bones/9/enabled = true
bones/9/position = Vector3(0.0610582, 0.0911044, 0.00705553) bones/9/position = Vector3(0.0610582, 0.0911044, 0.00705553)
bones/9/rotation = Quaternion(-0.474143, -0.53506, 0.569819, -0.405224) bones/9/rotation = Quaternion(-0.493103, -0.517465, 0.572643, -0.401446)
bones/9/scale = Vector3(1, 1, 1) bones/9/scale = Vector3(1, 1, 1)
bones/10/name = "LeftArm" bones/10/name = "LeftArm"
bones/10/parent = 9 bones/10/parent = 9
bones/10/rest = Transform3D(0.845869, -0.51692, -0.131522, 0.093338, 0.386222, -0.917671, 0.52516, 0.763954, 0.374941, 7.45058e-09, 0.129223, 3.95812e-08) bones/10/rest = Transform3D(0.845869, -0.51692, -0.131522, 0.093338, 0.386222, -0.917671, 0.52516, 0.763954, 0.374941, 7.45058e-09, 0.129223, 3.95812e-08)
bones/10/enabled = true bones/10/enabled = true
bones/10/position = Vector3(7.45058e-09, 0.129223, 3.95812e-08) bones/10/position = Vector3(7.45058e-09, 0.129223, 3.95812e-08)
bones/10/rotation = Quaternion(0.535645, -0.0750345, 0.146266, 0.828288) bones/10/rotation = Quaternion(0.521501, -0.0856542, 0.145809, 0.836325)
bones/10/scale = Vector3(1, 1, 1) bones/10/scale = Vector3(1, 1, 1)
bones/11/name = "LeftForeArm" bones/11/name = "LeftForeArm"
bones/11/parent = 10 bones/11/parent = 10
bones/11/rest = Transform3D(0.138967, -0.989426, 0.0415226, 0.989436, 0.140472, 0.0358277, -0.0412816, 0.0361051, 0.998495, -4.47035e-08, 0.274229, -7.45058e-09) bones/11/rest = Transform3D(0.138967, -0.989426, 0.0415226, 0.989436, 0.140472, 0.0358277, -0.0412816, 0.0361051, 0.998495, -4.47035e-08, 0.274229, -7.45058e-09)
bones/11/enabled = true bones/11/enabled = true
bones/11/position = Vector3(-4.47035e-08, 0.274229, -7.45058e-09) bones/11/position = Vector3(-4.47035e-08, 0.274229, -7.45058e-09)
bones/11/rotation = Quaternion(-0.0086432, 0.097867, 0.452429, 0.886372) bones/11/rotation = Quaternion(-0.0133649, 0.090178, 0.439427, 0.893641)
bones/11/scale = Vector3(1, 1, 1) bones/11/scale = Vector3(1, 1, 1)
bones/12/name = "LeftHand" bones/12/name = "LeftHand"
bones/12/parent = 11 bones/12/parent = 11
bones/12/rest = Transform3D(0.746359, -0.304314, 0.591895, 0.184003, 0.949028, 0.255908, -0.639601, -0.0820888, 0.764311, 6.0536e-09, 0.276326, -1.49012e-08) bones/12/rest = Transform3D(0.746359, -0.304314, 0.591895, 0.184003, 0.949028, 0.255908, -0.639601, -0.0820888, 0.764311, 6.0536e-09, 0.276326, -1.49012e-08)
bones/12/enabled = true bones/12/enabled = true
bones/12/position = Vector3(6.0536e-09, 0.276326, -1.49012e-08) bones/12/position = Vector3(6.0536e-09, 0.276326, -1.49012e-08)
bones/12/rotation = Quaternion(-0.152197, 0.123664, -0.00611043, 0.980564) bones/12/rotation = Quaternion(-0.153804, 0.124349, -0.00615379, 0.980227)
bones/12/scale = Vector3(1, 1, 1) bones/12/scale = Vector3(1, 1, 1)
bones/13/name = "LeftHandMiddle1" bones/13/name = "LeftHandMiddle1"
bones/13/parent = 12 bones/13/parent = 12
bones/13/rest = Transform3D(0.98654, 0.118644, -0.112532, -0.118809, 0.0472127, -0.991794, -0.112357, 0.991814, 0.0606732, -3.12924e-07, 0.127755, -7.63685e-08) bones/13/rest = Transform3D(0.98654, 0.118644, -0.112532, -0.118809, 0.0472127, -0.991794, -0.112357, 0.991814, 0.0606732, -3.12924e-07, 0.127755, -7.63685e-08)
bones/13/enabled = true bones/13/enabled = true
bones/13/position = Vector3(-3.12924e-07, 0.127755, -7.63685e-08) bones/13/position = Vector3(-3.12924e-07, 0.127755, -7.63685e-08)
bones/13/rotation = Quaternion(0.138975, 0.00286881, -0.0698249, 0.987827) bones/13/rotation = Quaternion(0.126766, 0.00572238, -0.0837684, 0.988373)
bones/13/scale = Vector3(1, 1, 1) bones/13/scale = Vector3(1, 1, 1)
bones/14/name = "LeftHandMiddle2" bones/14/name = "LeftHandMiddle2"
bones/14/parent = 13 bones/14/parent = 13
bones/14/rest = Transform3D(0.980685, 0.110739, -0.161229, -0.112737, -0.353585, -0.928584, -0.159838, 0.928824, -0.334271, -7.45058e-09, 0.0361397, -5.21541e-08) bones/14/rest = Transform3D(0.980685, 0.110739, -0.161229, -0.112737, -0.353585, -0.928584, -0.159838, 0.928824, -0.334271, -7.45058e-09, 0.0361397, -5.21541e-08)
bones/14/enabled = true bones/14/enabled = true
bones/14/position = Vector3(-7.45058e-09, 0.0361397, -5.21541e-08) bones/14/position = Vector3(-7.45058e-09, 0.0361397, -5.21541e-08)
bones/14/rotation = Quaternion(0.202539, -0.00139929, 0.0157619, 0.979146) bones/14/rotation = Quaternion(0.191173, -0.00131762, 0.0144923, 0.981448)
bones/14/scale = Vector3(1, 1, 1) bones/14/scale = Vector3(1, 1, 1)
bones/15/name = "LeftHandMiddle3" bones/15/name = "LeftHandMiddle3"
bones/15/parent = 14 bones/15/parent = 14
@ -563,14 +563,14 @@ bones/17/parent = 12
bones/17/rest = Transform3D(0.922249, -0.296379, 0.248225, 0.374682, 0.843413, -0.385056, -0.0952333, 0.448123, 0.888885, -0.0300309, 0.0378879, 0.0216701) bones/17/rest = Transform3D(0.922249, -0.296379, 0.248225, 0.374682, 0.843413, -0.385056, -0.0952333, 0.448123, 0.888885, -0.0300309, 0.0378879, 0.0216701)
bones/17/enabled = true bones/17/enabled = true
bones/17/position = Vector3(-0.0300309, 0.0378879, 0.0216701) bones/17/position = Vector3(-0.0300309, 0.0378879, 0.0216701)
bones/17/rotation = Quaternion(0.285978, 0.116984, 0.178578, 0.934153) bones/17/rotation = Quaternion(0.285819, 0.112502, 0.190147, 0.932467)
bones/17/scale = Vector3(1, 1, 1) bones/17/scale = Vector3(1, 1, 1)
bones/18/name = "LeftHandThumb2" bones/18/name = "LeftHandThumb2"
bones/18/parent = 17 bones/18/parent = 17
bones/18/rest = Transform3D(0.793061, 0.491162, -0.360297, -0.562049, 0.818065, -0.121947, 0.234851, 0.299216, 0.924832, 1.19209e-07, 0.0474499, -2.44938e-07) bones/18/rest = Transform3D(0.793061, 0.491162, -0.360297, -0.562049, 0.818065, -0.121947, 0.234851, 0.299216, 0.924832, 1.19209e-07, 0.0474499, -2.44938e-07)
bones/18/enabled = true bones/18/enabled = true
bones/18/position = Vector3(1.19209e-07, 0.0474499, -2.44938e-07) bones/18/position = Vector3(1.19209e-07, 0.0474499, -2.44938e-07)
bones/18/rotation = Quaternion(-0.00667099, 0.000848215, -0.000823617, 0.999977) bones/18/rotation = Quaternion(-0.00705108, 0.000686295, -0.000884771, 0.999975)
bones/18/scale = Vector3(1, 1, 1) bones/18/scale = Vector3(1, 1, 1)
bones/19/name = "LeftHandThumb3" bones/19/name = "LeftHandThumb3"
bones/19/parent = 18 bones/19/parent = 18
@ -591,14 +591,14 @@ bones/21/parent = 12
bones/21/rest = Transform3D(0.983723, 0.142189, -0.109869, -0.119058, 0.0577917, -0.991204, -0.134589, 0.988151, 0.0737798, -0.0282207, 0.122666, 0.00231682) bones/21/rest = Transform3D(0.983723, 0.142189, -0.109869, -0.119058, 0.0577917, -0.991204, -0.134589, 0.988151, 0.0737798, -0.0282207, 0.122666, 0.00231682)
bones/21/enabled = true bones/21/enabled = true
bones/21/position = Vector3(-0.0282207, 0.122666, 0.00231682) bones/21/position = Vector3(-0.0282207, 0.122666, 0.00231682)
bones/21/rotation = Quaternion(0.0416242, -0.0055579, 0.0615344, 0.997221) bones/21/rotation = Quaternion(0.0347228, -0.00595159, 0.0611643, 0.997506)
bones/21/scale = Vector3(1, 1, 1) bones/21/scale = Vector3(1, 1, 1)
bones/22/name = "LeftHandIndex2" bones/22/name = "LeftHandIndex2"
bones/22/parent = 21 bones/22/parent = 21
bones/22/rest = Transform3D(0.978949, 0.10384, -0.175717, -0.111366, -0.44972, -0.8862, -0.171047, 0.887113, -0.428688, 1.11759e-07, 0.0389198, -5.96046e-08) bones/22/rest = Transform3D(0.978949, 0.10384, -0.175717, -0.111366, -0.44972, -0.8862, -0.171047, 0.887113, -0.428688, 1.11759e-07, 0.0389198, -5.96046e-08)
bones/22/enabled = true bones/22/enabled = true
bones/22/position = Vector3(1.11759e-07, 0.0389198, -5.96046e-08) bones/22/position = Vector3(1.11759e-07, 0.0389198, -5.96046e-08)
bones/22/rotation = Quaternion(0.152414, -0.000968763, -0.00568409, 0.9883) bones/22/rotation = Quaternion(0.145443, -0.000785411, -0.00654438, 0.989345)
bones/22/scale = Vector3(1, 1, 1) bones/22/scale = Vector3(1, 1, 1)
bones/23/name = "LeftHandIndex3" bones/23/name = "LeftHandIndex3"
bones/23/parent = 22 bones/23/parent = 22
@ -619,14 +619,14 @@ bones/25/parent = 12
bones/25/rest = Transform3D(0.991492, 0.0540781, -0.118406, -0.118263, -0.00584495, -0.992965, -0.0543897, 0.99852, 0.000600219, 0.0221662, 0.12147, -9.90927e-05) bones/25/rest = Transform3D(0.991492, 0.0540781, -0.118406, -0.118263, -0.00584495, -0.992965, -0.0543897, 0.99852, 0.000600219, 0.0221662, 0.12147, -9.90927e-05)
bones/25/enabled = true bones/25/enabled = true
bones/25/position = Vector3(0.0221662, 0.12147, -9.90927e-05) bones/25/position = Vector3(0.0221662, 0.12147, -9.90927e-05)
bones/25/rotation = Quaternion(0.277807, -0.0191101, -0.114899, 0.953549) bones/25/rotation = Quaternion(0.267282, -0.0139867, -0.128595, 0.954897)
bones/25/scale = Vector3(1, 1, 1) bones/25/scale = Vector3(1, 1, 1)
bones/26/name = "LeftHandRing2" bones/26/name = "LeftHandRing2"
bones/26/parent = 25 bones/26/parent = 25
bones/26/rest = Transform3D(0.981497, 0.113181, -0.154445, -0.116659, -0.286137, -0.951061, -0.151835, 0.951481, -0.267639, -3.72529e-08, 0.036012, -1.11759e-07) bones/26/rest = Transform3D(0.981497, 0.113181, -0.154445, -0.116659, -0.286137, -0.951061, -0.151835, 0.951481, -0.267639, -3.72529e-08, 0.036012, -1.11759e-07)
bones/26/enabled = true bones/26/enabled = true
bones/26/position = Vector3(-3.72529e-08, 0.036012, -1.11759e-07) bones/26/position = Vector3(-3.72529e-08, 0.036012, -1.11759e-07)
bones/26/rotation = Quaternion(0.288056, 0.0017774, 0.0251217, 0.957282) bones/26/rotation = Quaternion(0.276982, 0.001692, 0.0244563, 0.960563)
bones/26/scale = Vector3(1, 1, 1) bones/26/scale = Vector3(1, 1, 1)
bones/27/name = "LeftHandRing3" bones/27/name = "LeftHandRing3"
bones/27/parent = 26 bones/27/parent = 26
@ -647,14 +647,14 @@ bones/29/parent = 12
bones/29/rest = Transform3D(0.991785, 0.0101279, -0.127516, -0.126197, -0.0855001, -0.988314, -0.0209122, 0.996287, -0.0835196, 0.0472581, 0.109082, 0.00226384) bones/29/rest = Transform3D(0.991785, 0.0101279, -0.127516, -0.126197, -0.0855001, -0.988314, -0.0209122, 0.996287, -0.0835196, 0.0472581, 0.109082, 0.00226384)
bones/29/enabled = true bones/29/enabled = true
bones/29/position = Vector3(0.0472581, 0.109082, 0.00226384) bones/29/position = Vector3(0.0472581, 0.109082, 0.00226384)
bones/29/rotation = Quaternion(0.302996, -0.0206488, -0.148694, 0.941094) bones/29/rotation = Quaternion(0.293025, -0.0148109, -0.161789, 0.9422)
bones/29/scale = Vector3(1, 1, 1) bones/29/scale = Vector3(1, 1, 1)
bones/30/name = "LeftHandPinky2" bones/30/name = "LeftHandPinky2"
bones/30/parent = 29 bones/30/parent = 29
bones/30/rest = Transform3D(0.989305, 0.129006, -0.068066, -0.049097, -0.144898, -0.988228, -0.13735, 0.981001, -0.137015, -5.96046e-08, 0.0413669, -1.49012e-08) bones/30/rest = Transform3D(0.989305, 0.129006, -0.068066, -0.049097, -0.144898, -0.988228, -0.13735, 0.981001, -0.137015, -5.96046e-08, 0.0413669, -1.49012e-08)
bones/30/enabled = true bones/30/enabled = true
bones/30/position = Vector3(-5.96046e-08, 0.0413669, -1.49012e-08) bones/30/position = Vector3(-5.96046e-08, 0.0413669, -1.49012e-08)
bones/30/rotation = Quaternion(0.348753, 0.0117926, 0.0500271, 0.935804) bones/30/rotation = Quaternion(0.33758, 0.0112663, 0.0499131, 0.939905)
bones/30/scale = Vector3(1, 1, 1) bones/30/scale = Vector3(1, 1, 1)
bones/31/name = "LeftHandPinky3" bones/31/name = "LeftHandPinky3"
bones/31/parent = 30 bones/31/parent = 30
@ -675,42 +675,42 @@ bones/33/parent = 3
bones/33/rest = Transform3D(-0.214833, -0.949432, 0.228968, -0.0511495, -0.223182, -0.973434, 0.975311, -0.220837, -0.000616074, -0.061057, 0.0911053, 0.00705566) bones/33/rest = Transform3D(-0.214833, -0.949432, 0.228968, -0.0511495, -0.223182, -0.973434, 0.975311, -0.220837, -0.000616074, -0.061057, 0.0911053, 0.00705566)
bones/33/enabled = true bones/33/enabled = true
bones/33/position = Vector3(-0.061057, 0.0911053, 0.00705566) bones/33/position = Vector3(-0.061057, 0.0911053, 0.00705566)
bones/33/rotation = Quaternion(0.527329, -0.494188, 0.539202, 0.432392) bones/33/rotation = Quaternion(0.544369, -0.478249, 0.540107, 0.428049)
bones/33/scale = Vector3(1, 1, 1) bones/33/scale = Vector3(1, 1, 1)
bones/34/name = "RightArm" bones/34/name = "RightArm"
bones/34/parent = 33 bones/34/parent = 33
bones/34/rest = Transform3D(0.555382, 0.714901, -0.424814, -0.786414, 0.285417, -0.547804, -0.270377, 0.63832, 0.720724, -2.23517e-08, 0.129223, 9.12696e-08) bones/34/rest = Transform3D(0.555382, 0.714901, -0.424814, -0.786414, 0.285417, -0.547804, -0.270377, 0.63832, 0.720724, -2.23517e-08, 0.129223, 9.12696e-08)
bones/34/enabled = true bones/34/enabled = true
bones/34/position = Vector3(-2.23517e-08, 0.129223, 9.12696e-08) bones/34/position = Vector3(-2.23517e-08, 0.129223, 9.12696e-08)
bones/34/rotation = Quaternion(0.516222, 0.0816319, 0.07968, 0.848824) bones/34/rotation = Quaternion(0.509109, 0.0921489, 0.0777726, 0.852214)
bones/34/scale = Vector3(1, 1, 1) bones/34/scale = Vector3(1, 1, 1)
bones/35/name = "RightForeArm" bones/35/name = "RightForeArm"
bones/35/parent = 34 bones/35/parent = 34
bones/35/rest = Transform3D(-0.491194, 0.870247, -0.0374029, -0.870282, -0.488505, 0.0630281, 0.0365786, 0.0635101, 0.997311, 7.45058e-09, 0.274776, -3.72529e-08) bones/35/rest = Transform3D(-0.491194, 0.870247, -0.0374029, -0.870282, -0.488505, 0.0630281, 0.0365786, 0.0635101, 0.997311, 7.45058e-09, 0.274776, -3.72529e-08)
bones/35/enabled = true bones/35/enabled = true
bones/35/position = Vector3(7.45058e-09, 0.274776, -3.72529e-08) bones/35/position = Vector3(7.45058e-09, 0.274776, -3.72529e-08)
bones/35/rotation = Quaternion(0.0639905, -0.0612774, -0.431069, 0.897959) bones/35/rotation = Quaternion(0.0517307, -0.0453383, -0.427189, 0.901542)
bones/35/scale = Vector3(1, 1, 1) bones/35/scale = Vector3(1, 1, 1)
bones/36/name = "RightHand" bones/36/name = "RightHand"
bones/36/parent = 35 bones/36/parent = 35
bones/36/rest = Transform3D(0.953663, 0.121098, 0.275431, -0.18063, 0.962538, 0.202223, -0.240624, -0.242603, 0.939811, 7.45058e-09, 0.276868, 5.96046e-08) bones/36/rest = Transform3D(0.953663, 0.121098, 0.275431, -0.18063, 0.962538, 0.202223, -0.240624, -0.242603, 0.939811, 7.45058e-09, 0.276868, 5.96046e-08)
bones/36/enabled = true bones/36/enabled = true
bones/36/position = Vector3(7.45058e-09, 0.276868, 5.96046e-08) bones/36/position = Vector3(7.45058e-09, 0.276868, 5.96046e-08)
bones/36/rotation = Quaternion(0.10697, -0.00384357, -0.0381328, 0.993523) bones/36/rotation = Quaternion(0.102255, -0.0214983, -0.0665844, 0.992295)
bones/36/scale = Vector3(1, 1, 1) bones/36/scale = Vector3(1, 1, 1)
bones/37/name = "RightHandMiddle1" bones/37/name = "RightHandMiddle1"
bones/37/parent = 36 bones/37/parent = 36
bones/37/rest = Transform3D(0.986308, -0.119644, 0.1135, 0.119813, 0.0469439, -0.991686, 0.113321, 0.991706, 0.060636, 3.50177e-07, 0.127755, -8.9407e-08) bones/37/rest = Transform3D(0.986308, -0.119644, 0.1135, 0.119813, 0.0469439, -0.991686, 0.113321, 0.991706, 0.060636, 3.50177e-07, 0.127755, -8.9407e-08)
bones/37/enabled = true bones/37/enabled = true
bones/37/position = Vector3(3.50177e-07, 0.127755, -8.9407e-08) bones/37/position = Vector3(3.50177e-07, 0.127755, -8.9407e-08)
bones/37/rotation = Quaternion(0.110639, 0.00839663, 0.0252213, 0.993505) bones/37/rotation = Quaternion(0.11126, 0.00857363, 0.0244341, 0.993454)
bones/37/scale = Vector3(1, 1, 1) bones/37/scale = Vector3(1, 1, 1)
bones/38/name = "RightHandMiddle2" bones/38/name = "RightHandMiddle2"
bones/38/parent = 37 bones/38/parent = 37
bones/38/rest = Transform3D(0.980361, -0.111685, 0.162538, 0.114835, -0.346749, -0.930902, 0.160328, 0.931285, -0.327114, 6.70552e-08, 0.0361398, -1.02445e-07) bones/38/rest = Transform3D(0.980361, -0.111685, 0.162538, 0.114835, -0.346749, -0.930902, 0.160328, 0.931285, -0.327114, 6.70552e-08, 0.0361398, -1.02445e-07)
bones/38/enabled = true bones/38/enabled = true
bones/38/position = Vector3(6.70552e-08, 0.0361398, -1.02445e-07) bones/38/position = Vector3(6.70552e-08, 0.0361398, -1.02445e-07)
bones/38/rotation = Quaternion(0.309781, 0.00172124, -0.0213088, 0.950568) bones/38/rotation = Quaternion(0.261973, 0.00138987, -0.0169058, 0.964926)
bones/38/scale = Vector3(1, 1, 1) bones/38/scale = Vector3(1, 1, 1)
bones/39/name = "RightHandMiddle3" bones/39/name = "RightHandMiddle3"
bones/39/parent = 38 bones/39/parent = 38
@ -731,14 +731,14 @@ bones/41/parent = 36
bones/41/rest = Transform3D(0.940404, 0.29207, -0.174168, -0.340048, 0.811489, -0.475239, 0.00253238, 0.506143, 0.862446, 0.0300309, 0.037888, 0.0216703) bones/41/rest = Transform3D(0.940404, 0.29207, -0.174168, -0.340048, 0.811489, -0.475239, 0.00253238, 0.506143, 0.862446, 0.0300309, 0.037888, 0.0216703)
bones/41/enabled = true bones/41/enabled = true
bones/41/position = Vector3(0.0300309, 0.037888, 0.0216703) bones/41/position = Vector3(0.0300309, 0.037888, 0.0216703)
bones/41/rotation = Quaternion(0.204513, 0.0233172, -0.230161, 0.951134) bones/41/rotation = Quaternion(0.203337, 0.0236239, -0.224592, 0.952709)
bones/41/scale = Vector3(1, 1, 1) bones/41/scale = Vector3(1, 1, 1)
bones/42/name = "RightHandThumb2" bones/42/name = "RightHandThumb2"
bones/42/parent = 41 bones/42/parent = 41
bones/42/rest = Transform3D(0.793791, -0.608189, -0.00159446, 0.595053, 0.777184, -0.204689, 0.125729, 0.161531, 0.978826, -1.2666e-07, 0.0474498, -2.68221e-07) bones/42/rest = Transform3D(0.793791, -0.608189, -0.00159446, 0.595053, 0.777184, -0.204689, 0.125729, 0.161531, 0.978826, -1.2666e-07, 0.0474498, -2.68221e-07)
bones/42/enabled = true bones/42/enabled = true
bones/42/position = Vector3(-1.2666e-07, 0.0474498, -2.68221e-07) bones/42/position = Vector3(-1.2666e-07, 0.0474498, -2.68221e-07)
bones/42/rotation = Quaternion(0.00444348, 0.00194769, 0.181603, 0.98336) bones/42/rotation = Quaternion(0.0063209, 0.00176013, 0.186391, 0.982454)
bones/42/scale = Vector3(1, 1, 1) bones/42/scale = Vector3(1, 1, 1)
bones/43/name = "RightHandThumb3" bones/43/name = "RightHandThumb3"
bones/43/parent = 42 bones/43/parent = 42
@ -759,14 +759,14 @@ bones/45/parent = 36
bones/45/rest = Transform3D(0.978763, -0.172845, 0.110213, 0.120904, 0.0525683, -0.991271, 0.165542, 0.983545, 0.0723496, 0.0282207, 0.122666, 0.00231693) bones/45/rest = Transform3D(0.978763, -0.172845, 0.110213, 0.120904, 0.0525683, -0.991271, 0.165542, 0.983545, 0.0723496, 0.0282207, 0.122666, 0.00231693)
bones/45/enabled = true bones/45/enabled = true
bones/45/position = Vector3(0.0282207, 0.122666, 0.00231693) bones/45/position = Vector3(0.0282207, 0.122666, 0.00231693)
bones/45/rotation = Quaternion(0.0390987, 0.0100155, 0.00896334, 0.999145) bones/45/rotation = Quaternion(0.0369531, 0.00972766, 0.00983124, 0.999221)
bones/45/scale = Vector3(1, 1, 1) bones/45/scale = Vector3(1, 1, 1)
bones/46/name = "RightHandIndex2" bones/46/name = "RightHandIndex2"
bones/46/parent = 45 bones/46/parent = 45
bones/46/rest = Transform3D(0.978593, -0.104714, 0.177172, 0.106914, -0.476935, -0.872412, 0.175853, 0.872679, -0.45553, 1.49012e-07, 0.0389196, -8.75443e-08) bones/46/rest = Transform3D(0.978593, -0.104714, 0.177172, 0.106914, -0.476935, -0.872412, 0.175853, 0.872679, -0.45553, 1.49012e-07, 0.0389196, -8.75443e-08)
bones/46/enabled = true bones/46/enabled = true
bones/46/position = Vector3(1.49012e-07, 0.0389196, -8.75443e-08) bones/46/position = Vector3(1.49012e-07, 0.0389196, -8.75443e-08)
bones/46/rotation = Quaternion(0.146895, 0.000172339, 0.00970654, 0.989105) bones/46/rotation = Quaternion(0.14681, 0.000166163, 0.00971464, 0.989117)
bones/46/scale = Vector3(1, 1, 1) bones/46/scale = Vector3(1, 1, 1)
bones/47/name = "RightHandIndex3" bones/47/name = "RightHandIndex3"
bones/47/parent = 46 bones/47/parent = 46
@ -787,14 +787,14 @@ bones/49/parent = 36
bones/49/rest = Transform3D(0.991829, -0.0281871, 0.124419, 0.122843, -0.0520322, -0.991061, 0.0344089, 0.998247, -0.0481446, -0.0221661, 0.12147, -9.89214e-05) bones/49/rest = Transform3D(0.991829, -0.0281871, 0.124419, 0.122843, -0.0520322, -0.991061, 0.0344089, 0.998247, -0.0481446, -0.0221661, 0.12147, -9.89214e-05)
bones/49/enabled = true bones/49/enabled = true
bones/49/position = Vector3(-0.0221661, 0.12147, -9.89214e-05) bones/49/position = Vector3(-0.0221661, 0.12147, -9.89214e-05)
bones/49/rotation = Quaternion(0.21073, -0.00647297, 0.0652739, 0.975341) bones/49/rotation = Quaternion(0.186347, -0.00862311, 0.0675311, 0.980122)
bones/49/scale = Vector3(1, 1, 1) bones/49/scale = Vector3(1, 1, 1)
bones/50/name = "RightHandRing2" bones/50/name = "RightHandRing2"
bones/50/parent = 49 bones/50/parent = 49
bones/50/rest = Transform3D(0.982662, -0.117406, 0.143498, 0.122607, -0.169092, -0.977944, 0.139081, 0.978583, -0.151765, -7.45058e-09, 0.036012, 0) bones/50/rest = Transform3D(0.982662, -0.117406, 0.143498, 0.122607, -0.169092, -0.977944, 0.139081, 0.978583, -0.151765, -7.45058e-09, 0.036012, 0)
bones/50/enabled = true bones/50/enabled = true
bones/50/position = Vector3(-7.45058e-09, 0.036012, 0) bones/50/position = Vector3(-7.45058e-09, 0.036012, 0)
bones/50/rotation = Quaternion(0.34329, -0.00251374, -0.036134, 0.938531) bones/50/rotation = Quaternion(0.319418, -0.00235234, -0.0341133, 0.946997)
bones/50/scale = Vector3(1, 1, 1) bones/50/scale = Vector3(1, 1, 1)
bones/51/name = "RightHandRing3" bones/51/name = "RightHandRing3"
bones/51/parent = 50 bones/51/parent = 50
@ -815,14 +815,14 @@ bones/53/parent = 36
bones/53/rest = Transform3D(0.989897, 0.0602255, 0.128364, 0.133612, -0.0931972, -0.986642, -0.0474579, 0.993824, -0.100302, -0.047258, 0.109082, 0.00226358) bones/53/rest = Transform3D(0.989897, 0.0602255, 0.128364, 0.133612, -0.0931972, -0.986642, -0.0474579, 0.993824, -0.100302, -0.047258, 0.109082, 0.00226358)
bones/53/enabled = true bones/53/enabled = true
bones/53/position = Vector3(-0.047258, 0.109082, 0.00226358) bones/53/position = Vector3(-0.047258, 0.109082, 0.00226358)
bones/53/rotation = Quaternion(0.207993, -0.0111433, 0.0918038, 0.973749) bones/53/rotation = Quaternion(0.207348, -0.0111327, 0.0918575, 0.973881)
bones/53/scale = Vector3(1, 1, 1) bones/53/scale = Vector3(1, 1, 1)
bones/54/name = "RightHandPinky2" bones/54/name = "RightHandPinky2"
bones/54/parent = 53 bones/54/parent = 53
bones/54/rest = Transform3D(0.983236, -0.118306, 0.138749, 0.122507, -0.134994, -0.983244, 0.135054, 0.983758, -0.118237, -2.98023e-08, 0.0413665, 4.24334e-08) bones/54/rest = Transform3D(0.983236, -0.118306, 0.138749, 0.122507, -0.134994, -0.983244, 0.135054, 0.983758, -0.118237, -2.98023e-08, 0.0413665, 4.24334e-08)
bones/54/enabled = true bones/54/enabled = true
bones/54/position = Vector3(-2.98023e-08, 0.0413665, 4.24334e-08) bones/54/position = Vector3(-2.98023e-08, 0.0413665, 4.24334e-08)
bones/54/rotation = Quaternion(0.379818, -0.0135726, -0.0710235, 0.922231) bones/54/rotation = Quaternion(0.348442, -0.0121797, -0.0690199, 0.934707)
bones/54/scale = Vector3(1, 1, 1) bones/54/scale = Vector3(1, 1, 1)
bones/55/name = "RightHandPinky3" bones/55/name = "RightHandPinky3"
bones/55/parent = 54 bones/55/parent = 54
@ -843,28 +843,28 @@ bones/57/parent = 0
bones/57/rest = Transform3D(-0.919821, -0.336213, -0.202214, 0.264978, -0.912457, 0.311783, -0.289337, 0.233202, 0.928386, -0.0912445, -0.0665637, -0.000553781) bones/57/rest = Transform3D(-0.919821, -0.336213, -0.202214, 0.264978, -0.912457, 0.311783, -0.289337, 0.233202, 0.928386, -0.0912445, -0.0665637, -0.000553781)
bones/57/enabled = true bones/57/enabled = true
bones/57/position = Vector3(-0.0912445, -0.0665637, -0.000553781) bones/57/position = Vector3(-0.0912445, -0.0665637, -0.000553781)
bones/57/rotation = Quaternion(-0.124878, 0.00654514, 0.983598, 0.12999) bones/57/rotation = Quaternion(-0.124444, 0.0239564, 0.983591, 0.128409)
bones/57/scale = Vector3(1, 1, 1) bones/57/scale = Vector3(1, 1, 1)
bones/58/name = "RightLeg" bones/58/name = "RightLeg"
bones/58/parent = 57 bones/58/parent = 57
bones/58/rest = Transform3D(0.997811, 0.0392429, -0.0532304, 0.00932048, 0.713425, 0.70067, 0.0654722, -0.699632, 0.711497, 4.84288e-08, 0.405994, 2.6077e-08) bones/58/rest = Transform3D(0.997811, 0.0392429, -0.0532304, 0.00932048, 0.713425, 0.70067, 0.0654722, -0.699632, 0.711497, 4.84288e-08, 0.405994, 2.6077e-08)
bones/58/enabled = true bones/58/enabled = true
bones/58/position = Vector3(4.84288e-08, 0.405994, 2.6077e-08) bones/58/position = Vector3(4.84288e-08, 0.405994, 2.6077e-08)
bones/58/rotation = Quaternion(-0.287314, 0.0749344, -0.01867, 0.954718) bones/58/rotation = Quaternion(-0.307266, 0.0736394, -0.0198635, 0.948562)
bones/58/scale = Vector3(1, 1, 1) bones/58/scale = Vector3(1, 1, 1)
bones/59/name = "RightFoot" bones/59/name = "RightFoot"
bones/59/parent = 58 bones/59/parent = 58
bones/59/rest = Transform3D(0.96994, -0.122934, 0.210008, 0.229929, 0.180407, -0.95634, 0.0796801, 0.975879, 0.20325, -1.02445e-08, 0.42099, 9.31323e-09) bones/59/rest = Transform3D(0.96994, -0.122934, 0.210008, 0.229929, 0.180407, -0.95634, 0.0796801, 0.975879, 0.20325, -1.02445e-08, 0.42099, 9.31323e-09)
bones/59/enabled = true bones/59/enabled = true
bones/59/position = Vector3(-1.02445e-08, 0.42099, 9.31323e-09) bones/59/position = Vector3(-1.02445e-08, 0.42099, 9.31323e-09)
bones/59/rotation = Quaternion(0.594246, 0.0613319, 0.113691, 0.793841) bones/59/rotation = Quaternion(0.599116, 0.0611446, 0.11268, 0.790332)
bones/59/scale = Vector3(1, 1, 1) bones/59/scale = Vector3(1, 1, 1)
bones/60/name = "RightToeBase" bones/60/name = "RightToeBase"
bones/60/parent = 59 bones/60/parent = 59
bones/60/rest = Transform3D(0.999367, 6.43255e-05, 0.0355612, 0.0227211, 0.768109, -0.639916, -0.027356, 0.640319, 0.767622, -5.51563e-09, 0.16432, -1.09159e-07) bones/60/rest = Transform3D(0.999367, 6.43255e-05, 0.0355612, 0.0227211, 0.768109, -0.639916, -0.027356, 0.640319, 0.767622, -5.51563e-09, 0.16432, -1.09159e-07)
bones/60/enabled = true bones/60/enabled = true
bones/60/position = Vector3(-5.51563e-09, 0.16432, -1.09159e-07) bones/60/position = Vector3(-5.51563e-09, 0.16432, -1.09159e-07)
bones/60/rotation = Quaternion(0.354057, 0.0195701, 0.00439821, 0.935009) bones/60/rotation = Quaternion(0.354142, 0.0206108, 0.00391147, 0.934957)
bones/60/scale = Vector3(1, 1, 1) bones/60/scale = Vector3(1, 1, 1)
bones/61/name = "RightToe_End" bones/61/name = "RightToe_End"
bones/61/parent = 60 bones/61/parent = 60
@ -878,28 +878,28 @@ bones/62/parent = 0
bones/62/rest = Transform3D(-0.893651, 0.403296, 0.196826, -0.227377, -0.785047, 0.576195, 0.386895, 0.470164, 0.793258, 0.0912445, -0.0665636, -0.000553777) bones/62/rest = Transform3D(-0.893651, 0.403296, 0.196826, -0.227377, -0.785047, 0.576195, 0.386895, 0.470164, 0.793258, 0.0912445, -0.0665636, -0.000553777)
bones/62/enabled = true bones/62/enabled = true
bones/62/position = Vector3(0.0912445, -0.0665636, -0.000553777) bones/62/position = Vector3(0.0912445, -0.0665636, -0.000553777)
bones/62/rotation = Quaternion(0.0799512, 0.205398, 0.969832, -0.104143) bones/62/rotation = Quaternion(0.0772716, 0.217552, 0.967227, -0.105701)
bones/62/scale = Vector3(1, 1, 1) bones/62/scale = Vector3(1, 1, 1)
bones/63/name = "LeftLeg" bones/63/name = "LeftLeg"
bones/63/parent = 62 bones/63/parent = 62
bones/63/rest = Transform3D(0.99576, 0.0029921, 0.0919402, -0.056273, 0.810456, 0.583091, -0.0727688, -0.585792, 0.807188, 5.12227e-08, 0.405994, -2.04891e-08) bones/63/rest = Transform3D(0.99576, 0.0029921, 0.0919402, -0.056273, 0.810456, 0.583091, -0.0727688, -0.585792, 0.807188, 5.12227e-08, 0.405994, -2.04891e-08)
bones/63/enabled = true bones/63/enabled = true
bones/63/position = Vector3(5.12227e-08, 0.405994, -2.04891e-08) bones/63/position = Vector3(5.12227e-08, 0.405994, -2.04891e-08)
bones/63/rotation = Quaternion(-0.304747, 0.121903, -0.0383145, 0.943823) bones/63/rotation = Quaternion(-0.312284, 0.121082, -0.0386005, 0.94145)
bones/63/scale = Vector3(1, 1, 1) bones/63/scale = Vector3(1, 1, 1)
bones/64/name = "LeftFoot" bones/64/name = "LeftFoot"
bones/64/parent = 63 bones/64/parent = 63
bones/64/rest = Transform3D(0.977802, 0.128039, -0.165856, -0.209522, 0.59104, -0.778956, -0.00170929, 0.796415, 0.604748, -2.04891e-08, 0.42099, 6.98492e-09) bones/64/rest = Transform3D(0.977802, 0.128039, -0.165856, -0.209522, 0.59104, -0.778956, -0.00170929, 0.796415, 0.604748, -2.04891e-08, 0.42099, 6.98492e-09)
bones/64/enabled = true bones/64/enabled = true
bones/64/position = Vector3(-2.04891e-08, 0.42099, 6.98492e-09) bones/64/position = Vector3(-2.04891e-08, 0.42099, 6.98492e-09)
bones/64/rotation = Quaternion(0.488985, -0.0220482, -0.0397986, 0.871105) bones/64/rotation = Quaternion(0.487382, -0.0223726, -0.0405327, 0.871961)
bones/64/scale = Vector3(1, 1, 1) bones/64/scale = Vector3(1, 1, 1)
bones/65/name = "LeftToeBase" bones/65/name = "LeftToeBase"
bones/65/parent = 64 bones/65/parent = 64
bones/65/rest = Transform3D(0.999367, -0.000945242, -0.0355486, -0.0227206, 0.752033, -0.658734, 0.0273564, 0.659125, 0.751536, 3.66616e-08, 0.16432, -1.10293e-07) bones/65/rest = Transform3D(0.999367, -0.000945242, -0.0355486, -0.0227206, 0.752033, -0.658734, 0.0273564, 0.659125, 0.751536, 3.66616e-08, 0.16432, -1.10293e-07)
bones/65/enabled = true bones/65/enabled = true
bones/65/position = Vector3(3.66616e-08, 0.16432, -1.10293e-07) bones/65/position = Vector3(3.66616e-08, 0.16432, -1.10293e-07)
bones/65/rotation = Quaternion(0.359775, -0.00302751, -0.0293221, 0.932573) bones/65/rotation = Quaternion(0.358622, 0.000693168, -0.0289783, 0.933033)
bones/65/scale = Vector3(1, 1, 1) bones/65/scale = Vector3(1, 1, 1)
bones/66/name = "LeftToe_End" bones/66/name = "LeftToe_End"
bones/66/parent = 65 bones/66/parent = 65
@ -918,7 +918,7 @@ mesh = SubResource("ArrayMesh_ludfp")
skin = SubResource("Skin_0b2ap") skin = SubResource("Skin_0b2ap")
[node name="BoneAttachment3D" type="BoneAttachment3D" parent="Armature/Skeleton3D"] [node name="BoneAttachment3D" type="BoneAttachment3D" parent="Armature/Skeleton3D"]
transform = Transform3D(0.996896, -0.0754271, 0.0225785, 0.0761161, 0.849939, -0.521355, 0.020134, 0.521455, 0.853041, -0.021665, 1.50102, 0.110944) transform = Transform3D(0.997495, -0.0674196, 0.0214108, 0.0677264, 0.82286, -0.564194, 0.0204197, 0.564231, 0.825365, -0.0208035, 1.49519, 0.113272)
bone_name = "Head" bone_name = "Head"
bone_idx = 5 bone_idx = 5

View file

@ -85,15 +85,6 @@ func _on_connexion_updated(new_state:Multi.Connexion):
func _on_update_me(tick:int, pos:Vector3, rot:Vector3): func _on_update_me(tick:int, pos:Vector3, rot:Vector3):
$PlayerSpawnLocation.get_child(0).update_player(tick, pos, rot) $PlayerSpawnLocation.get_child(0).update_player(tick, pos, rot)
#self.set_player_position(pos)
#self.set_player_rotation(rot)
#self.get_node("CharacterBody3D").set_enable_event(true)
#for idx in $PlayerSpawnLocation.get_child_count():
# $PlayerSpawnLocation.queue_free()
#var p = PlayerCharacter.instantiate()
#$PlayerSpawnLocation.add_child(p)
#$CameraStarting.set_current(false)
#self.set_player_position(pos)
func _on_update_player(id:int, tick:int, pos:Vector3, rot:Vector3): func _on_update_player(id:int, tick:int, pos:Vector3, rot:Vector3):

View file

@ -123,7 +123,7 @@ func bad_account():
func get_event_received(): func get_event_received():
var data:PackedFlow = PackedFlow.new(dataEnet) var data:PackedFlowPull = PackedFlowPull.new(dataEnet)
var command = data.get_u8() var command = data.get_u8()
#var data = dataEnet.get_packet() #var data = dataEnet.get_packet()
@ -153,7 +153,6 @@ func get_event_received():
if id == 0: if id == 0:
return return
var nb:int = data.get_u8() var nb:int = data.get_u8()
var pos:int = 2
for i in nb: for i in nb:
var mid:int = data.get_u64() var mid:int = data.get_u64()
var mx:float = data.get_f64() var mx:float = data.get_f64()
@ -163,20 +162,29 @@ func get_event_received():
var ry:float = data.get_f64() var ry:float = data.get_f64()
var rz:float = data.get_f64() var rz:float = data.get_f64()
var tick:int = data.get_u8() var tick:int = data.get_u8()
var extra:int = data.get_u8()
var vx:float
var vy:float
var vz:float
var tickjump:int
var jump:bool = (extra & 1) == 1
if jump:
tickjump = data.get_u8()
vx = data.get_f64()
vy = data.get_f64()
vz = data.get_f64()
#for ii in range(56,74): #for ii in range(56,74):
# var tick1:int = data.decode_u8(pos+ii) # var tick1:int = data.decode_u8(pos+ii)
# print("tick ", ii, " :", tick1) # print("tick ", ii, " :", tick1)
pos += 57
if mid == id: if mid == id:
#print("Me id:", mid, " x:", mx, " y:", my, " z:", mz) #print("Me id:", mid, " x:", mx, " y:", my, " z:", mz)
continue continue
print("pos:", pos, " id:", mid, " tick:", tick, " x:", mx, " y:", my, " z:", mz, " rx:", rx, " ry:", ry, " rz:", rz) print(" id:", mid, " tick:", tick, " x:", mx, " y:", my, " z:", mz, " rx:", rx, " ry:", ry, " rz:", rz)
update_player_position.emit(mid, tick, Vector3(mx, my, mz), Vector3(rx, ry, rz)) update_player_position.emit(mid, tick, Vector3(mx, my, mz), Vector3(rx, ry, rz))
var nbuserremove:int = data.get_u8() var nbuserremove:int = data.get_u8()
pos += 1
for i in nbuserremove: for i in nbuserremove:
var mid = data.get_u64() var mid = data.get_u64()
pos += 8
if mid == id: if mid == id:
print("Try to remove me :", mid) print("Try to remove me :", mid)
continue continue
@ -201,18 +209,18 @@ func send_account():
func get_player_position(): func get_player_position():
if state_connexion != Connexion.CONNECTED: if state_connexion != Connexion.CONNECTED:
return return
var pos:PackedFloat64Array = PackedFloat64Array() var data:PackedFlowPush = PackedFlowPush.new()
var posRaw:Vector3 = player_position.get_my_position() #get_position() var posRaw:Vector3 = player_position.get_my_position() #get_position()
pos.append(posRaw.x)
pos.append(posRaw.y)
pos.append(posRaw.z)
var rotRaw:Vector3 = player_position.get_my_rotation() var rotRaw:Vector3 = player_position.get_my_rotation()
pos.append(rotRaw.x) data.put_vector3(posRaw)
pos.append(rotRaw.y) data.put_vector3(rotRaw)
pos.append(rotRaw.z) if player_position.is_jump():
var data:PackedByteArray = PackedByteArray() data.put_u8(1)
data += pos.to_byte_array() data.put_u8(player_position.get_tickjump())
errorEnet = dataEnet.send(2, data, 1) data.put_vector3(player_position.get_jump())
else:
data.put_u8(0)
errorEnet = data.push(dataEnet, 2, 1)
if errorEnet == ERR_UNCONFIGURED: if errorEnet == ERR_UNCONFIGURED:
update_state(Connexion.NONE) update_state(Connexion.NONE)
elif errorEnet != OK: elif errorEnet != OK:

View file

@ -1,4 +1,4 @@
class_name PackedFlow class_name PackedFlowPull
var data:PackedByteArray = PackedByteArray() var data:PackedByteArray = PackedByteArray()

View file

@ -0,0 +1,35 @@
class_name PackedFlowPush
var data:PackedByteArray = PackedByteArray()
func _init() -> void:
self.data.clear()
func put_u8(value:int) -> void:
data.append(value)
func put_u64(value:int) -> void:
var pos:PackedInt64Array = PackedInt64Array()
pos.append(value)
data += pos.to_byte_array()
func puf_f64(value:float) -> void:
var pos:PackedFloat64Array = PackedFloat64Array()
pos.append(value)
data += pos.to_byte_array()
func put_vector3(value:Vector3) -> void:
var pos:PackedFloat64Array = PackedFloat64Array()
pos.append(value.x)
pos.append(value.y)
pos.append(value.z)
data += pos.to_byte_array()
func push(dataEnet:ENetPacketPeer, channel:int, flags:int) -> Error:
return dataEnet.send(channel, data, flags)

View file

@ -113,6 +113,44 @@ struct Position {
z: f64, z: f64,
} }
*/ */
/*
* User
*/
struct PacketFlowPull {
offset: usize,
}
impl PacketFlowPull {
pub fn new() -> PacketFlowPull {
Self {
offset: 0,
}
}
pub fn get_u8(&mut self, packet: &enet::Packet) -> u8 {
let next:usize = self.offset + 1;
let mut data: &[u8] = &packet.data()[self.offset..next];
let value:u8 = data.read_u8().unwrap();
self.offset = next;
value
}
pub fn get_u64(&mut self, packet: &enet::Packet) -> u64 {
let next:usize = self.offset + 8;
let mut data: &[u8] = &packet.data()[self.offset..next];
let value:u64 = data.read_u64::<LittleEndian>().unwrap();
self.offset = next;
value
}
pub fn get_f64(&mut self, packet: &enet::Packet) -> f64 {
let next:usize = self.offset + 8;
let mut data: &[u8] = &packet.data()[self.offset..next];
let value:f64 = data.read_f64::<LittleEndian>().unwrap();
self.offset = next;
value
}
}
/* /*
* User * User
*/ */
@ -127,10 +165,16 @@ struct User {
rx: f64, // rotation X rx: f64, // rotation X
ry: f64, // rotation Y ry: f64, // rotation Y
rz: f64, // rotation Z rz: f64, // rotation Z
vx: f64, // velocity X
vy: f64, // velocity Y
vz: f64, // velocity Z
position_updated: bool, position_updated: bool,
lasttime: Instant, lasttime: Instant,
sendfull: u8, sendfull: u8,
lastupdate: u8, lastupdate: u8,
jump: bool,
sendjump:u8,
tickjump:u8,
} }
impl PartialEq for User { impl PartialEq for User {
@ -156,10 +200,16 @@ impl User {
self.rx = 0.0; self.rx = 0.0;
self.ry = 0.0; self.ry = 0.0;
self.rz = 0.0; self.rz = 0.0;
self.vx = 0.0;
self.vy = 0.0;
self.vz = 0.0;
self.position_updated = false; self.position_updated = false;
self.lasttime = Instant::now(); self.lasttime = Instant::now();
self.sendfull = 0; self.sendfull = 0;
self.lastupdate = 1; self.lastupdate = 1;
self.jump = false;
self.tickjump = 0;
self.sendjump = 0;
} }
pub fn set_inactive(&mut self) { pub fn set_inactive(&mut self) {
self.active = false; self.active = false;
@ -218,13 +268,32 @@ impl User {
self.lastupdate = lastupdate; self.lastupdate = lastupdate;
} }
} }
pub fn update_jump(&mut self, vx:f64, vy:f64, vz:f64, tickjump:u8, lastupdate:u8) {
self.vx = vx;
self.vy = vy;
self.vz = vz;
self.jump = true;
self.lastupdate = lastupdate;
self.tickjump = tickjump;
self.sendjump = 0;
}
pub fn update_no_jump(&mut self, lastupdate:u8) {
if self.jump == true {
self.vx = 0.0;
self.vy = 0.0;
self.vz = 0.0;
self.jump = false;
self.lastupdate = lastupdate;
self.sendjump = 0;
}
}
/* /*
pub fn get_position(&mut self) -> Position { pub fn get_position(&mut self) -> Position {
let pos:Position = Position{x: self.x, y: self.y, z: self.z}; let pos:Position = Position{x: self.x, y: self.y, z: self.z};
return pos; return pos;
} }
*/ */
pub fn push_packet_get_position(&self, data:&mut Vec<u8>) { pub fn push_packet_player(&mut self, data:&mut Vec<u8>) {
push_u64(data, self.id); push_u64(data, self.id);
push_f64(data, self.x); push_f64(data, self.x);
push_f64(data, self.y); push_f64(data, self.y);
@ -233,6 +302,18 @@ impl User {
push_f64(data, self.ry); push_f64(data, self.ry);
push_f64(data, self.rz); push_f64(data, self.rz);
push_u8(data, self.lastupdate); push_u8(data, self.lastupdate);
if self.sendjump > 0 && self.jump == true {
push_u8(data, 1);
push_u8(data,self.tickjump);
push_f64(data, self.vx);
push_f64(data, self.vy);
push_f64(data, self.vz);
self.sendjump -= 1;
} else {
push_u8(data, 0);
self.sendjump = 0;
}
} }
pub fn push_packet_id(&self, data:&mut Vec<u8>) { pub fn push_packet_id(&self, data:&mut Vec<u8>) {
push_u64(data, self.id); push_u64(data, self.id);
@ -367,12 +448,17 @@ impl Users {
id: id, id: id,
x: 0.0, y: 10.0, z:0.0, x: 0.0, y: 10.0, z:0.0,
rx: 0.0, ry: 0.0, rz:0.0, rx: 0.0, ry: 0.0, rz:0.0,
vx: 0.0, vy: 0.0, vz:0.0,
position_updated:true, position_updated:true,
jump: false,
lasttime: Instant::now(), lasttime: Instant::now(),
sendfull:10, sendfull:10,
lastupdate:1} ); lastupdate:1,
sendjump: 0,
tickjump:0} );
id id
} }
/*
pub fn update_pos_rot(&mut self, address: Address, x:f64, y:f64, z:f64, rx:f64, ry:f64, rz:f64, tick:u8) { pub fn update_pos_rot(&mut self, address: Address, x:f64, y:f64, z:f64, rx:f64, ry:f64, rz:f64, tick:u8) {
for user in self.users.iter_mut() { for user in self.users.iter_mut() {
if user.address == address { if user.address == address {
@ -380,6 +466,7 @@ impl Users {
} }
} }
} }
*/
pub fn set_inactive(&mut self, address: Address) -> u64 { pub fn set_inactive(&mut self, address: Address) -> u64 {
for user in self.users.iter_mut() { for user in self.users.iter_mut() {
if user.address == address { if user.address == address {
@ -455,11 +542,20 @@ impl Users {
error!("invalid address {}:{}", address.ip(), address.port()); error!("invalid address {}:{}", address.ip(), address.port());
Err("invalid address") Err("invalid address")
} }
pub fn push_packet_get_position(&self, data:&mut Vec<u8>, getall: bool) -> u8 { pub fn get_user_rw(&mut self, address: Address) -> Result<&mut User, &'static str> {
for user in &mut self.users {
if user.address == address {
return Ok(user);
}
}
error!("invalid address {}:{}", address.ip(), address.port());
Err("invalid address")
}
pub fn push_packet_player(&mut self, data:&mut Vec<u8>, getall: bool) -> u8 {
let mut nb:u8 = 0; let mut nb:u8 = 0;
for user in &self.users { for user in &mut self.users {
if user.active && (getall || user.position_updated ) { if user.active && (getall || user.position_updated ) {
user.push_packet_get_position(data); user.push_packet_player(data);
nb += 1; nb += 1;
} }
} }
@ -558,11 +654,11 @@ fn send_message(sender:Peer<()>, data: &[u8] ) -> Result<(), Error> {
) )
} }
fn send_message_connect_ok(sender:Peer<()>, user: &User) -> Result<(), Error> { fn send_message_connect_ok(sender:Peer<()>, user: &mut User) -> Result<(), Error> {
let mut data:Vec<u8> = Vec::new(); let mut data:Vec<u8> = Vec::new();
data.push(1); // return connexion request data.push(1); // return connexion request
data.push(0); // return ok data.push(0); // return ok
user.push_packet_get_position(&mut data); user.push_packet_player(&mut data);
let c: &[u8] = &data; let c: &[u8] = &data;
send_message(sender, c) send_message(sender, c)
} }
@ -843,8 +939,8 @@ fn main() -> anyhow::Result<()> {
StateUsers::NotDefined => { StateUsers::NotDefined => {
debug!("NotDefined"); debug!("NotDefined");
force_update = cli.forceupdate; force_update = cli.forceupdate;
let _id = users.add(s.to_string(), sender.address()); let _id: u64 = users.add(s.to_string(), sender.address());
let ret = users.get_user(sender.address()); let ret: Result<&mut User, &str> = users.get_user_rw(sender.address());
match ret { match ret {
Ok(user) => { Ok(user) => {
info!("Add player : {} (id:{})", user.username, user.id); info!("Add player : {} (id:{})", user.username, user.id);
@ -860,8 +956,8 @@ fn main() -> anyhow::Result<()> {
StateUsers::Inactive => { StateUsers::Inactive => {
debug!("Inactive"); debug!("Inactive");
force_update = cli.forceupdate; force_update = cli.forceupdate;
let _id = users.set_active(sender.address()); let _id: u64 = users.set_active(sender.address());
let ret = users.get_user(sender.address()); let ret: Result<&mut User, &str> = users.get_user_rw(sender.address());
match ret { match ret {
Ok(user) => { Ok(user) => {
info!("Inactive player : {} (id:{})", user.username, user.id); info!("Inactive player : {} (id:{})", user.username, user.id);
@ -877,8 +973,8 @@ fn main() -> anyhow::Result<()> {
StateUsers::UpdateUser => { StateUsers::UpdateUser => {
debug!("UpdateUser"); debug!("UpdateUser");
force_update = cli.forceupdate; force_update = cli.forceupdate;
let _id = users.update_username(s.to_string(), sender.address()); let _id: u64 = users.update_username(s.to_string(), sender.address());
let ret = users.get_user(sender.address()); let ret: Result<&mut User, &str> = users.get_user_rw(sender.address());
match ret { match ret {
Ok(user) => { Ok(user) => {
info!("Add player : {} (id:{})", user.username, user.id); info!("Add player : {} (id:{})", user.username, user.id);
@ -894,8 +990,8 @@ fn main() -> anyhow::Result<()> {
StateUsers::UpdateAddress => { StateUsers::UpdateAddress => {
debug!("UpdateAddress"); debug!("UpdateAddress");
force_update = cli.forceupdate; force_update = cli.forceupdate;
let _id = users.update_address(s.to_string(), sender.address()); let _id: u64 = users.update_address(s.to_string(), sender.address());
let ret = users.get_user(sender.address()); let ret: Result<&mut User, &str> = users.get_user_rw(sender.address());
match ret { match ret {
Ok(user) => { Ok(user) => {
info!("Add player : {} (id:{})", user.username, user.id); info!("Add player : {} (id:{})", user.username, user.id);
@ -916,8 +1012,8 @@ fn main() -> anyhow::Result<()> {
StateUsers::Done => { StateUsers::Done => {
debug!("Done"); debug!("Done");
force_update = cli.forceupdate; force_update = cli.forceupdate;
let _id = users.get_id(sender.address()); let _id: u64 = users.get_id(sender.address());
let ret = users.get_user(sender.address()); let ret: Result<&mut User, &str> = users.get_user_rw(sender.address());
match ret { match ret {
Ok(user) => { Ok(user) => {
stat.inc_recv_done(); stat.inc_recv_done();
@ -932,6 +1028,52 @@ fn main() -> anyhow::Result<()> {
} }
} }
2 => { 2 => {
/*
let mut xbytes: &[u8] = &packet.data()[0..8];
let x = xbytes.read_f64::<LittleEndian>().unwrap();
let mut ybytes: &[u8] = &packet.data()[8..16];
let y = ybytes.read_f64::<LittleEndian>().unwrap();
let mut zbytes: &[u8] = &packet.data()[16..24];
let z = zbytes.read_f64::<LittleEndian>().unwrap();
let mut rxbytes: &[u8] = &packet.data()[24..32];
let rx = rxbytes.read_f64::<LittleEndian>().unwrap();
let mut rybytes: &[u8] = &packet.data()[32..40];
let ry = rybytes.read_f64::<LittleEndian>().unwrap();
let mut rzbytes: &[u8] = &packet.data()[40..48];
let rz = rzbytes.read_f64::<LittleEndian>().unwrap();
*/
let mut reader:PacketFlowPull = PacketFlowPull::new();
let x = reader.get_f64(packet);
let y = reader.get_f64(packet);
let z = reader.get_f64(packet);
let rx = reader.get_f64(packet);
let ry = reader.get_f64(packet);
let rz = reader.get_f64(packet);
// let mut jumpbytes: &[u8] = &packet.data()[49..49];
// let jump = jumpbytes.read_u8().unwrap();
let ret = users.get_user_rw(sender.address());
match ret {
Ok(user) => {
user.update_pos_rot(x, y, z, rx, ry, rz, tick);
let extra: u8 = reader.get_u8(packet);
let jump: bool = (extra & 1) == 1;
if jump == true {
let tickjump = reader.get_u8(packet);
let vx = reader.get_f64(packet);
let vy = reader.get_f64(packet);
let vz = reader.get_f64(packet);
user.update_jump(vx, vy, vz, tickjump, tick);
} else {
user.update_no_jump(tick);
}
},
Err(_e) => {
send_message_connect_ko(sender.clone()).unwrap();
stat.inc_recv_invaliduser();
},
};
/*
let mut xbytes: &[u8] = &packet.data()[0..8]; let mut xbytes: &[u8] = &packet.data()[0..8];
let x = xbytes.read_f64::<LittleEndian>().unwrap(); let x = xbytes.read_f64::<LittleEndian>().unwrap();
let mut ybytes: &[u8] = &packet.data()[8..16]; let mut ybytes: &[u8] = &packet.data()[8..16];
@ -945,6 +1087,7 @@ fn main() -> anyhow::Result<()> {
let mut rzbytes: &[u8] = &packet.data()[40..48]; let mut rzbytes: &[u8] = &packet.data()[40..48];
let rz = rzbytes.read_f64::<LittleEndian>().unwrap(); let rz = rzbytes.read_f64::<LittleEndian>().unwrap();
users.update_pos_rot(sender.address(), x, y, z, rx, ry, rz, tick); users.update_pos_rot(sender.address(), x, y, z, rx, ry, rz, tick);
*/
} }
_ => { _ => {
send_message_connect_ko(sender.clone()).unwrap(); send_message_connect_ko(sender.clone()).unwrap();
@ -970,7 +1113,7 @@ fn main() -> anyhow::Result<()> {
let mut data3:Vec<u8> = Vec::new(); let mut data3:Vec<u8> = Vec::new();
data.push(3); // return connexion request data.push(3); // return connexion request
// get list user position // get list user position
let nb:u8 = users.push_packet_get_position(&mut data2, force_update > 0); let nb:u8 = users.push_packet_player(&mut data2, force_update > 0);
if force_update > 0 { if force_update > 0 {
force_update -= 1; force_update -= 1;
} }