using UnityEngine; using System.Collections; using UnityEngine.UI; using System.Collections.Generic; using System; namespace Kill.UI.Components { public class PlayFlash : MonoBehaviour { public bool testPlay; public bool isplayFlash = false; public float fps = 25.0f; public Sprite[] flashTextures; public bool loop; public bool playonce; public bool useDelay; public bool useTimeControl = false; public float PlayTime; public bool hideWhenOver = false; public GameObject[] overHideObjs; private float hasplaytime = 0; private float time = 0; private int currentIndex = 0; public bool isplaying = false; public Sprite defaultSprite = null; Action callback = null; private void Start() { if (testPlay) Play(); } void FixedUpdate() { if (isplaying) { time += Time.deltaTime; hasplaytime += Time.deltaTime; if (isplayFlash) { gameObject.GetComponent().sprite = flashTextures[currentIndex]; if (time >= 1.0f / fps) { time = 0; currentIndex++; if (currentIndex >= flashTextures.Length) { if (!loop) { isplaying = false; currentIndex = 0; if (playonce) { isplayFlash = false; } if (hideWhenOver) { if (overHideObjs != null && overHideObjs.Length > 0) { foreach (GameObject g in overHideObjs) g.SetActive(false); } else { gameObject.GetComponent().enabled = false; } } if (defaultSprite != null) { gameObject.GetComponent().sprite = defaultSprite; } callback?.Invoke(); } else currentIndex = 0; } } } if (useTimeControl && hasplaytime >= PlayTime) { isplaying = false; hasplaytime = 0; gameObject.GetComponent().enabled = false; } } } bool hasdelay = false; public void Play(Action cb = null) { gameObject.SetActive(true); gameObject.GetComponent().enabled = true; callback = cb; if (useDelay && !hasdelay) { StartCoroutine(PlayDelay()); return; } hasdelay = false; isplaying = true; //Debug.Log("Play"); } public void Stop() { // Debug.Log("stopPlay"); if (isplayFlash) { //gameObject.GetComponent().enabled=false; isplaying = false; //currentIndex = 0; //gameObject.GetComponent().sprite=flashTextures[0]; } if (hideWhenOver) { if (overHideObjs != null && overHideObjs.Length > 0) { foreach (GameObject g in overHideObjs) g.SetActive(false); } else { gameObject.SetActive(false); } } if (defaultSprite != null) { gameObject.GetComponent().sprite = defaultSprite; } //gameObject.SetActive = false; } public IEnumerator PlayDelay() { yield return new WaitForSeconds(PlayTime); hasdelay = true; Play(); } } }