94 lines
3.0 KiB
C#
94 lines
3.0 KiB
C#
using UnityEngine;
|
|
using UnityEngine.VFX;
|
|
using UnityEngine.Rendering;
|
|
|
|
namespace OccaSoftware.Altos
|
|
{
|
|
[ExecuteAlways]
|
|
[RequireComponent(typeof(VisualEffect))]
|
|
public class StarObject : MonoBehaviour
|
|
{
|
|
private VisualEffect visualEffect;
|
|
public StarDefinitionScriptableObject starDefinition;
|
|
|
|
public void SetStarDefinition(StarDefinitionScriptableObject input)
|
|
{
|
|
starDefinition = input;
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
RenderPipelineManager.beginCameraRendering += OnBeginCameraRendering;
|
|
StaticTimeOfDayManager.UpdateSunIntensityEvent += UpdateStarBrightness;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
RenderPipelineManager.beginCameraRendering -= OnBeginCameraRendering;
|
|
StaticTimeOfDayManager.UpdateSunIntensityEvent -= UpdateStarBrightness;
|
|
}
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
Setup();
|
|
}
|
|
|
|
void OnBeginCameraRendering(ScriptableRenderContext context, Camera camera)
|
|
{
|
|
transform.position = camera.transform.position;
|
|
}
|
|
|
|
|
|
public void Setup()
|
|
{
|
|
if(TryGetComponent(out VisualEffect temp))
|
|
{
|
|
visualEffect = temp;
|
|
}
|
|
|
|
if(visualEffect != null)
|
|
{
|
|
visualEffect.Reinit();
|
|
}
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
if(starDefinition != null)
|
|
{
|
|
UpdateShaderProperties();
|
|
}
|
|
}
|
|
|
|
private void UpdateStarBrightness(float relativeBrightness)
|
|
{
|
|
if (starDefinition != null)
|
|
{
|
|
#if VFXGRAPH_EXISTS
|
|
visualEffect.SetFloat("Daytime Brightness", Mathf.Lerp(1.0f, starDefinition.daytimeBrightness, relativeBrightness));
|
|
#endif
|
|
}
|
|
}
|
|
|
|
private void UpdateShaderProperties()
|
|
{
|
|
#if VFXGRAPH_EXISTS
|
|
visualEffect.SetFloat("Star Count", starDefinition.count);
|
|
visualEffect.SetTexture("Star Texture", starDefinition.texture);
|
|
visualEffect.SetGradient("Star Color Gradient", starDefinition.color);
|
|
visualEffect.SetFloat("Star Size", starDefinition.size);
|
|
visualEffect.SetFloat("Star Size Max Multiplier", starDefinition.sizeRange);
|
|
visualEffect.SetFloat("Peak Brightness Multiplier", starDefinition.peakBrightness);
|
|
visualEffect.SetVector2("Range of Brightness Oscillations per Second", starDefinition.flickerFrequencyMinMax);
|
|
visualEffect.SetFloat("Randomize Star Angle", starDefinition.textureAngleRandom);
|
|
visualEffect.SetFloat("Star Horizon Fade Distance", starDefinition.horizonFadeDistance);
|
|
visualEffect.SetFloat("Rotation Speed", starDefinition.rotationSpeed);
|
|
#endif
|
|
}
|
|
|
|
}
|
|
|
|
}
|