Files
2024-11-20 15:21:28 +01:00

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
}
}
}