Camera component for the Player class. Updates the camera rotation and position each tick based on input, keeping the camera a fixed distance above the player's world position and syncing EyePosition, EyeAngle and field of view.
using Sandbox;
namespace SnowSandbox;
public sealed partial class Player : Component
{
[Property, Feature( "Camera", Icon = "video_camera_back" )]
float DistanceFromBottom { get; set; } = 32;
public Vector3 EyePosition;
public Angles EyeAngle;
void CameraUpdate()
{
var angels = Camera.WorldRotation.Angles();
angels += Input.AnalogLook;
Camera.WorldRotation = angels;
Camera.WorldPosition = WorldPosition + (WorldRotation.Up * DistanceFromBottom);
EyePosition = Camera.WorldPosition;
EyeAngle = Camera.WorldRotation;
Camera.FieldOfView = Preferences.FieldOfView;
}
}