-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathLightEffects.cs
More file actions
69 lines (59 loc) · 2.02 KB
/
LightEffects.cs
File metadata and controls
69 lines (59 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LightEffects : MonoBehaviour
{
public enum LightEffectOptions { Flickering, Off, On };
[Header("Settings")]
[SerializeField] private LightEffectOptions _LightEffectOption = LightEffectOptions.Flickering;
[SerializeField] private Vector2 _MinMaxIncrease = new Vector2(0.8f, 1.2f);
[Range(0.01f, 100)] [SerializeField] private float _EffectStrength = 50;
Queue<float> _LightFlickerQ;
private float _LastSum = 0;
private Light _Light;
private float _LightIntensity = 0;
public void Reset()
{
if (_LightEffectOption == LightEffectOptions.Flickering)
{
_LightFlickerQ.Clear();
_LastSum = 0;
}
}
void Start()
{
_Light = GetComponent<Light>();
_LightIntensity = _Light.intensity;
_LightFlickerQ = new Queue<float>(Mathf.RoundToInt(_EffectStrength));
}
void Update()
{
switch(_LightEffectOption)
{
case LightEffectOptions.Flickering:
while (_LightFlickerQ.Count >= _EffectStrength)
_LastSum -= _LightFlickerQ.Dequeue();
float newVal = Random.Range(_LightIntensity * _MinMaxIncrease.x, _LightIntensity * _MinMaxIncrease.y);
_LightFlickerQ.Enqueue(newVal);
_LastSum += newVal;
_Light.intensity = _LastSum / (float)_LightFlickerQ.Count;
break;
case LightEffectOptions.Off:
_Light.intensity = 0;
break;
case LightEffectOptions.On:
_Light.intensity = _LightIntensity = _MinMaxIncrease.x;
break;
}
}
public void SetEffect(LightEffectOptions options)
{
_LightEffectOption = options;
}
public void ChangeLightIntensity(float amount)
{
_MinMaxIncrease.x += amount * Time.deltaTime;
if (_MinMaxIncrease.x < 0)
_MinMaxIncrease.x = 0;
}
}