namespace SRF.UI { using Internal; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; /// /// Instantly sets colour to FlashColor on pointer down, then fades back to DefaultColour once pointer is released. /// [AddComponentMenu(ComponentMenuPaths.FlashGraphic)] [ExecuteInEditMode] public class FlashGraphic : UIBehaviour, IPointerDownHandler, IPointerUpHandler { public float DecayTime = 0.15f; public Color DefaultColor = new Color(1, 1, 1, 0); public Color FlashColor = Color.white; public Graphic Target; private bool _isHoldingUntilNextPress; public void OnPointerDown(PointerEventData eventData) { Target.CrossFadeColor(FlashColor, 0f, true, true); _isHoldingUntilNextPress = false; } public void OnPointerUp(PointerEventData eventData) { if (!_isHoldingUntilNextPress) { Target.CrossFadeColor(DefaultColor, DecayTime, true, true); } } protected override void OnEnable() { base.OnEnable(); if (!_isHoldingUntilNextPress) { Target.CrossFadeColor(DefaultColor, 0f, true, true); } } #if UNITY_EDITOR protected void Update() { if (!Application.isPlaying && Target != null) { Target.CrossFadeColor(DefaultColor, 0, true, true); } } #endif public void Flash() { Target.CrossFadeColor(FlashColor, 0f, true, true); Target.CrossFadeColor(DefaultColor, DecayTime, true, true); _isHoldingUntilNextPress = false; } public void FlashAndHoldUntilNextPress() { Target.CrossFadeColor(FlashColor, 0f, true, true); _isHoldingUntilNextPress = true; } } }