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