71 lines
2.2 KiB
C#
71 lines
2.2 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using WI;
|
|
using UnityEngine.EventSystems;
|
|
using System;
|
|
|
|
public class UI_StackBar : UIBase, IPointerClickHandler
|
|
{
|
|
public Image targetImage;
|
|
public List<float> segmentRatios = new List<float>();
|
|
|
|
public Image[] stackedImages;
|
|
public Action<UI_StackBar> onClickStackBar;
|
|
public BarChartData barChartData;
|
|
|
|
public override void AfterAwake()
|
|
{
|
|
targetImage = GetComponent<Image>();
|
|
var images = transform.GetComponentsInChildren<Image>();
|
|
stackedImages = images.Where(t => t != targetImage).ToArray();
|
|
SetActive(false);
|
|
}
|
|
public void SetStackBar(BarChartData barChartData, Vector3 topPosition, Vector3 bottomPosition)
|
|
{
|
|
SetActive(true);
|
|
this.barChartData = barChartData;
|
|
transform.position = topPosition;
|
|
|
|
var height = (transform.localPosition.y + bottomPosition.y);
|
|
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height);
|
|
|
|
SetImageRatios(barChartData);
|
|
}
|
|
private void SetImageRatios(BarChartData barChartData)
|
|
{
|
|
segmentRatios.Clear();
|
|
segmentRatios.Add(barChartData.etc);
|
|
segmentRatios.Add(barChartData.holdingPressureTime);
|
|
segmentRatios.Add(barChartData.weighingTime);
|
|
segmentRatios.Add(barChartData.coolingTime);
|
|
|
|
var parentHeight = targetImage.rectTransform.rect.height;
|
|
var totalHeight = 0f;
|
|
|
|
foreach (var height in segmentRatios)
|
|
{
|
|
totalHeight += height;
|
|
}
|
|
AdjustChildImagesHeight(parentHeight, totalHeight);
|
|
}
|
|
|
|
void AdjustChildImagesHeight(float parentHeight, float totalHeight)
|
|
{
|
|
for (int i = 0; i < stackedImages.Length; i++)
|
|
{
|
|
var rectTrnasform = stackedImages[i].rectTransform;
|
|
|
|
var newHeight = (segmentRatios[i] / totalHeight) * parentHeight;
|
|
rectTrnasform.sizeDelta = new Vector2(rectTrnasform.sizeDelta.x, newHeight);
|
|
}
|
|
}
|
|
|
|
public void OnPointerClick(PointerEventData eventData)
|
|
{
|
|
onClickStackBar?.Invoke(this);
|
|
}
|
|
}
|