175 lines
5.7 KiB
C#
175 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;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|