UnityGameProjectsCode / InTheDarkGame / Level / Lights / FlickeringWallLight.cs
FlickeringWallLight.cs
Raw
using UnityEngine;
using UnityEngine.Experimental.Rendering.Universal;

public class FlickeringWallLight : WallLight
{
    public bool flicker;
    private float timeSinceLastLightChange;
    private bool variationChanged;
    public float pauseTimeBase;
    private float currentPauseTime;
    public float timeVariation;
    private float currentTimeVariation;
    public float intensityVariation;
    public Light2D targetLight;

    private void Awake()
    {
        float variation = Random.Range(0, intensityVariation);
        targetLight.intensity -= variation;
    }

    private void FixedUpdate()
    {
        LightUpdate();

        if (!variationChanged)
        {
            currentTimeVariation = Random.Range(-timeVariation, timeVariation);
            currentPauseTime = pauseTimeBase + currentTimeVariation;
            variationChanged = true;
        }

        if (flicker)
        {
            timeSinceLastLightChange += Time.deltaTime;

            if (timeSinceLastLightChange >= currentPauseTime)
            {
                ChangeLightState();

                timeSinceLastLightChange = 0.0f;
                variationChanged = false;
            }
        }
    }
}