using Godot; using Rokojori; namespace GameJam { [GlobalClass] public partial class RotateCharacter:Node { [Export] public Node3D cameraSource; [Export] public Node3D player; [Export] public RJSensor up; [Export] public RJSensor down; [Export] public RJSensor left; [Export] public RJSensor right; [Export] public float rotationSpeed; public override void _Process( double delta ) { var y = up.GetValue() - down.GetValue(); var x = right.GetValue() - left.GetValue(); var v = new Vector2( x, y ); if ( v.Length() < 0.4f ) { return; } var directionZ = y * cameraSource.GlobalBasis.Z; var directionX = -x * cameraSource.GlobalBasis.X; var normalized = ( directionX + directionZ ).Normalized(); normalized.Y = 0; var rotationBefore = player.GlobalBasis.GetRotationQuaternion(); player.LookAt( player.GlobalPosition + normalized * 100f ); var rotationAfter = player.GlobalBasis.GetRotationQuaternion(); var lerped = rotationBefore.Slerp( rotationAfter, rotationSpeed ); Math3D.SetGlobalRotation( player, lerped ); } } }