Files
ChunilENG/Assets/WorkSpace/Personal/JYM/UI_BarChart.cs

115 lines
3.9 KiB
C#
Raw Normal View History

2025-03-12 09:55:47 +09:00
using ChartAndGraph;
2025-03-11 10:23:44 +09:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
2025-03-12 09:55:47 +09:00
using UnityEngine.UI;
2025-03-11 10:23:44 +09:00
using WI;
2025-03-12 09:55:47 +09:00
using static ChartAndGraph.BarChart;
using TMPro;
using UnityEngine.EventSystems;
2025-03-12 09:55:47 +09:00
2025-03-11 10:23:44 +09:00
public class UI_BarChart : UIBase
{
private BarChart barChart;
2025-04-17 09:31:53 +09:00
private UI_StackBar prefab_stackBar;
private UI_DateTime prefab_DateTime;
private RectTransform StackBarParent;
private RectTransform DateTimeParent;
2025-03-12 09:55:47 +09:00
2025-04-17 09:31:53 +09:00
private Dictionary<UI_StackBar, Vector3> stackBarPos = new();
2025-03-12 09:55:47 +09:00
public List<BarChartData> barChartDatas = new List<BarChartData>();
public UI_BarChartData barChartData;
2025-04-17 09:31:53 +09:00
public Vector2 labelOffset;
2025-03-12 09:55:47 +09:00
public override void AfterAwake()
2025-03-11 10:23:44 +09:00
{
2025-04-17 09:31:53 +09:00
prefab_stackBar = Resources.Load<UI_StackBar>("Prefabs/UI/PRF_UI_StackBar");
prefab_DateTime = Resources.Load<UI_DateTime>("Prefabs/UI/PRF_UI_DateTime");
2025-03-12 09:55:47 +09:00
barChart = GetComponentInChildren<BarChart>();
barChartData = GetComponentInChildren<UI_BarChartData>(true);
2025-03-11 10:23:44 +09:00
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
if (RectTransformUtility.RectangleContainsScreenPoint(barChartData.rectTransform, Input.mousePosition))
return;
barChartData.SetActive(false);
}
}
2025-03-12 09:55:47 +09:00
public void SetChartData(List<BarChartData> barChartData)
{
this.barChartDatas.Clear();
barChart.DataSource.ClearGroups();
2025-04-17 16:36:08 +09:00
barChart.DataSource.ClearValues();
2025-03-12 09:55:47 +09:00
barChart.DataSource.AutomaticMaxValue = true;
2025-03-11 10:23:44 +09:00
2025-03-12 09:55:47 +09:00
for (int i = 0; i < barChartData.Count; i++)
{
barChart.DataSource.AddGroup(i.ToString());
barChart.DataSource.SetValue("TargetCycleTime", i.ToString(), barChartData[i].targetCycleTime);
barChart.DataSource.SetValue("CycleTime", i.ToString(), barChartData[i].cycleTime);
}
2025-04-17 09:31:53 +09:00
2025-03-12 09:55:47 +09:00
this.barChartDatas.AddRange(barChartData);
2025-04-17 09:31:53 +09:00
//GUI <20><> <20>׷<EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
barChart.OnRedraw.AddListener(SetStackBarData);
barChart.OnRedraw.AddListener(SetChartLabels);
2025-03-12 09:55:47 +09:00
}
2025-04-17 09:31:53 +09:00
private void SetStackBarData()
{
2025-04-17 16:36:08 +09:00
ClearStackBar();
2025-04-17 09:31:53 +09:00
stackBarPos.Clear();
for (int i = 0; i < barChartDatas.Count; i++)
{
var stackBar = Instantiate(prefab_stackBar, StackBarParent);
barChart.GetBarTrackPosition("CycleTime", i.ToString(), out var topPosition);
var bottomPosition = new Vector3(topPosition.x, rectTransform.rect.height / 2, 0);
2025-04-17 09:31:53 +09:00
stackBar.SetStackBar(barChartDatas[i], topPosition, bottomPosition);
stackBar.onClickStackBar += OnClickStackBar;
stackBarPos.Add(stackBar, bottomPosition);
}
}
private void SetChartLabels()
2025-03-11 10:23:44 +09:00
{
2025-04-17 09:31:53 +09:00
ClearChartLabels();
for (int i = 0; i < barChartDatas.Count; i++)
{
barChart.GetBarTrackPosition("CycleTime", i.ToString(), out var topPosition);
var bottomPosition = new Vector3(topPosition.x, rectTransform.rect.height / 2, 0);
2025-04-17 09:31:53 +09:00
var dateTime = Instantiate(prefab_DateTime, DateTimeParent);
dateTime.transform.position = new Vector3(bottomPosition.x + labelOffset.x, bottomPosition.y + labelOffset.y, 0);
dateTime.SetDateTime(barChartDatas[i]._time);
}
}
2025-04-17 16:36:08 +09:00
private void ClearStackBar()
{
if (StackBarParent.childCount <= 0)
return;
for (int i = 0; i < StackBarParent.childCount; i++)
{
Destroy(StackBarParent.transform.GetChild(i).gameObject);
}
}
2025-04-17 09:31:53 +09:00
private void ClearChartLabels()
{
if (DateTimeParent.childCount <= 0)
return;
for(int i = 0; i < DateTimeParent.childCount; i++)
{
Destroy(DateTimeParent.transform.GetChild(i).gameObject);
}
}
private void OnClickStackBar(UI_StackBar stackBar)
{
barChartData.SetData(stackBar.barChartData, stackBarPos[stackBar]);
2025-03-11 10:23:44 +09:00
}
}