162 lines
5.2 KiB
C#
162 lines
5.2 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace Assets.ThoMagic.Renderer
|
|
{
|
|
[DisallowMultipleComponent]
|
|
[ExecuteAlways]
|
|
public class ThoMagicRendererCameraSettings : MonoBehaviour, IInstanceRenderSettings
|
|
{
|
|
[SerializeField]
|
|
private bool _supported;
|
|
[SerializeField]
|
|
private bool _overrideSupported;
|
|
[SerializeField]
|
|
private bool _render;
|
|
[SerializeField]
|
|
private bool _overrideRendering;
|
|
[Min(0.0f)]
|
|
[SerializeField]
|
|
private float _renderDistance;
|
|
[SerializeField]
|
|
private bool _overrideRenderDistance;
|
|
[SerializeField]
|
|
private bool _renderShadows;
|
|
[SerializeField]
|
|
private bool _overrideRenderShadows;
|
|
[Min(0.0f)]
|
|
[SerializeField]
|
|
private float _shadowDistance;
|
|
[SerializeField]
|
|
private bool _overrideShadowDistance;
|
|
[Range(0.01f, 1f)]
|
|
[SerializeField]
|
|
private float _densityInDistance;
|
|
[SerializeField]
|
|
private bool _overrideDensityInDistance;
|
|
[SerializeField]
|
|
private Vector2 _densityInDistanceFalloff;
|
|
[SerializeField]
|
|
private bool _overrideDensityInDistanceFalloff;
|
|
private ReflectionProbe _reflectionProbe;
|
|
|
|
public InstanceRenderSettings Settings => new InstanceRenderSettings()
|
|
{
|
|
Supported = !_overrideSupported || _supported,
|
|
Render = !_overrideRendering || _render,
|
|
RenderDistance = _overrideRenderDistance ? _renderDistance : -1f,
|
|
ShadowDistance = _overrideShadowDistance ? _shadowDistance : -1f,
|
|
Shadows = !_overrideRenderShadows || _renderShadows,
|
|
DensityInDistance = _overrideDensityInDistance ? _densityInDistance : 1f,
|
|
DensityInDistanceFalloff = _overrideDensityInDistanceFalloff ? _densityInDistanceFalloff : Vector2.zero
|
|
};
|
|
|
|
public bool? Supported
|
|
{
|
|
get => !_overrideSupported ? new bool?() : new bool?(_supported);
|
|
set
|
|
{
|
|
_overrideSupported = value.HasValue;
|
|
if (!value.HasValue)
|
|
return;
|
|
_supported = value.Value;
|
|
}
|
|
}
|
|
|
|
public bool? Render
|
|
{
|
|
get => !_overrideRendering ? new bool?() : new bool?(_render);
|
|
set
|
|
{
|
|
_overrideRendering = value.HasValue;
|
|
if (!value.HasValue)
|
|
return;
|
|
_render = value.Value;
|
|
}
|
|
}
|
|
|
|
public float? RenderDistance
|
|
{
|
|
get => !_overrideRenderDistance ? new float?() : new float?(_renderDistance);
|
|
set
|
|
{
|
|
_overrideRenderDistance = value.HasValue;
|
|
if (!value.HasValue)
|
|
return;
|
|
_renderDistance = value.Value;
|
|
}
|
|
}
|
|
|
|
public bool? RenderShadows
|
|
{
|
|
get => !_overrideRenderShadows ? new bool?() : new bool?(_renderShadows);
|
|
set
|
|
{
|
|
_overrideRenderShadows = value.HasValue;
|
|
if (!value.HasValue)
|
|
return;
|
|
_renderShadows = value.Value;
|
|
}
|
|
}
|
|
|
|
public float? ShadowDistance
|
|
{
|
|
get => !_overrideShadowDistance ? new float?() : new float?(_shadowDistance);
|
|
set
|
|
{
|
|
_overrideShadowDistance = value.HasValue;
|
|
if (!value.HasValue)
|
|
return;
|
|
_shadowDistance = value.Value;
|
|
}
|
|
}
|
|
|
|
public float? DensityInDistance
|
|
{
|
|
get => !_overrideDensityInDistance ? new float?() : new float?(_densityInDistance);
|
|
set
|
|
{
|
|
_overrideDensityInDistance = value.HasValue;
|
|
if (!value.HasValue)
|
|
return;
|
|
_densityInDistance = value.Value;
|
|
}
|
|
}
|
|
|
|
public Vector2? DensityInDistanceFalloff
|
|
{
|
|
get => !_overrideDensityInDistanceFalloff ? new Vector2?() : new Vector2?(_densityInDistanceFalloff);
|
|
set
|
|
{
|
|
_overrideDensityInDistanceFalloff = value.HasValue;
|
|
if (!value.HasValue)
|
|
return;
|
|
_densityInDistanceFalloff = value.Value;
|
|
}
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
_reflectionProbe = GetComponent<ReflectionProbe>();
|
|
if (_reflectionProbe == null)
|
|
return;
|
|
CameraRenderer.ReflectionProbeSettings = this;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
if (_reflectionProbe == null || CameraRenderer.ReflectionProbeSettings as ThoMagicRendererCameraSettings == this)
|
|
return;
|
|
|
|
CameraRenderer.ReflectionProbeSettings = null;
|
|
}
|
|
|
|
private void OnValidate()
|
|
{
|
|
if (_reflectionProbe == null || !Application.isEditor)
|
|
return;
|
|
_reflectionProbe.RenderProbe();
|
|
}
|
|
}
|
|
}
|