146 lines
5.0 KiB
C#
146 lines
5.0 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace Assets.ThoMagic.Renderer
|
|
{
|
|
[AddComponentMenu("ThoMagic/Renderer Object Settings")]
|
|
[DisallowMultipleComponent]
|
|
[ExecuteAlways]
|
|
public class ThoMagicRendererObjectSettings : MonoBehaviour, IInstanceRenderSettings
|
|
{
|
|
[SerializeField]
|
|
private bool _render = true;
|
|
[SerializeField]
|
|
private bool _overrideRendering;
|
|
[Min(0.0f)]
|
|
[SerializeField]
|
|
private float _renderDistance = 150;
|
|
[SerializeField]
|
|
private bool _overrideRenderDistance;
|
|
[SerializeField]
|
|
private bool _renderShadows = true;
|
|
[SerializeField]
|
|
private bool _overrideRenderShadows;
|
|
[Min(0.0f)]
|
|
[SerializeField]
|
|
private float _shadowDistance = 80;
|
|
[SerializeField]
|
|
private bool _overrideShadowDistance;
|
|
[Range(0.01f, 1f)]
|
|
[SerializeField]
|
|
private float _densityInDistance = 0.125f;
|
|
[SerializeField]
|
|
private bool _overrideDensityInDistance;
|
|
[SerializeField]
|
|
private Vector2 _densityInDistanceFalloff = new Vector2(0.08f, 0.0075f);
|
|
[SerializeField]
|
|
private bool _overrideDensityInDistanceFalloff;
|
|
private ReflectionProbe _reflectionProbe;
|
|
|
|
public InstanceRenderSettings Settings => new InstanceRenderSettings()
|
|
{
|
|
Supported = true,
|
|
Render = !this._overrideRendering || this._render,
|
|
RenderDistance = this._overrideRenderDistance ? this._renderDistance : -1f,
|
|
ShadowDistance = this._overrideShadowDistance ? this._shadowDistance : -1f,
|
|
Shadows = !this._overrideRenderShadows || this._renderShadows,
|
|
DensityInDistance = this._overrideDensityInDistance ? this._densityInDistance : 1f,
|
|
DensityInDistanceFalloff = this._overrideDensityInDistanceFalloff ? this._densityInDistanceFalloff : Vector2.zero
|
|
};
|
|
|
|
public bool? Render
|
|
{
|
|
get => !this._overrideRendering ? new bool?() : new bool?(this._render);
|
|
set
|
|
{
|
|
this._overrideRendering = value.HasValue;
|
|
if (!value.HasValue)
|
|
return;
|
|
this._render = value.Value;
|
|
}
|
|
}
|
|
|
|
public float? RenderDistance
|
|
{
|
|
get => !this._overrideRenderDistance ? new float?() : new float?(this._renderDistance);
|
|
set
|
|
{
|
|
this._overrideRenderDistance = value.HasValue;
|
|
if (!value.HasValue)
|
|
return;
|
|
this._renderDistance = value.Value;
|
|
}
|
|
}
|
|
|
|
public bool? RenderShadows
|
|
{
|
|
get => !this._overrideRenderShadows ? new bool?() : new bool?(this._renderShadows);
|
|
set
|
|
{
|
|
this._overrideRenderShadows = value.HasValue;
|
|
if (!value.HasValue)
|
|
return;
|
|
this._renderShadows = value.Value;
|
|
}
|
|
}
|
|
|
|
public float? ShadowDistance
|
|
{
|
|
get => !this._overrideShadowDistance ? new float?() : new float?(this._shadowDistance);
|
|
set
|
|
{
|
|
this._overrideShadowDistance = value.HasValue;
|
|
if (!value.HasValue)
|
|
return;
|
|
this._shadowDistance = value.Value;
|
|
}
|
|
}
|
|
|
|
public float? DensityInDistance
|
|
{
|
|
get => !this._overrideDensityInDistance ? new float?() : new float?(this._densityInDistance);
|
|
set
|
|
{
|
|
this._overrideDensityInDistance = value.HasValue;
|
|
if (!value.HasValue)
|
|
return;
|
|
this._densityInDistance = value.Value;
|
|
}
|
|
}
|
|
|
|
public Vector2? DensityInDistanceFalloff
|
|
{
|
|
get => !this._overrideDensityInDistanceFalloff ? new Vector2?() : new Vector2?(this._densityInDistanceFalloff);
|
|
set
|
|
{
|
|
this._overrideDensityInDistanceFalloff = value.HasValue;
|
|
if (!value.HasValue)
|
|
return;
|
|
this._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 ThoMagicRendererObjectSettings != this)
|
|
return;
|
|
CameraRenderer.ReflectionProbeSettings = null;
|
|
}
|
|
|
|
private void OnValidate()
|
|
{
|
|
if (_reflectionProbe == null || !Application.isEditor)
|
|
return;
|
|
this._reflectionProbe.RenderProbe();
|
|
}
|
|
}
|
|
}
|