diff --git a/player/AnimationController.cs b/player/AnimationController.cs index 3ffbc35..53b899c 100644 --- a/player/AnimationController.cs +++ b/player/AnimationController.cs @@ -1,4 +1,4 @@ -public partial class AnimationController : Node3D +public partial class AnimationController : Node3D, IInitalizable { [Export] public Skeleton3D Skeleton { get; set; } [Export] public BoneAttachment3D RootBone { get; set; } @@ -12,23 +12,15 @@ public partial class AnimationController : Node3D // Current amount the body is turned due to walking sideways. float _bodyYaw = 0.0f; - CharacterBody3D _player; - MovementController _movementController; - CameraController _cameraController; - Camera3D _camera; + Player _player; Transform3D _cameraDefaultTransform; - AnimationTree _animTree; Animation _walkForwardAnim; Animation _walkBackwardAnim; - - public override void _Ready() + public void Initialize(Player player) { - _player = GetParent(); - _movementController = _player.GetNode("MovementController"); - _cameraController = _player.GetNode("CameraController"); - _camera = _cameraController.Camera; - _cameraDefaultTransform = _camera.Transform; + _player = player; + _cameraDefaultTransform = _player.Camera.Camera.Transform; _animTree = GetNode("AnimationTree"); _walkForwardAnim = _animTree.GetAnimation("walk_forward"); @@ -53,7 +45,7 @@ public partial class AnimationController : Node3D { foreach (var bone in _bones.Values) bone.Transform = Skeleton.GetBonePose(bone.BoneIdx); - _camera.Transform = _cameraDefaultTransform; + _player.Camera.Camera.Transform = _cameraDefaultTransform; } void HandleTurning(double delta) @@ -62,16 +54,16 @@ public partial class AnimationController : Node3D const float TurnEnd = 5.0f; // Stop turning when body is this close to camera rotation. const float TurnSpeed = 6.0f; - var yaw = _cameraController.CurrentYaw; // Camera yaw relative to player yaw. - var isMoving = _movementController.RealMoveSpeed > 0.01f; + var yaw = _player.Camera.CurrentYaw; // Camera yaw relative to player yaw. + var isMoving = _player.Movement.RealMoveSpeed > 0.01f; _isTurning = isMoving || (Abs(yaw) > DegToRad(TurnBegin)); if (_isTurning) { var yawDelta = Sign(yaw) * Min(Abs(yaw), Abs(yaw) * TurnSpeed * (float)delta); - _cameraController.CurrentYaw -= (float)yawDelta; + _player.Camera.CurrentYaw -= (float)yawDelta; _player.RotateY(yawDelta); - if (Abs(_cameraController.CurrentYaw) < DegToRad(TurnEnd)) + if (Abs(_player.Camera.CurrentYaw) < DegToRad(TurnEnd)) _isTurning = false; } } @@ -83,26 +75,26 @@ public partial class AnimationController : Node3D const float PitchFactorNeck = 0.25f; const float PitchFactorHead = 0.35f; - var pitch = _cameraController.CurrentPitch; + var pitch = _player.Camera.CurrentPitch; _bones["LowerBody"].RotateX(pitch * PitchFactorLowerBody); _bones["UpperBody"].RotateX(-pitch * PitchFactorUpperBody); _bones["Neck"].RotateX(-pitch * PitchFactorNeck); _bones["Head"].RotateX(-pitch * PitchFactorHead); _bones["UpperArm_L"].RotateX(pitch * (PitchFactorLowerBody + PitchFactorUpperBody) / 2); _bones["UpperArm_R"].RotateX(pitch * (PitchFactorLowerBody + PitchFactorUpperBody) / 2); - _camera.RotateX(pitch * (1 - PitchFactorLowerBody - PitchFactorUpperBody - PitchFactorNeck - PitchFactorHead)); + _player.Camera.Camera.RotateX(pitch * (1 - PitchFactorLowerBody - PitchFactorUpperBody - PitchFactorNeck - PitchFactorHead)); const float YawFactorLowerBody = 0.06f; const float YawFactorUpperBody = 0.18f; const float YawFactorNeck = 0.2f; const float YawFactorHead = 0.3f; - var yaw = _cameraController.CurrentYaw; + var yaw = _player.Camera.CurrentYaw; _bones["LowerBody"].GlobalRotate(Vector3.Up, yaw * YawFactorLowerBody); _bones["UpperBody"].GlobalRotate(Vector3.Up, yaw * YawFactorUpperBody); _bones["Neck"].GlobalRotate(Vector3.Up, yaw * YawFactorNeck); _bones["Head"].GlobalRotate(Vector3.Up, yaw * YawFactorHead); - _camera.GlobalRotate(Vector3.Up, yaw * (1 - YawFactorLowerBody - YawFactorUpperBody - YawFactorNeck - YawFactorHead)); + _player.Camera.Camera.GlobalRotate(Vector3.Up, yaw * (1 - YawFactorLowerBody - YawFactorUpperBody - YawFactorNeck - YawFactorHead)); // How much of the "ideal" camera rotation (rather than animation rotation) should be applied. const float CameraFactorIdealPitch = 0.7f; @@ -110,23 +102,23 @@ public partial class AnimationController : Node3D const float CameraFactorIdealRoll = 0.9f; var global_yaw = _player.Rotation.Y + yaw; - var cameraRotation = _camera.GlobalRotation; + var cameraRotation = _player.Camera.Camera.GlobalRotation; cameraRotation.X = LerpAngle(cameraRotation.X, pitch, CameraFactorIdealPitch); cameraRotation.Y = LerpAngle(cameraRotation.Y, global_yaw, CameraFactorIdealYaw); cameraRotation.Z = LerpAngle(cameraRotation.Z, 0, CameraFactorIdealRoll); - _camera.GlobalRotation = cameraRotation; + _player.Camera.Camera.GlobalRotation = cameraRotation; } void HandleWalkingAnimation(double delta) { var input = Input.GetVector("move_strafe_left", "move_strafe_right", "move_forward", "move_back"); - var isOnFloor = _movementController.TimeSinceOnFloor < 0.25f; - var isMoving = _movementController.RealMoveSpeed > 0.01f; + var isOnFloor = _player.Movement.TimeSinceOnFloor < 0.25f; + var isMoving = _player.Movement.RealMoveSpeed > 0.01f; var isMovingForward = input.Y <= 0; var walkState = (isOnFloor && isMoving) ? "move" : "idle"; var walkDirection = isMovingForward ? "forward" : "backward"; - var walkSpeed = _movementController.RealMoveSpeed / _movementController.MaxSpeed; + var walkSpeed = _player.Movement.RealMoveSpeed / _player.Movement.MaxSpeed; var targetBodyYaw = -(isMovingForward ? Vector2.Up : Vector2.Down).AngleTo(input); _animTree.Set("parameters/walk_state/transition_request", walkState); diff --git a/player/MovementController.cs b/player/MovementController.cs index 11ea6cb..6caa122 100644 --- a/player/MovementController.cs +++ b/player/MovementController.cs @@ -1,11 +1,11 @@ -public partial class MovementController : Node +public partial class MovementController : Node, IInitalizable { [ExportGroup("Movement")] [Export] public float Acceleration { get; set; } = 4.0f; [Export] public float MaxSpeed { get; set; } = 2.1f; [Export] public float FrictionFloor { get; set; } = 12.0f; [Export] public float FrictionAir { get; set; } = 2.0f; - [Export] public float Gravity { get; set; } = 12.0f; + public float Gravity { get; } = (float)ProjectSettings.GetSetting("physics/3d/default_gravity"); [ExportGroup("Jumping")] [Export] public float JumpVelocity { get; set; } = 4.0f; @@ -18,13 +18,9 @@ public partial class MovementController : Node public float TimeSinceJumpPressed { get; private set; } = float.PositiveInfinity; public float TimeSinceOnFloor { get; private set; } = float.PositiveInfinity; - CharacterBody3D _player; - CameraController _cameraController; - public override void _Ready() - { - _player = GetParent(); - _cameraController = _player.GetNode("CameraController"); - } + Player _player; + public void Initialize(Player player) + => _player = player; public override void _UnhandledInput(InputEvent @event) { @@ -43,7 +39,7 @@ public partial class MovementController : Node // TODO: Gravity. // velocity.Y -= Gravity * (float)delta; - var basis = _player.Basis.Rotated(Vector3.Up, _cameraController.CurrentYaw); + var basis = _player.Basis.Rotated(Vector3.Up, _player.Camera.CurrentYaw); var target = basis * new Vector3(input.X, 0, input.Y) * MaxSpeed; var isMoving = target.Dot(horVelocity) > 0.0f; diff --git a/player/PickupController.cs b/player/PickupController.cs index 1e520fe..3839199 100644 --- a/player/PickupController.cs +++ b/player/PickupController.cs @@ -1,4 +1,4 @@ -public partial class PickupController : Node3D +public partial class PickupController : Node3D, IInitalizable { public Item CurrentItem { get; private set; } public bool IsCurrentItemHeld { get; private set; } @@ -8,10 +8,11 @@ public partial class PickupController : Node3D [Export] public float PickupDistance { get; set; } = 2.0f; Node3D _world; - public override void _Ready() + public void Initialize(Player player) { // TODO: Find a better way to find the world. - _world = (Node3D)FindParent("Warehouse"); + // For now we just use the parent of the `Player` object. + _world = player.GetParent(); } public override void _UnhandledInput(InputEvent @event) diff --git a/player/Player.cs b/player/Player.cs new file mode 100644 index 0000000..62703c2 --- /dev/null +++ b/player/Player.cs @@ -0,0 +1,24 @@ +public partial class Player : CharacterBody3D +{ + public MovementController Movement { get; private set; } + public CameraController Camera { get; private set; } + public AnimationController Animation { get; private set; } + public PickupController Pickup { get; private set; } + + public override void _Ready() + { + Movement = GetNode("MovementController"); + Camera = GetNode("CameraController"); + Animation = GetNode("AnimationController"); + Pickup = GetNode("PickupController"); + + foreach (var child in GetChildren()) + if (child is IInitalizable init) + init.Initialize(this); + } +} + +public interface IInitalizable +{ + void Initialize(T param); +} diff --git a/player/player.tscn b/player/player.tscn index 133c831..0df4e12 100644 --- a/player/player.tscn +++ b/player/player.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=21 format=3 uid="uid://dmd7w2r8s0x6y"] +[gd_scene load_steps=22 format=3 uid="uid://dmd7w2r8s0x6y"] [ext_resource type="PackedScene" uid="uid://bfh3eqgywr0ul" path="res://assets/models/character.blend" id="1_3qh37"] +[ext_resource type="Script" path="res://player/Player.cs" id="1_a0mas"] [ext_resource type="Script" path="res://player/MovementController.cs" id="2_1pst4"] [ext_resource type="Script" path="res://player/PickupController.cs" id="2_ns2pe"] [ext_resource type="Script" path="res://player/CameraController.cs" id="2_r3gna"] @@ -10,7 +11,7 @@ radius = 0.3 height = 1.5 -[sub_resource type="Animation" id="Animation_wjxw2"] +[sub_resource type="Animation" id="Animation_arrr6"] resource_name = "idle_loop" length = 2.5 loop_mode = 1 @@ -155,7 +156,7 @@ tracks/19/interp = 1 tracks/19/loop_wrap = true tracks/19/keys = PackedFloat32Array(0, 1, -0.707001, 4.51326e-18, -4.26954e-18, 0.707212, 0.166667, 1, -0.707898, 4.51333e-18, -4.26961e-18, 0.706315, 0.233333, 1, -0.708755, 4.5134e-18, -4.26967e-18, 0.705454, 0.3, 1, -0.709809, 4.51347e-18, -4.26974e-18, 0.704395, 0.366667, 1, -0.711039, 4.51354e-18, -4.26981e-18, 0.703153, 0.466667, 1, -0.713127, 4.51363e-18, -4.26989e-18, 0.701034, 0.5, 1, -0.713869, 4.51366e-18, -4.26991e-18, 0.700279, 0.533333, 1, -0.71463, 4.51367e-18, -4.26993e-18, 0.699502, 0.566667, 1, -0.715401, 4.51369e-18, -4.26994e-18, 0.698714, 0.6, 1, -0.716178, 4.51369e-18, -4.26995e-18, 0.697918, 0.633333, 1, -0.716958, 4.51369e-18, -4.26995e-18, 0.697116, 0.733333, 1, -0.719267, 4.51367e-18, -4.26992e-18, 0.694734, 0.8, 1, -0.720739, 4.51362e-18, -4.26988e-18, 0.693206, 0.866667, 1, -0.722115, 4.51356e-18, -4.26982e-18, 0.691773, 0.933333, 1, -0.723357, 4.51349e-18, -4.26976e-18, 0.690474, 1, 1, -0.724446, 4.51342e-18, -4.26969e-18, 0.689331, 1.06667, 1, -0.725318, 4.51335e-18, -4.26963e-18, 0.688414, 1.16667, 1, -0.726204, 4.51327e-18, -4.26955e-18, 0.687479, 1.43333, 1, -0.725318, 0, 0, 0.688414, 1.5, 1, -0.724446, 0, 0, 0.689331, 1.6, 1, -0.722753, 0, 0, 0.691106, 1.66667, 1, -0.721445, 0, 0, 0.692472, 1.73333, 1, -0.720012, 0, 0, 0.693961, 1.76667, 1, -0.719267, 0, 0, 0.694734, 1.8, 1, -0.718508, 0, 0, 0.695519, 1.83333, 1, -0.717737, 0, 0, 0.696315, 1.86667, 1, -0.716958, 0, 0, 0.697116, 1.9, 1, -0.716178, 0, 0, 0.697918, 1.93333, 1, -0.715401, 0, 0, 0.698714, 1.96667, 1, -0.71463, 0, 0, 0.699502, 2.03333, 1, -0.713127, 0, 0, 0.701034, 2.1, 1, -0.711709, 0, 0, 0.702475, 2.16667, 1, -0.710399, 0, 0, 0.703799, 2.23333, 1, -0.709259, 0, 0, 0.704948, 2.3, 1, -0.7083, 0, 0, 0.705911, 2.36667, 1, -0.707572, 0, 0, 0.706641, 2.5, 1, -0.706937, 4.51325e-18, -4.26953e-18, 0.707277) -[sub_resource type="Animation" id="Animation_f761b"] +[sub_resource type="Animation" id="Animation_juvj2"] resource_name = "walk_backward_loop" length = 0.833333 loop_mode = 1 @@ -300,7 +301,7 @@ tracks/19/interp = 1 tracks/19/loop_wrap = true tracks/19/keys = PackedFloat32Array(0, 1, 5.1721e-09, -1.73886e-07, 0.0182467, 0.999834) -[sub_resource type="Animation" id="Animation_sxqf4"] +[sub_resource type="Animation" id="Animation_0igae"] resource_name = "walk_forward_loop" length = 0.833333 loop_mode = 1 @@ -445,7 +446,7 @@ tracks/19/interp = 1 tracks/19/loop_wrap = true tracks/19/keys = PackedFloat32Array(0, 1, 5.1721e-09, -1.73886e-07, 0.0182467, 0.999834) -[sub_resource type="Animation" id="Animation_7sfwo"] +[sub_resource type="Animation" id="Animation_5quca"] resource_name = "walk_left_loop" length = 0.833333 loop_mode = 1 @@ -590,7 +591,7 @@ tracks/19/interp = 1 tracks/19/loop_wrap = true tracks/19/keys = PackedFloat32Array(0, 1, 5.1721e-09, -1.73886e-07, 0.0182467, 0.999834) -[sub_resource type="Animation" id="Animation_0gu1w"] +[sub_resource type="Animation" id="Animation_otirq"] resource_name = "walk_right_loop" length = 0.833333 loop_mode = 1 @@ -735,13 +736,13 @@ tracks/19/interp = 1 tracks/19/loop_wrap = true tracks/19/keys = PackedFloat32Array(0, 1, 5.1721e-09, -1.73886e-07, 0.0182467, 0.999834) -[sub_resource type="AnimationLibrary" id="AnimationLibrary_og84j"] +[sub_resource type="AnimationLibrary" id="AnimationLibrary_4fkhn"] _data = { -"idle": SubResource("Animation_wjxw2"), -"walk_backward": SubResource("Animation_f761b"), -"walk_forward": SubResource("Animation_sxqf4"), -"walk_left": SubResource("Animation_7sfwo"), -"walk_right": SubResource("Animation_0gu1w") +"idle": SubResource("Animation_arrr6"), +"walk_backward": SubResource("Animation_juvj2"), +"walk_forward": SubResource("Animation_0igae"), +"walk_left": SubResource("Animation_5quca"), +"walk_right": SubResource("Animation_otirq") } [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_4v5ew"] @@ -800,6 +801,7 @@ node_connections = [&"output", 0, &"walk_state", &"walk_direction", 0, &"walk_fo transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.75, 0) collision_layer = 4 collision_mask = 3 +script = ExtResource("1_a0mas") [node name="CollisionShape3D" type="CollisionShape3D" parent="."] shape = SubResource("CapsuleShape3D_h1mfd") @@ -808,35 +810,35 @@ shape = SubResource("CapsuleShape3D_h1mfd") transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, -0.75, 0) [node name="Root" type="BoneAttachment3D" parent="Model/Skeleton" index="0"] -transform = Transform3D(-1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0.198533, 0) +transform = Transform3D(-1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0.199954, 0) bone_name = "Root" bone_idx = 2 use_external_skeleton = true external_skeleton = NodePath("../Skeleton3D") [node name="LowerBody" type="BoneAttachment3D" parent="Model/Skeleton/Root"] -transform = Transform3D(-1, -1.88864e-09, 8.74024e-08, 8.71645e-08, 0.0552555, 0.998472, -6.71522e-09, 0.998472, -0.0552555, 0, 0, -0.199593) +transform = Transform3D(-1, -1.45235e-11, 8.74228e-08, 8.71645e-08, 0.0766475, 0.997058, -6.71523e-09, 0.997058, -0.0766476, 0, 0, -0.199593) bone_name = "LowerBody" bone_idx = 3 use_external_skeleton = true external_skeleton = NodePath("../../Skeleton3D") [node name="UpperBody" type="BoneAttachment3D" parent="Model/Skeleton/Root/LowerBody"] -transform = Transform3D(1, -6.95499e-09, 8.71457e-08, 0, 0.99683, 0.0795558, -8.74228e-08, -0.0795558, 0.99683, 8.88178e-16, 0.154362, 0) +transform = Transform3D(1, -1.0796e-08, 8.67536e-08, 0, 0.992346, 0.123492, -8.74228e-08, -0.123492, 0.992346, 8.88178e-16, 0.154362, 7.45058e-09) bone_name = "UpperBody" bone_idx = 4 use_external_skeleton = true external_skeleton = NodePath("../../../Skeleton3D") [node name="Neck" type="BoneAttachment3D" parent="Model/Skeleton/Root/LowerBody/UpperBody"] -transform = Transform3D(1, 4.44089e-16, 7.10543e-15, -2.22045e-16, 0.998891, -0.0470728, 7.10543e-15, 0.0470728, 0.998891, -6.66134e-16, 0.251888, 5.58794e-09) +transform = Transform3D(1, -8.30499e-17, 1.42109e-14, -1.33227e-15, 0.998891, -0.0470728, 7.10543e-15, 0.0470728, 0.998891, 2.22045e-16, 0.251888, -1.11759e-08) bone_name = "Neck" bone_idx = 5 use_external_skeleton = true external_skeleton = NodePath("../../../../Skeleton3D") [node name="Head" type="BoneAttachment3D" parent="Model/Skeleton/Root/LowerBody/UpperBody/Neck"] -transform = Transform3D(-1, 5.04258e-10, 8.74213e-08, 8.74228e-08, 0.00576782, 0.999983, 0, 0.999983, -0.00576782, 7.77156e-16, 0.101598, 0) +transform = Transform3D(-1, 1.13687e-12, 8.74228e-08, 8.74228e-08, 1.31093e-05, 1, -7.10543e-15, 1, -1.32285e-05, -2.22045e-16, 0.101598, 1.86265e-09) bone_name = "Head" bone_idx = 6 use_external_skeleton = true @@ -847,38 +849,38 @@ transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0.0 cull_mask = 1 [node name="UpperArm_L" type="BoneAttachment3D" parent="Model/Skeleton/Root/LowerBody/UpperBody"] -transform = Transform3D(-0.95011, 0.311913, -0.000703218, -0.311536, -0.949068, -0.047061, -0.0153463, -0.0444941, 0.998892, 0.0873834, 0.213866, -0.00179177) +transform = Transform3D(-0.939275, 0.343167, -1.43629e-05, -0.342785, -0.938234, -0.0470729, -0.0161673, -0.0442095, 0.998891, 0.0873834, 0.213866, -0.00179178) bone_name = "UpperArm_L" bone_idx = 7 use_external_skeleton = true external_skeleton = NodePath("../../../../Skeleton3D") [node name="UpperArm_R" type="BoneAttachment3D" parent="Model/Skeleton/Root/LowerBody/UpperBody"] -transform = Transform3D(-0.95011, -0.311913, 0.000703218, 0.311536, -0.949068, -0.047061, 0.0153463, -0.0444941, 0.998892, -0.0873834, 0.213866, -0.00179177) +transform = Transform3D(-0.939275, -0.343167, 1.43629e-05, 0.342785, -0.938234, -0.0470729, 0.0161673, -0.0442095, 0.998891, -0.0873834, 0.213866, -0.00179178) bone_name = "UpperArm_R" bone_idx = 14 use_external_skeleton = true external_skeleton = NodePath("../../../../Skeleton3D") [node name="Skeleton3D" parent="Model/Skeleton" index="1"] -bones/1/rotation = Quaternion(-0.725917, 3.05019e-18, -2.88548e-18, 0.687782) -bones/2/position = Vector3(0, 0.198533, 0) -bones/3/rotation = Quaternion(2.93496e-08, 0.72638, 0.687293, 3.23927e-08) -bones/4/rotation = Quaternion(-0.0398095, 4.36767e-08, 1.74013e-09, 0.999207) -bones/6/rotation = Quaternion(3.09976e-08, 0.709143, 0.705065, 3.08193e-08) -bones/7/rotation = Quaternion(-0.00406451, -0.0231861, 0.987177, -0.157887) -bones/8/rotation = Quaternion(0.000100147, 0.000337309, -0.079069, 0.996869) -bones/9/rotation = Quaternion(-7.45954e-05, -0.000352905, -0.000920106, 1) -bones/14/rotation = Quaternion(0.00406451, -0.0231861, 0.987177, 0.157887) -bones/15/rotation = Quaternion(0.000100147, -0.00033731, 0.079069, 0.996869) -bones/16/rotation = Quaternion(-7.45954e-05, 0.000352905, 0.000920106, 1) -bones/21/rotation = Quaternion(0.0107274, -0.719883, 0.693927, 0.010901) -bones/22/rotation = Quaternion(0.0634445, 0.00254403, 0.00387385, 0.997975) -bones/23/rotation = Quaternion(-0.00150721, -0.672261, 0.740066, -0.019108) -bones/24/rotation = Quaternion(-0.0107274, -0.719883, 0.693927, -0.010901) -bones/25/rotation = Quaternion(0.0634445, -0.00254403, -0.00387385, 0.997975) -bones/26/rotation = Quaternion(0.0015072, -0.672261, 0.740066, 0.019108) -bones/28/rotation = Quaternion(-0.725917, 3.05019e-18, -2.88548e-18, 0.687782) +bones/1/rotation = Quaternion(-0.707263, 2.19513e-18, -2.07659e-18, 0.706951) +bones/2/position = Vector3(0, 0.199954, 0) +bones/3/rotation = Quaternion(2.96951e-08, 0.733706, 0.679468, 3.20762e-08) +bones/4/rotation = Quaternion(-0.0618643, 4.36277e-08, 2.70417e-09, 0.998085) +bones/6/rotation = Quaternion(3.09088e-08, 0.707111, 0.707102, 3.09084e-08) +bones/7/rotation = Quaternion(-0.00410941, -0.0231815, 0.984429, -0.174201) +bones/8/rotation = Quaternion(2.06571e-06, 7.0899e-06, -0.0625704, 0.998041) +bones/9/rotation = Quaternion(-1.49484e-06, -6.92559e-06, -0.0178983, 0.99984) +bones/14/rotation = Quaternion(0.00410941, -0.0231815, 0.984429, 0.174201) +bones/15/rotation = Quaternion(2.06571e-06, -7.08988e-06, 0.0625704, 0.998041) +bones/16/rotation = Quaternion(-1.49484e-06, 6.92559e-06, 0.0178983, 0.99984) +bones/21/rotation = Quaternion(0.00988475, -0.701685, 0.712355, 0.00956142) +bones/22/rotation = Quaternion(0.0133306, 0.00254896, 0.000813956, 0.999908) +bones/23/rotation = Quaternion(-0.000983995, -0.692252, 0.721401, -0.019142) +bones/24/rotation = Quaternion(-0.00988476, -0.701685, 0.712355, -0.00956141) +bones/25/rotation = Quaternion(0.0133306, -0.00254896, -0.000813955, 0.999908) +bones/26/rotation = Quaternion(0.000983995, -0.692252, 0.721401, 0.019142) +bones/28/rotation = Quaternion(-0.707263, 2.19513e-18, -2.07659e-18, 0.706951) [node name="MovementController" type="Node" parent="."] script = ExtResource("2_1pst4") @@ -896,7 +898,7 @@ RootBone = NodePath("../Model/Skeleton/Root") deterministic = false root_node = NodePath("../../Model") libraries = { -"": SubResource("AnimationLibrary_og84j") +"": SubResource("AnimationLibrary_4fkhn") } tree_root = SubResource("AnimationNodeBlendTree_cstk8") anim_player = NodePath("../../Model/AnimationPlayer")