Files
Studio/Assets/NewStudioJYM/Scripts/Panel_DataConnectModal.cs

357 lines
13 KiB
C#
Raw Normal View History

2025-05-07 13:47:19 +09:00
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
2025-05-12 08:35:29 +09:00
using System.Linq;
2025-05-07 13:47:19 +09:00
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using XRLib;
using XRLib.UI;
namespace XED
{
public class Panel_DataConnectModal : PanelBase
{
2025-05-12 08:35:29 +09:00
public Data api;
public Data dataStorage;
2025-05-07 13:47:19 +09:00
2025-05-12 08:35:29 +09:00
private List<DataClass> apiDatas = new List<DataClass>();
private List<DataClass> dataStorageDatas = new List<DataClass>();
2025-05-07 13:47:19 +09:00
private bool isAPI;
public Toggle Toggle_Api;
public Toggle Toggle_Storage;
public TMP_Dropdown Dropdown_DataList;
public Button Button_Cancel;
public Button Button_Save;
private RectTransform RectTransform_APIData;
private RectTransform AddStorageDataButtonArea;
private RectTransform APIDataListContent;
private RectTransform APIContent;
private Button Button_loadAPIData;
private Button Button_AddStorageData;
2025-05-12 08:35:29 +09:00
private DataClass loadAPIData;
2025-05-12 17:37:38 +09:00
private List<UI_LoadDataHierarchyItem> currentAPIDataItems = new List<UI_LoadDataHierarchyItem>();
2025-05-07 13:47:19 +09:00
private RectTransform RectTransform_DataStorage;
private RectTransform DataStorageContent;
private RectTransform AddAPIDataButtonArea;
private Button Button_AddAPIData;
private Toggle Toggle_limitStorageSetting;
2025-05-12 17:37:38 +09:00
private UI_LoadDataHierarchyItem prf_loadDataHierarchyItem;
2025-05-07 13:47:19 +09:00
private UI_DataSettingItem prf_DataSettingItem;
private UI_DataTypeSelectedItem prf_DataTypeSelectedItem;
private UI_MatchingTypeDataItem prf_MatchingTypeDataItem;
private UI_AddOtherDataItem prf_AddOtherDataItem;
private UI_AddOtherDataTypeItem prf_AddOtherDataTypeItem;
private RectTransform currentContent;
2025-05-12 08:35:29 +09:00
private RectTransform currentButtonArea;
public UI_DataSettingItem currentDataSettingItem;
public List<UI_AddOtherDataItem> currentAddOtherDataItems = new List<UI_AddOtherDataItem>();
private string currentDataListOptionName;
private DataClass currentClass;
public Action<string, SaveConnectedData> onSaveConnectedData;
2025-05-07 13:47:19 +09:00
private void TestDataConnected()
{
var apiJson = Resources.Load<TextAsset>("Test").text;
2025-05-12 08:35:29 +09:00
api = JsonConvert.DeserializeObject<Data>(apiJson);
2025-05-07 13:47:19 +09:00
var dataStorageJson = Resources.Load<TextAsset>("Test1").text;
2025-05-12 08:35:29 +09:00
dataStorage = JsonConvert.DeserializeObject<Data>(dataStorageJson);
2025-05-07 13:47:19 +09:00
}
public override void AfterAwake()
{
TestDataConnected();
2025-05-12 17:37:38 +09:00
prf_loadDataHierarchyItem = Resources.Load<UI_LoadDataHierarchyItem>("Prefabs/UI/PRF_LoadDataHierarchyItem");
2025-05-07 13:47:19 +09:00
prf_DataSettingItem = Resources.Load<UI_DataSettingItem>("Prefabs/UI/PRF_DataSettingItem");
prf_DataTypeSelectedItem = Resources.Load<UI_DataTypeSelectedItem>("Prefabs/UI/PRF_DataTypeSelectedItem");
prf_MatchingTypeDataItem = Resources.Load<UI_MatchingTypeDataItem>("Prefabs/UI/PRF_MatchingTypeDataItem");
prf_AddOtherDataItem = Resources.Load<UI_AddOtherDataItem>("Prefabs/UI/PRF_AddOtherDataItem");
prf_AddOtherDataTypeItem = Resources.Load<UI_AddOtherDataTypeItem>("Prefabs/UI/PRF_AddOtherDataTypeItem");
Toggle_Api.onValueChanged.AddListener(OnAPIToggleValueChanged);
Toggle_Storage.onValueChanged.AddListener(OnDataStorageToggleValueChanged);
Toggle_limitStorageSetting.onValueChanged.AddListener(OnLimitStorageSettingToggleValueChanged);
Button_loadAPIData.onClick.AddListener(LoadAPIData);
2025-05-12 08:35:29 +09:00
Button_AddStorageData.onClick.AddListener(() => AddOtherDataItem(null));
Button_AddAPIData.onClick.AddListener(() => AddOtherDataItem(null));
2025-05-07 13:47:19 +09:00
Button_Cancel.onClick.AddListener(CloseModal);
Button_Save.onClick.AddListener(Save);
RectTransform_APIData.gameObject.SetActive(false);
RectTransform_DataStorage.gameObject.SetActive(false);
}
private void OnAPIToggleValueChanged(bool isOn)
{
if (isOn)
{
RectTransform_APIData.gameObject.SetActive(true);
2025-05-12 08:35:29 +09:00
ChangePanel(APIContent, AddStorageDataButtonArea);
2025-05-07 13:47:19 +09:00
isAPI = true;
2025-05-12 08:35:29 +09:00
PopulateDataListDropdown(api.dataList);
2025-05-07 13:47:19 +09:00
Toggle_Storage.isOn = false;
2025-05-12 08:35:29 +09:00
Toggle_limitStorageSetting.isOn = true;
2025-05-07 13:47:19 +09:00
}
else
{
RectTransform_APIData.gameObject.SetActive(false);
}
}
private void OnDataStorageToggleValueChanged(bool isOn)
{
if (isOn)
{
RectTransform_DataStorage.gameObject.SetActive(true);
2025-05-12 08:35:29 +09:00
ChangePanel(DataStorageContent, AddAPIDataButtonArea);
2025-05-07 13:47:19 +09:00
isAPI = false;
2025-05-12 08:35:29 +09:00
PopulateDataListDropdown(dataStorage.dataList);
2025-05-07 13:47:19 +09:00
Toggle_Api.isOn = false;
2025-05-12 08:35:29 +09:00
Toggle_limitStorageSetting.isOn = false;
2025-05-07 13:47:19 +09:00
}
else
{
RectTransform_DataStorage.gameObject.SetActive(false);
}
}
2025-05-12 08:35:29 +09:00
private void ChangePanel(RectTransform dataContent, RectTransform buttonArea)
{
currentContent = dataContent;
currentButtonArea = buttonArea;
currentDataSettingItem = currentContent.GetComponentInChildren<UI_DataSettingItem>();
currentAddOtherDataItems.Clear();
var currentAddOtherDataItem = currentContent.GetComponentsInChildren<UI_AddOtherDataItem>().ToList();
currentAddOtherDataItems.AddRange(currentAddOtherDataItem);
}
2025-05-07 13:47:19 +09:00
private void OnLimitStorageSettingToggleValueChanged(bool isOn)
{
var isActive = isOn;
DataStorageContent.gameObject.SetActive(isActive);
}
2025-05-12 08:35:29 +09:00
private void PopulateDataListDropdown(List<DataClass> data)
2025-05-07 13:47:19 +09:00
{
Dropdown_DataList.ClearOptions();
List<string> displayNames = new List<string>();
if (isAPI)
{
apiDatas.Clear();
foreach (var api in data)
{
apiDatas.Add(api);
displayNames.Add(api.name);
}
Dropdown_DataList.AddOptions(displayNames);
2025-05-12 08:35:29 +09:00
Dropdown_DataList.onValueChanged.RemoveAllListeners();
2025-05-07 13:47:19 +09:00
Dropdown_DataList.onValueChanged.AddListener(OnValueChangedAPIDropDown);
2025-05-12 08:35:29 +09:00
var notCheckIndex = currentDataListOptionName != null ? displayNames.IndexOf(currentDataListOptionName) : 0;
var index = notCheckIndex >= 0 ? notCheckIndex : 0;
Dropdown_DataList.SetValueWithoutNotify(index);
SetLoadApiData(index);
2025-05-07 13:47:19 +09:00
}
else
{
dataStorageDatas.Clear();
2025-05-12 08:35:29 +09:00
foreach (var storageData in data)
2025-05-07 13:47:19 +09:00
{
2025-05-12 08:35:29 +09:00
dataStorageDatas.Add(storageData);
displayNames.Add(storageData.name);
2025-05-07 13:47:19 +09:00
}
2025-05-12 08:35:29 +09:00
2025-05-07 13:47:19 +09:00
Dropdown_DataList.AddOptions(displayNames);
2025-05-12 08:35:29 +09:00
Dropdown_DataList.onValueChanged.RemoveAllListeners();
2025-05-07 13:47:19 +09:00
Dropdown_DataList.onValueChanged.AddListener(OnValueChangedDataStorageDropDown);
2025-05-12 08:35:29 +09:00
var notCheckIndex = currentDataListOptionName != null ? displayNames.IndexOf(currentDataListOptionName) : 0;
var index = notCheckIndex >= 0 ? notCheckIndex : 0;
Dropdown_DataList.SetValueWithoutNotify(index);
OnValueChangedDataStorageDropDown(index);
2025-05-07 13:47:19 +09:00
}
}
private void OnValueChangedAPIDropDown(int index)
{
SetLoadApiData(index);
}
private void SetLoadApiData(int index)
{
var apiData = apiDatas[index];
2025-05-12 08:35:29 +09:00
loadAPIData = apiData;
2025-05-07 13:47:19 +09:00
}
void LoadAPIData()
{
2025-05-12 08:35:29 +09:00
foreach (var dataItem in currentAPIDataItems)
Destroy(dataItem.gameObject);
2025-05-07 13:47:19 +09:00
currentAPIDataItems.Clear();
2025-05-12 17:37:38 +09:00
var item = Instantiate(prf_loadDataHierarchyItem, APIDataListContent);
2025-05-12 08:35:29 +09:00
item.SetData(loadAPIData);
item.onClickItem += OnClickAPIDataItem;
currentAPIDataItems.Add(item);
2025-05-07 13:47:19 +09:00
}
2025-05-12 08:35:29 +09:00
private void OnClickAPIDataItem(DataClass data)
2025-05-07 13:47:19 +09:00
{
2025-05-12 08:35:29 +09:00
AddDataSettingItem(data);
2025-05-07 13:47:19 +09:00
}
private void OnValueChangedDataStorageDropDown(int index)
{
2025-05-12 08:35:29 +09:00
AddDataSettingItem(dataStorageDatas[index]);
2025-05-07 13:47:19 +09:00
}
private void UpdateLayout()
{
LayoutRebuilder.ForceRebuildLayoutImmediate(currentContent);
}
2025-05-12 08:35:29 +09:00
private void AddDataSettingItem(DataClass data)
2025-05-07 13:47:19 +09:00
{
2025-05-12 08:35:29 +09:00
if (currentDataSettingItem != null)
2025-05-07 13:47:19 +09:00
{
2025-05-12 08:35:29 +09:00
Destroy(currentDataSettingItem.gameObject);
currentDataSettingItem = null;
2025-05-07 13:47:19 +09:00
}
2025-05-12 08:35:29 +09:00
var item = Instantiate(prf_DataSettingItem, currentContent);
var index = currentButtonArea.transform.GetSiblingIndex();
2025-05-07 13:47:19 +09:00
item.transform.SetSiblingIndex(index);
item.SetData(data, prf_DataTypeSelectedItem, prf_MatchingTypeDataItem);
item.onUpdateLayout += UpdateLayout;
2025-05-12 08:35:29 +09:00
currentDataSettingItem = item;
2025-05-07 13:47:19 +09:00
}
2025-05-12 08:35:29 +09:00
private void AddOtherDataItem(DataClass data)
2025-05-07 13:47:19 +09:00
{
var item = Instantiate(prf_AddOtherDataItem, currentContent);
item.onUpdateLayout += UpdateLayout;
2025-05-12 08:35:29 +09:00
item.onDestory += RemoveOtherDataItem;
item.SetItem(dataStorage.dataList, data, prf_AddOtherDataTypeItem);
2025-05-07 13:47:19 +09:00
item.transform.SetAsLastSibling();
2025-05-12 08:35:29 +09:00
currentAddOtherDataItems.Add(item);
}
private void RemoveOtherDataItem(UI_AddOtherDataItem item)
{
currentAddOtherDataItems.Remove(item);
Destroy(item.gameObject);
2025-05-07 13:47:19 +09:00
}
2025-05-12 17:37:38 +09:00
public SaveConnectedData saveData;
2025-05-07 13:47:19 +09:00
void Save()
{
2025-05-12 17:37:38 +09:00
saveData = GetData();
2025-05-12 08:35:29 +09:00
onSaveConnectedData?.Invoke(saveData.dataSource, saveData);
Initialize();
gameObject.SetActive(false);
2025-05-07 13:47:19 +09:00
}
2025-05-12 08:35:29 +09:00
public void OpenModal()
{
gameObject.SetActive(true);
}
2025-05-07 13:47:19 +09:00
void CloseModal()
{
gameObject.SetActive(false);
}
2025-05-12 08:35:29 +09:00
private void Initialize()
{
Toggle_Api.SetIsOnWithoutNotify(false);
Toggle_Storage.SetIsOnWithoutNotify(false);
Toggle_limitStorageSetting.SetIsOnWithoutNotify(false);
currentContent = null;
currentButtonArea = null;
loadAPIData = null;
foreach (var item in currentAPIDataItems)
{
Destroy(item.gameObject);
}
currentAPIDataItems.Clear();
if (currentDataSettingItem != null)
{
Destroy(currentDataSettingItem.gameObject);
currentDataSettingItem = null;
}
foreach (var item in currentAddOtherDataItems)
{
Destroy(item.gameObject);
}
currentAddOtherDataItems.Clear();
RectTransform_APIData.gameObject.SetActive(false);
RectTransform_DataStorage.gameObject.SetActive(false);
}
private SaveConnectedData GetData()
{
SaveConnectedData saveData = new SaveConnectedData();
saveData.connectDataClass.Clear();
saveData.otherDataClasses.Clear();
saveData.isAPI = isAPI;
saveData.dataListOptionName = Dropdown_DataList.options[Dropdown_DataList.value].text;
saveData.isLimitStorageSetting = Toggle_limitStorageSetting.isOn;
var dataclass = currentDataSettingItem.GetData();
saveData.dataSource = dataclass.name;
saveData.connectDataClass.Add(dataclass);
foreach (var item in currentAddOtherDataItems)
{
var otehrDataClass = item.GetData();
saveData.otherDataClasses.Add(otehrDataClass);
}
return saveData;
}
public void SetLoadSaveData(SaveConnectedData saveData)
{
OpenModal();
currentClass = saveData.connectDataClass[0];
currentDataListOptionName = saveData.dataListOptionName;
if (saveData.isAPI)
{
Toggle_Api.isOn = true;
LoadAPIData();
}
else
{
Toggle_Storage.isOn = true;
Toggle_limitStorageSetting.isOn = !saveData.isLimitStorageSetting;
Toggle_limitStorageSetting.isOn = saveData.isLimitStorageSetting;
}
AddDataSettingItem(currentClass);
foreach (var item in currentAddOtherDataItems)
{
Destroy(item.gameObject);
}
currentAddOtherDataItems.Clear();
foreach (var otherClass in saveData.otherDataClasses)
{
AddOtherDataItem(otherClass);
}
}
2025-05-07 13:47:19 +09:00
}
2025-05-12 08:35:29 +09:00
}