add camera zoom

This commit is contained in:
Cat Flynn 2022-09-05 19:40:39 +01:00
parent cd800be3eb
commit 2a4c3b4c88
2 changed files with 40 additions and 5 deletions

View File

@ -4,7 +4,9 @@
[node name="OrbitCamera" type="Spatial"] [node name="OrbitCamera" type="Spatial"]
script = ExtResource( 1 ) script = ExtResource( 1 )
_zoomSensitivity = 50.0
_cameraPath = NodePath("Camera")
[node name="Camera" type="Camera" parent="."] [node name="Camera" type="Camera" parent="."]
transform = Transform( 1, 0, 0, 0, 0.964146, 0.265371, 0, -0.265371, 0.964146, 0, 2.21115, 9.48434 ) transform = Transform( 1, 0, 0, 0, 0.964146, 0.265371, 0, -0.265371, 0.964146, 0, 7.12726, 27.3456 )
fov = 25.0 fov = 25.0

View File

@ -4,7 +4,25 @@ using System;
public class OrbitCamera : Spatial public class OrbitCamera : Spatial
{ {
[Export] [Export]
private float _sensitivity = 200f; private float _lookSensitivity = 200f;
[Export]
private float _zoomSensitivity = 10f;
[Export]
private NodePath _cameraPath;
private Camera _camera = null;
private Camera Camera
{
get
{
if (_camera == null)
{
_camera = GetNode<Camera>(_cameraPath);
}
return _camera;
}
}
private Vector2 _rotation; private Vector2 _rotation;
private bool _canRotate = false; private bool _canRotate = false;
@ -24,7 +42,8 @@ public class OrbitCamera : Spatial
public override void _Process(float delta) public override void _Process(float delta)
{ {
Rotation = Vector3.Zero; Rotation = Vector3.Zero;
var sensitivity = -1f / _sensitivity; var sensitivity = -1f / _lookSensitivity;
Rotate(Vector3.Right, _rotation.y * sensitivity); Rotate(Vector3.Right, _rotation.y * sensitivity);
Rotate(Vector3.Up, _rotation.x * sensitivity); Rotate(Vector3.Up, _rotation.x * sensitivity);
} }
@ -32,9 +51,23 @@ public class OrbitCamera : Spatial
// left click to drag // left click to drag
private void HandleMouseButton(InputEventMouseButton mouseButton) private void HandleMouseButton(InputEventMouseButton mouseButton)
{ {
if (mouseButton.ButtonIndex != (int)ButtonList.Left) return; switch ((ButtonList)mouseButton.ButtonIndex)
{
case ButtonList.Left:
_canRotate = mouseButton.Pressed; _canRotate = mouseButton.Pressed;
break;
case ButtonList.WheelUp:
Zoom(-1);
break;
case ButtonList.WheelDown:
Zoom(1);
break;
}
}
private void Zoom(float amount)
{
Camera.Fov += amount * _zoomSensitivity / Camera.Fov;
} }
private void HandleMouseMovement(InputEventMouseMotion mouseMotion) private void HandleMouseMovement(InputEventMouseMotion mouseMotion)