using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; using UnityEngine.EventSystems; using WI; using System; public class UI_MachineKPI : UIBase, IPointerClickHandler { public RectTransform DefaultKPI; public RectTransform DetailsKPI; private TextMeshProUGUI Default_eorate; private TextMeshProUGUI Details_eorate; private TextMeshProUGUI porate; private TextMeshProUGUI goodqtyrate; private TextMeshProUGUI lct; private TextMeshProUGUI wct; public bool isExpand; private float eorate; public float targetHeight; public float duration; private float initialHeight; private Vector2 initialSizeDelta; private Vector2 initialPosition; public Action onClickKPI; public void SetData(KPIData kpiData) { eorate = DecimalPointCalculate(kpiData.eorate); Default_eorate.SetText(eorate.ToString()); Details_eorate.SetText(eorate.ToString()); lct.SetText(DecimalPointCalculate(kpiData.lct).ToString()); wct.SetText(DecimalPointCalculate(kpiData.wct).ToString()); goodqtyrate.SetText(DecimalPointCalculate(kpiData.goodqtyrate).ToString()); porate.SetText(DecimalPointCalculate(kpiData.porate).ToString()); initialSizeDelta = DetailsKPI.sizeDelta; initialPosition = DetailsKPI.anchoredPosition; initialHeight = DetailsKPI.rect.height; DetailsKPI.gameObject.SetActive(false); } private float DecimalPointCalculate(string value) { var originFloatValue = float.Parse(value); var floatValue = Mathf.Round(originFloatValue * 100f) / 100f; return floatValue; } IEnumerator ResizeCoroutine() { DefaultKPI.gameObject.SetActive(false); DetailsKPI.gameObject.SetActive(true); var elapsedTime = 0f; while (elapsedTime < duration) { var progress = elapsedTime / duration; var newHeight = Mathf.Lerp(initialHeight, targetHeight, progress); DetailsKPI.sizeDelta = new Vector2(initialSizeDelta.x, newHeight); var newPosY = Mathf.Lerp(initialPosition.y, initialPosition.y - (targetHeight - initialHeight) / 2f, progress); DetailsKPI.anchoredPosition = new Vector2(initialPosition.x, newPosY); elapsedTime += Time.deltaTime; yield return null; } DetailsKPI.sizeDelta = new Vector2(initialSizeDelta.x, targetHeight); DetailsKPI.anchoredPosition = new Vector2(initialPosition.x, initialPosition.y - (targetHeight - initialHeight) / 2f); } IEnumerator ShrinkCoroutine() { var elapsedTime = 0f; var currentHeight = DetailsKPI.rect.height; var currentPosY = DetailsKPI.anchoredPosition.y; while (elapsedTime < duration) { var progress = elapsedTime / duration; var newHeight = Mathf.Lerp(currentHeight, initialHeight, progress); DetailsKPI.sizeDelta = new Vector2(initialSizeDelta.x, newHeight); var newPosY = Mathf.Lerp(currentPosY, initialPosition.y, progress); DetailsKPI.anchoredPosition = new Vector2(initialPosition.x, newPosY); elapsedTime += Time.deltaTime; yield return null; } DetailsKPI.sizeDelta = new Vector2(initialSizeDelta.x, initialHeight); DetailsKPI.anchoredPosition = new Vector2(initialPosition.x, initialPosition.y); DefaultKPI.gameObject.SetActive(true); DetailsKPI.gameObject.SetActive(false); } public void OnPointerClick(PointerEventData eventData) { onClickKPI?.Invoke(this); } public void Expand() { if (!isExpand) { StopAllCoroutines(); StartCoroutine(ResizeCoroutine()); isExpand = true; } } public void Shrink() { if (isExpand) { StopAllCoroutines(); StartCoroutine(ShrinkCoroutine()); isExpand = false; } } public void Active() { gameObject.SetActive(true); } public void Deactive() { DetailsKPI.sizeDelta = initialSizeDelta; DetailsKPI.anchoredPosition = new Vector2(initialPosition.x, initialPosition.y); DefaultKPI.gameObject.SetActive(true); DetailsKPI.gameObject.SetActive(false); isExpand = false; gameObject.SetActive(false); } }