NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/PostProcess/BlackArea/LightPoint.cs

90 lines
2.6 KiB
C#

using UnityEngine;
namespace Gameplay.PostProcess.BlackArea
{
public class LightPoint
{
public bool isLight;
public int cellIndex;
public float remainTime;
private MeshRenderer _meshRenderer;
private readonly GameObject _lightObj;
private static MaterialPropertyBlock _cacheMatBlock;
private static readonly int Alpha = Shader.PropertyToID("_Alpha");
private float _currentAlpha;
private const float LIGHT_UP_SPEED = 5F;
private const float LIGHT_OFF_SPEED = 5F;
public LightPoint(int cellIndex, GameObject lightObj)
{
if (_cacheMatBlock == null)
{
_cacheMatBlock = new MaterialPropertyBlock();
}
this.cellIndex = cellIndex;
_lightObj = lightObj;
isLight = false;
remainTime = 0f;
var meshTrans = _lightObj.transform.GetChild(0);
_meshRenderer = meshTrans.GetComponent<MeshRenderer>();
_currentAlpha = 0;
_cacheMatBlock.SetFloat(Alpha, _currentAlpha);
_meshRenderer.SetPropertyBlock(_cacheMatBlock);
}
public void LightUp()
{
isLight = true;
// _lightObj.SetActive(true);
}
public void LightOff()
{
isLight = false;
// _lightObj.SetActive(false);
}
public void MarkLight(float duringTime)
{
remainTime = Mathf.Max(duringTime, remainTime);
if (!isLight)
{
LightUp();
}
}
public void LogicUpdate(float dt)
{
if (isLight)
{
if (_currentAlpha < 1)
{
_currentAlpha += dt * LIGHT_UP_SPEED;
_currentAlpha = Mathf.Min(1, _currentAlpha);
_cacheMatBlock.SetFloat(Alpha, _currentAlpha);
_meshRenderer.SetPropertyBlock(_cacheMatBlock);
}
remainTime -= dt;
if (remainTime < 0)
{
LightOff();
}
}
else
{
if (_currentAlpha > 0)
{
_currentAlpha -= dt * LIGHT_OFF_SPEED;
_currentAlpha = Mathf.Max(0, _currentAlpha);
_cacheMatBlock.SetFloat(Alpha, _currentAlpha);
_meshRenderer.SetPropertyBlock(_cacheMatBlock);
}
}
}
}
}