Files
GodotTutorial/Scripts/CameraSystem.cs
2023-07-19 09:40:16 -07:00

51 lines
1.6 KiB
C#

using Godot;
public partial class CameraSystem : SpringArm3D
{
[Export]
private float _sensitivityHorizontal = 0.05f;
[Export]
private float _sensitivityVertical = 0.05f;
[Export]
private float _joystickDeadZone = 0.5f;
private Node3D _pivot;
private CharacterBody3D _characterBody;
public override void _Ready()
{
_pivot = GetNode<Node3D>("/root/Main/Player/Pivot");
_characterBody = GetNode<CharacterBody3D>("/root/Main/Player");
}
public override void _Process(double delta)
{
var joyRightX = Input.GetJoyAxis(0, JoyAxis.RightX);
var joyRightY = Input.GetJoyAxis(0, JoyAxis.RightY);
if (Mathf.Abs(joyRightX) > _joystickDeadZone)
{
var rotateAmount = joyRightX * _sensitivityHorizontal;
_characterBody.RotateY(-rotateAmount);
_pivot.RotateY(rotateAmount);
}
if (Mathf.Abs(joyRightY) > _joystickDeadZone)
{
RotateX(joyRightY * _sensitivityVertical);
Rotation = new Vector3(Mathf.Clamp(Rotation.X, -0.7f, 0.7f), Rotation.Y, Rotation.Z);
}
}
public override void _Input(InputEvent @event)
{
if (@event is InputEventMouseMotion mouseMotion)
{
_characterBody.RotateY(Mathf.DegToRad(-mouseMotion.Relative.X * _sensitivityHorizontal));
_pivot.RotateY(Mathf.DegToRad(mouseMotion.Relative.X * _sensitivityHorizontal));
RotateX(Mathf.DegToRad(mouseMotion.Relative.Y * _sensitivityVertical));
Rotation = new Vector3(Mathf.Clamp(Rotation.X, -0.7f, 0.7f), Rotation.Y, Rotation.Z);
}
}
}