Files
Studio/Assets/NewStudioJYM/Scripts/Panel_AlarmConnectModal.cs
2025-05-14 17:00:44 +09:00

178 lines
5.7 KiB
C#

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using XRLib.UI;
namespace XED
{
public class Panel_AlarmConnectModal : PanelBase
{
public Data dataStorage;
public EventData eventData;
private RectTransform StorageDataContent;
private TMP_Dropdown Dropdown_DataStorage;
private Button Button_Save;
private Button Button_Cancel;
private List<DataClass> dataList = new List<DataClass>();
private List<UI_AlarmDataItem> alarmDatas = new List<UI_AlarmDataItem>();
private UI_AlarmDataItem prf_AlarmDataItem;
private UI_ComparisonSettingItem prf_ComparisonSettingItem;
private UI_EventParameterItem prf_EventParameterItem;
public SaveConnectAlarmData saveConnectAlarmData;
public SaveConnectAlarmData loadData = null;
public Action<string, SaveConnectAlarmData> onSaveConnectAlarmData;
private void TestDataConnected()
{
var dataStorageJson = Resources.Load<TextAsset>("Test1").text;
dataStorage = JsonConvert.DeserializeObject<Data>(dataStorageJson);
var evnetJson = Resources.Load<TextAsset>("Test2").text;
eventData = JsonConvert.DeserializeObject<EventData>(evnetJson);
}
public override void AfterAwake()
{
TestDataConnected();
prf_AlarmDataItem = Resources.Load<UI_AlarmDataItem>("Prefabs/UI/PRF_AlarmDataItem");
prf_ComparisonSettingItem = Resources.Load<UI_ComparisonSettingItem>("Prefabs/UI/PRF_ComparisonSettingItem");
prf_EventParameterItem = Resources.Load<UI_EventParameterItem>("Prefabs/UI/PRF_EventParameterItem");
Button_Save.onClick.AddListener(Save);
Button_Cancel.onClick.AddListener(CloseModal);
SetStorageDataDropdown();
}
private void SetStorageDataDropdown()
{
Dropdown_DataStorage.ClearOptions();
dataList.Clear();
List<string> displayNames = new List<string>();
var data = dataStorage.dataList;
for (int i = 0; i < data.Count; i++)
{
dataList.Add(data[i]);
displayNames.Add(data[i].name);
}
Dropdown_DataStorage.AddOptions(displayNames);
Dropdown_DataStorage.onValueChanged.AddListener(OnValueChangedDataStorageDropDown);
}
private void OnValueChangedDataStorageDropDown(int index)
{
loadData = new SaveConnectAlarmData();
AddStorageDataItem(index);
}
private void AddStorageDataItem(int index)
{
foreach(var alarmData in alarmDatas)
{
Destroy(alarmData.gameObject);
}
alarmDatas.Clear();
if (loadData.alarmDataName == null || loadData.alarmDataName == string.Empty)
{
foreach (var data in dataList[index].fields)
{
var item = Instantiate(prf_AlarmDataItem, StorageDataContent);
item.onUpdateLayout += UpdateLayout;
item.SetItem(data, prf_ComparisonSettingItem, prf_EventParameterItem, eventData);
alarmDatas.Add(item);
}
}
else
{
foreach (var data in loadData.alarmFields)
{
var item = Instantiate(prf_AlarmDataItem, StorageDataContent);
item.onUpdateLayout += UpdateLayout;
item.SetItem(data, prf_ComparisonSettingItem, prf_EventParameterItem, eventData);
alarmDatas.Add(item);
}
}
}
public void OpenModal()
{
gameObject.SetActive(true);
}
private void CloseModal()
{
gameObject.SetActive(false);
}
private void Save()
{
var saveConnectAlarmData = GetAlarmData();
onSaveConnectAlarmData?.Invoke(saveConnectAlarmData.alarmDataName, saveConnectAlarmData);
Initialize();
gameObject.SetActive(false);
}
private void Initialize()
{
Dropdown_DataStorage.ClearOptions();
foreach (var alarmData in alarmDatas)
{
Destroy(alarmData.gameObject);
}
alarmDatas.Clear();
}
private void UpdateLayout()
{
LayoutRebuilder.ForceRebuildLayoutImmediate(StorageDataContent);
}
private SaveConnectAlarmData GetAlarmData()
{
var saveConnectAlarmData = new SaveConnectAlarmData();
saveConnectAlarmData.alarmDataName = Dropdown_DataStorage.options[Dropdown_DataStorage.value].text;
foreach (var item in alarmDatas)
{
var alarmField = item.GetData();
if (alarmField != null)
{
saveConnectAlarmData.alarmFields.Add(alarmField);
}
}
return saveConnectAlarmData;
}
public void LoadData(SaveConnectAlarmData savedData)
{
OpenModal();
loadData = savedData;
SetStorageDataDropdown();
// dropdown에서 알맞은 dataStorage index 찾기
for (int i = 0; i < dataList.Count; i++)
{
if(savedData.alarmDataName == dataList[i].name)
{
Dropdown_DataStorage.SetValueWithoutNotify(i);
AddStorageDataItem(i);
break;
}
}
}
}
}