Camera2D.cs
using Sandbox;

public class Camera2D : Component
{
	[Property] public CameraComponent Camera { get; set; }

	public Vector2 TargetPos { get; set; }
	public Vector2 CameraPos { get; set; }

	protected override void OnUpdate()
	{
		base.OnUpdate();

		//Vector2 newPos = Vector2.Lerp( (Vector2)WorldPosition, TargetPos, Time.Delta * 3f );
		CameraPos = Utils.DynamicEaseTo( CameraPos, TargetPos, 0.2f, Time.Delta );

		var newPos = CameraPos + Utils.GetRandomVector() * Manager.Instance.Player.CamShakeAmount;

		float bounds_zoom = 1f + Manager.Instance.Player.Stats[PlayerStat.ZoomAmount] * 0.44f;
		var XDIST = 10.75f / bounds_zoom;
		var Y_MIN = -8.8f / bounds_zoom;
		var Y_MAX = 8.9f / bounds_zoom;
		newPos = new Vector2( MathX.Clamp( newPos.x, -XDIST, XDIST ), MathX.Clamp( newPos.y, Y_MIN, Y_MAX ) );

		WorldPosition = ((Vector3)newPos).WithZ( WorldPosition.z );
	}

	public void SetPos( Vector2 pos )
	{
		CameraPos = pos;
		TargetPos = pos;
		WorldPosition = ((Vector3)pos).WithZ( WorldPosition.z );
	}
}