140 lines
4.2 KiB
C#
140 lines
4.2 KiB
C#
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<UI_MachineKPI> 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()
|
|
{
|
|
gameObject.SetActive(false);
|
|
}
|
|
} |