using UnityEngine; namespace LeTai.TrueShadow { [RequireComponent(typeof(TrueShadow))] public class InsetOnPress : AnimatedBiStateButton { TrueShadow[] shadows; float[] normalOpacity; bool wasInset; void OnEnable() { shadows = GetComponents(); normalOpacity = new float[shadows.Length]; } protected override void Animate(float visualPressAmount) { void SetAllOpacity(float lerpProgress) { for (var i = 0; i < shadows.Length; i++) { var color = shadows[i].Color; color.a = Mathf.Lerp(0, normalOpacity[i], lerpProgress); shadows[i].Color = color; } } bool shouldInset = visualPressAmount > .5f; if (shouldInset != wasInset) { for (var i = 0; i < shadows.Length; i++) { shadows[i].Inset = shouldInset; } wasInset = shouldInset; } if (shouldInset) { SetAllOpacity(visualPressAmount * 2f - 1f); } else { SetAllOpacity(1 - visualPressAmount * 2f); } } void MemorizeOpacity() { if (IsAnimating) return; for (var i = 0; i < shadows.Length; i++) { normalOpacity[i] = shadows[i].Color.a; } } protected override void OnWillPress() { wasInset = shadows[0].Inset; MemorizeOpacity(); base.OnWillPress(); } } }