Files
Studio/Assets/Scripts/Studio/UI/Panel/Panel_3DFactorySetting.cs
2025-05-26 10:07:48 +09:00

156 lines
5.1 KiB
C#

using UnityEngine;
using XRLib.UI;
using UnityEngine.UI;
using TMPro;
using System.Collections.Generic;
using Newtonsoft.Json;
using System;
using XRLib;
using Studio.Util;
using Studio.AssetTool;
using Studio.Repositories;
namespace Studio
{
public class Panel_3DFactorySetting : PanelBase
{
private RectTransform Content;
private RectTransform Panel_3DGenerationSetting;
private Button Button_AddDynamicObjectItem;
private RectTransform DynamicObjectItemContent;
private UI_DynamicObjectItem prf_dynamicObjectItem;
private List<UI_DynamicObjectItem> dynamicObjectItems = new List<UI_DynamicObjectItem>();
private List<string> dataList = new List<string>();
private List<CustomAssetData> modelList = new List<CustomAssetData>();
public Action<UI_DynamicObjectItem> onUISetting;
public Dynamic3DModelSetting saveModelDatas;
public Action onClose;
public void Active(bool isActive)
{
gameObject.SetActive(isActive);
if (!isActive)
{
onClose?.Invoke();
}
}
public override void AfterAwake()
{
prf_dynamicObjectItem = Resources.Load<UI_DynamicObjectItem>("Prefabs/UI/PRF_DynamicObjectItem");
Button_AddDynamicObjectItem.onClick.AddListener(OnClickAddDynamicObjectButton);
dynamicObjectItems.Clear();
}
public void SetDataDropdownData(MQTTSetting mqttSetting)
{
if (mqttSetting == null)
return;
dataList.Clear();
foreach (var mqttConnection in mqttSetting.mqttConnections)
{
foreach(var mqttTopic in mqttConnection.topics)
{
var dataName = $"{mqttConnection.domain}/{mqttConnection.port}/{mqttTopic.topic}";
dataList.Add(dataName);
}
}
foreach(var item in dynamicObjectItems)
{
item.SetDataList(dataList);
}
}
public void SetModelDropdownData(CustomAssetDataRepository customAssetDataRepository)
{
modelList.Clear();
var assetDatas = customAssetDataRepository.assetDatas;
modelList.AddRange(assetDatas);
foreach (var item in dynamicObjectItems)
{
item.SetModelList(modelList);
}
}
private void OnClickAddDynamicObjectButton()
{
var item = Instantiate(prf_dynamicObjectItem, DynamicObjectItemContent);
item.onUISetting += OnUISetting;
item.onRemoveItem += OnRemoveItem;
item.SetData(dataList, modelList);
dynamicObjectItems.Add(item);
UpdateLayoutAddItem();
}
private void UpdateLayoutAddItem()
{
var sizeDelta = Panel_3DGenerationSetting.sizeDelta;
sizeDelta.y += prf_dynamicObjectItem.rectTransform.rect.height + 10f;
Panel_3DGenerationSetting.sizeDelta = sizeDelta;
LayoutRebuilder.ForceRebuildLayoutImmediate(Content);
Button_AddDynamicObjectItem.transform.SetAsLastSibling();
}
private void UpdateLayoutRemoveItem()
{
var sizeDelta = Panel_3DGenerationSetting.sizeDelta;
sizeDelta.y -= prf_dynamicObjectItem.rectTransform.rect.height + 10f;
Panel_3DGenerationSetting.sizeDelta = sizeDelta;
LayoutRebuilder.ForceRebuildLayoutImmediate(Content);
Button_AddDynamicObjectItem.transform.SetAsLastSibling();
}
private void OnUISetting(UI_DynamicObjectItem rectTransform)
{
onUISetting?.Invoke(rectTransform);
}
private void OnRemoveItem(UI_DynamicObjectItem item)
{
dynamicObjectItems.Remove(item);
Destroy(item.gameObject);
UpdateLayoutRemoveItem();
}
public Dynamic3DModelSetting GetDynamic3DModelSetting()
{
var dynamic3DModelSetting = new Dynamic3DModelSetting();
foreach(var modelData in dynamicObjectItems)
{
dynamic3DModelSetting.modelDatas.Add(modelData.GetDynamic3DModelConnection());
}
return dynamic3DModelSetting;
}
public void SetDynamic3DModelSetting(Dynamic3DModelSetting saveModelDatas)
{
foreach(var item in dynamicObjectItems)
{
Destroy(item.gameObject);
UpdateLayoutRemoveItem();
}
dynamicObjectItems.Clear();
if (saveModelDatas == null)
return;
foreach(var modelData in saveModelDatas.modelDatas)
{
var item = Instantiate(prf_dynamicObjectItem, DynamicObjectItemContent);
item.onUISetting += OnUISetting;
item.onRemoveItem += OnRemoveItem;
item.SetData(dataList, modelList);
item.SetModelData(modelData);
dynamicObjectItems.Add(item);
UpdateLayoutAddItem();
}
}
}
}