LunarInfantry/Assets/Bremsengine/Sprite Material Queue/SpriteMaterialQueue.cs
2026-01-02 01:31:54 -08:00

55 lines
No EOL
1.9 KiB
C#

using System.Collections.Generic;
using System.Collections;
using UnityEngine;
namespace Bremsengine
{
public class SpriteMaterialQueue : MonoBehaviour
{
[field: SerializeField] public SpriteRenderer SR { get; private set; }
[SerializeField] List<SpriteRenderer> renderers = new();
public Material StandardMaterial { get; private set; }
static Coroutine activeroutine;
[SerializeField] Material flashMaterial;
[SerializeField] float flashInterval;
private void Awake()
{
StandardMaterial = SR.sharedMaterial;
}
public void RunMaterialQueue(float duration)
{
SR.sharedMaterial = StandardMaterial;
if (activeroutine != null)
{
SetRendererMaterial(StandardMaterial);
StopCoroutine(activeroutine);
}
activeroutine = StartCoroutine(CO_FlashMaterial(flashMaterial, duration, flashInterval));
}
void SetRendererMaterial(Material m)
{
if (SR != null)
{
SR.sharedMaterial = m;
}
foreach (var r in renderers)
{
if (r == null)
continue;
r.sharedMaterial = m;
}
}
public IEnumerator CO_FlashMaterial(Material flashMaterial, float duration, float flashInterval)
{
SetRendererMaterial(StandardMaterial);
float endTime = Time.time + duration;
while (Time.time < endTime)
{
Material determinedMaterial = SR.sharedMaterial != flashMaterial ? flashMaterial : StandardMaterial;
SetRendererMaterial(determinedMaterial);
yield return new WaitForSeconds(flashInterval);
}
SetRendererMaterial(StandardMaterial);
}
}
}