signalis-eb/godot/addons/phantom_camera/scripts/resources/Camera3DResource.cs
2025-06-09 23:12:19 -04:00

117 lines
3.4 KiB
C#

using Godot;
namespace PhantomCamera;
public enum KeepAspect
{
KeepWidth,
KeepHeight
}
public enum ProjectionType
{
Perspective,
Orthogonal,
Frustum
}
public class Camera3DResource(Resource resource)
{
public readonly Resource Resource = resource;
public KeepAspect KeepAspect
{
get => (KeepAspect)(int)Resource.Call(MethodName.GetKeepAspect);
set => Resource.Call(MethodName.SetKeepAspect, (int)value);
}
public int CullMask
{
get => (int)Resource.Call(MethodName.GetCullMask);
set => Resource.Call(MethodName.SetCullMask, value);
}
public void SetCullMaskValue(int layer, bool value) => Resource.Call(MethodName.SetCullMaskValue, layer, value);
public float HOffset
{
get => (float)Resource.Call(MethodName.GetHOffset);
set => Resource.Call(MethodName.SetHOffset, value);
}
public float VOffset
{
get => (float)Resource.Call(MethodName.GetVOffset);
set => Resource.Call(MethodName.SetVOffset, value);
}
public ProjectionType Projection
{
get => (ProjectionType)(int)Resource.Call(MethodName.GetProjection);
set => Resource.Call(MethodName.SetProjection, (int)value);
}
public float Fov
{
get => (float)Resource.Call(MethodName.GetFov);
set => Resource.Call(MethodName.SetFov, Mathf.Clamp(value, 1, 179));
}
public float Size
{
get => (float)Resource.Call(MethodName.GetSize);
set => Resource.Call(MethodName.SetSize, Mathf.Clamp(value, 0.001f, float.PositiveInfinity));
}
public Vector2 FrustumOffset
{
get => (Vector2)Resource.Call(MethodName.GetFrustumOffset);
set => Resource.Call(MethodName.SetFrustumOffset, value);
}
public float Near
{
get => (float)Resource.Call(MethodName.GetNear);
set => Resource.Call(MethodName.SetNear, Mathf.Clamp(value, 0.001f, float.PositiveInfinity));
}
public float Far
{
get => (float)Resource.Call(MethodName.GetFar);
set => Resource.Call(MethodName.SetFar, Mathf.Clamp(value, 0.01f, float.PositiveInfinity));
}
public static class MethodName
{
public const string GetKeepAspect = "get_keep_aspect";
public const string SetKeepAspect = "set_keep_aspect";
public const string GetCullMask = "get_cull_mask";
public const string SetCullMask = "set_cull_mask";
public const string SetCullMaskValue = "set_cull_mask_value";
public const string GetHOffset = "get_h_offset";
public const string SetHOffset = "set_h_offset";
public const string GetVOffset = "get_v_offset";
public const string SetVOffset = "set_v_offset";
public const string GetProjection = "get_projection";
public const string SetProjection = "set_projection";
public const string GetFov = "get_fov";
public const string SetFov = "set_fov";
public const string GetSize = "get_size";
public const string SetSize = "set_size";
public const string GetFrustumOffset = "get_frustum_offset";
public const string SetFrustumOffset = "set_frustum_offset";
public const string GetNear = "get_near";
public const string SetNear = "set_near";
public const string GetFar = "get_far";
public const string SetFar = "set_far";
}
}