Vivi movement demo
This commit is contained in:
50
Scripts/CameraSystem.cs
Normal file
50
Scripts/CameraSystem.cs
Normal file
@@ -0,0 +1,50 @@
|
||||
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/CharacterBody3D/Pivot");
|
||||
_characterBody = GetNode<CharacterBody3D>("/root/Main/CharacterBody3D");
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user