Add Player script / class

main
copygirl 11 months ago
parent eba2e0eaba
commit aad2484b66
  1. 46
      player/AnimationController.cs
  2. 16
      player/MovementController.cs
  3. 7
      player/PickupController.cs
  4. 24
      player/Player.cs
  5. 78
      player/player.tscn

@ -1,4 +1,4 @@
public partial class AnimationController : Node3D
public partial class AnimationController : Node3D, IInitalizable<Player>
{
[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<CharacterBody3D>();
_movementController = _player.GetNode<MovementController>("MovementController");
_cameraController = _player.GetNode<CameraController>("CameraController");
_camera = _cameraController.Camera;
_cameraDefaultTransform = _camera.Transform;
_player = player;
_cameraDefaultTransform = _player.Camera.Camera.Transform;
_animTree = GetNode<AnimationTree>("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);

@ -1,11 +1,11 @@
public partial class MovementController : Node
public partial class MovementController : Node, IInitalizable<Player>
{
[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<CharacterBody3D>();
_cameraController = _player.GetNode<CameraController>("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;

@ -1,4 +1,4 @@
public partial class PickupController : Node3D
public partial class PickupController : Node3D, IInitalizable<Player>
{
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<Node3D>();
}
public override void _UnhandledInput(InputEvent @event)

@ -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>("MovementController");
Camera = GetNode<CameraController>("CameraController");
Animation = GetNode<AnimationController>("AnimationController");
Pickup = GetNode<PickupController>("PickupController");
foreach (var child in GetChildren())
if (child is IInitalizable<Player> init)
init.Initialize(this);
}
}
public interface IInitalizable<T>
{
void Initialize(T param);
}

@ -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")

Loading…
Cancel
Save