API 버튼 업데이트

This commit is contained in:
jmaniuvc
2025-05-23 12:33:04 +09:00
parent d258253cea
commit 21e9b58d03
11 changed files with 1384 additions and 1094 deletions

View File

@@ -0,0 +1,273 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3405020781819431025
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8412137011264621783}
- component: {fileID: 8159438064414966758}
- component: {fileID: 9166822912208899419}
m_Layer: 5
m_Name: Text (TMP)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8412137011264621783
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3405020781819431025}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 492208786282724824}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8159438064414966758
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3405020781819431025}
m_CullTransparentMesh: 1
--- !u!114 &9166822912208899419
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3405020781819431025}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Button
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 4f170a218dfffe4489dc7ddd54bc15cf, type: 2}
m_sharedMaterial: {fileID: 6975767319296004534, guid: 4f170a218dfffe4489dc7ddd54bc15cf, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4281479730
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 24
m_fontSizeBase: 24
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &7120439171255577409
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 492208786282724824}
- component: {fileID: 6921339540054383559}
- component: {fileID: 3266175959788972596}
- component: {fileID: 1002195081819726276}
- component: {fileID: 4913199175366641637}
m_Layer: 5
m_Name: UI_MQTTDataButton
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &492208786282724824
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7120439171255577409}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 8412137011264621783}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 188, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &6921339540054383559
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7120439171255577409}
m_CullTransparentMesh: 1
--- !u!114 &3266175959788972596
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7120439171255577409}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &1002195081819726276
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7120439171255577409}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 3266175959788972596}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!114 &4913199175366641637
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7120439171255577409}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 654b527f256c4fe4183e776d447011e1, type: 3}
m_Name:
m_EditorClassIdentifier:
panel_Repository: {fileID: 0}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 87ac5d54aeb766a489f51e426b903e17
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -44,7 +44,7 @@ namespace Studio
public Dictionary<string, StudioEntityWithState<object>> baseData = new();
public event Action<string, StudioEntityWithState<object>> onDataLoaded;
public event Action<string, StudioEntityWithState<object>> onAPIDataLoaded;
//private string
private StudioService(StudioRepoistory repository)
@@ -158,7 +158,7 @@ namespace Studio
Debug.Log($"APIState : Error , Message :{data.Message}");
}
onDataLoaded?.Invoke(url, data);
onAPIDataLoaded?.Invoke(url, data);
}
private void CheckAPIBoarder(string data, int reqSize, string url, long time)

View File

@@ -8,17 +8,20 @@ using XRLib.UI;
using Newtonsoft.Json;
using Best.HTTP.JSON;
using UnityEngine.UI;
using System.Collections.Generic;
namespace XED.UI
{
public class Panel_Repository : PanelBase
{
RectTransform ProtocolLabels;
RectTransform BaseDataList;
RectTransform Info_API;
RectTransform Info_BaseInfo;
UI_BaseDataButton apiDataButtonPrefab;
UI_MQTTDataButton mqttDataButtonPrefab;
public UI_BaseDataButton baseDataButtonPrefab;
UI_DataRepositoryButtonList APIDataList;
RectTransform Info_API;
RectTransform Info_Basedata;
RectTransform Info_MQTT;
RectTransform Info_MQTTdata;
TextMeshProUGUI TotalRequestPacketSize;
TextMeshProUGUI AverageRequestPacketSize;
@@ -41,6 +44,10 @@ namespace XED.UI
TextMeshProUGUI LastResponseTime;
TextMeshProUGUI ElapsedTime;
LayoutGroup[] layoutGroups;
Dictionary<string, UI_BaseDataButton> apiButtons = new();
public override void AfterAwake()
{
UI_ProtocolLabel[] protocolLabels = GetComponentsInChildren<UI_ProtocolLabel>();
@@ -49,28 +56,47 @@ namespace XED.UI
label.panel_Repository = this;
}
StudioService.Instance.onDataLoaded += CreateAPIListButton;
StudioService.Instance.onAPIDataLoaded += CreateAPIDataButton;
baseDataButtonPrefab = Resources.Load<UI_BaseDataButton>("Prefabs/UI/Button/UI_BaseDataButton");
apiDataButtonPrefab = Resources.Load<UI_BaseDataButton>("Prefabs/UI/Button/UI_BaseDataButton");
mqttDataButtonPrefab = Resources.Load<UI_MQTTDataButton>("Prefabs/UI/Button/UI_MQTTDataButton");
layoutGroups = GetComponentsInChildren<LayoutGroup>();
rawDataRect = RawData.GetComponent<RectTransform>();
rawDataFoldHeight = rawDataRect.sizeDelta.y;
RawDataFoldButton.GetComponent<Button>().onClick.AddListener(OnClickRawDataFoldButton);
}
void CreateAPIListButton(string name, StudioEntityWithState<object> value)
void CreateAPIDataButton(string name, StudioEntityWithState<object> value)
{
var button = Instantiate(baseDataButtonPrefab, BaseDataList.transform);
button.panel_Repository = this;
button.SetButtonData(name, value);
if (!apiButtons.ContainsKey(name))
{
// 버튼 새로 생성
var button = Instantiate(apiDataButtonPrefab, APIDataList.transform);
apiButtons.Add(name, button);
button.panel_Repository = this;
button.SetButtonData(name, value);
RebuildLayout();
RebuildLayout();
}
else
{
// 버튼 데이터 업데이트
apiButtons[name].SetButtonData(name, value);
}
}
void RebuildLayout()
void CreateMQTTDataButton()
{
LayoutRebuilder.ForceRebuildLayoutImmediate(BaseDataList);
LayoutRebuilder.ForceRebuildLayoutImmediate(ProtocolLabels);
}
public void RebuildLayout()
{
foreach (var layout in layoutGroups)
{
LayoutRebuilder.ForceRebuildLayoutImmediate(layout.GetComponent<RectTransform>());
}
}
public void ShowInformation_API()
@@ -88,10 +114,12 @@ namespace XED.UI
MaximumResponseTimeAPI.text = info.MaximumResponseTimeAPI;
Info_API.gameObject.SetActive(true);
Info_BaseInfo.gameObject.SetActive(false);
Info_Basedata.gameObject.SetActive(false);
Info_MQTT.gameObject.SetActive(false);
Info_MQTTdata.gameObject.SetActive(false);
}
public void ShowInformation_BaseInfo(StudioEntityWithState<object> baseDataValue)
public void ShowInformation_APIData(StudioEntityWithState<object> baseDataValue)
{
RawData.text = JsonConvert.SerializeObject(baseDataValue.Entity, Formatting.Indented);
@@ -115,7 +143,27 @@ namespace XED.UI
ElapsedTime.text = $"{minutes:D2}:{seconds:D2}.{milliseconds:D3}";
Info_API.gameObject.SetActive(false);
Info_BaseInfo.gameObject.SetActive(true);
Info_Basedata.gameObject.SetActive(true);
Info_MQTT.gameObject.SetActive(false);
Info_MQTTdata.gameObject.SetActive(false);
}
public void ShowInformation_MQTT()
{
Info_API.gameObject.SetActive(false);
Info_Basedata.gameObject.SetActive(false);
Info_MQTT.gameObject.SetActive(true);
Info_MQTTdata.gameObject.SetActive(false);
}
public void ShowInformation_MQTTData()
{
Info_API.gameObject.SetActive(false);
Info_Basedata.gameObject.SetActive(false);
Info_MQTT.gameObject.SetActive(false);
Info_MQTTdata.gameObject.SetActive(true);
}
void OnClickRawDataFoldButton()

File diff suppressed because it is too large Load Diff

View File

@@ -3,11 +3,12 @@ using UnityEngine;
using UnityEngine.UI;
using XED.UI;
using Studio.Setting.Connect;
using XRLib.UI;
namespace XED
{
public class UI_BaseDataButton : MonoBehaviour
public class UI_BaseDataButton : UIBase
{
public Panel_Repository panel_Repository;
@@ -15,7 +16,7 @@ namespace XED
TextMeshProUGUI buttonName;
string baseDataKey;
StudioEntityWithState<object> baseDataValue;
StudioEntityWithState<object> apiDataValue;
private void Awake()
{
@@ -27,13 +28,13 @@ namespace XED
void OnClickButton()
{
panel_Repository.ShowInformation_BaseInfo(baseDataValue);
panel_Repository.ShowInformation_APIData(apiDataValue);
}
public void SetButtonData(string name, StudioEntityWithState<object> data)
{
baseDataKey = name;
baseDataValue = data;
apiDataValue = data;
buttonName.text = name;
}

View File

@@ -0,0 +1,25 @@
using Studio;
using Studio.Setting.Connect;
using System.Collections.Generic;
using UnityEngine;
namespace XED
{
public class UI_DataRepositoryButtonList : MonoBehaviour
{
RectTransform rect;
private void Awake()
{
rect = GetComponent<RectTransform>();
}
public void FoldButtons(bool isFold)
{
foreach (Transform button in rect.transform)
{
button.gameObject.SetActive(isFold);
}
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 8d56a0a1462fa174e9bd6db7924a3b20

View File

@@ -0,0 +1,41 @@
using Studio.Setting.Connect;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using XED.UI;
using XRLib.UI;
namespace XED
{
public class UI_MQTTDataButton : UIBase
{
public Panel_Repository panel_Repository;
Button button;
TextMeshProUGUI buttonName;
string baseDataKey;
StudioEntityWithState<object> baseDataValue;
private void Awake()
{
button = GetComponent<Button>();
buttonName = GetComponentInChildren<TextMeshProUGUI>();
button.onClick.AddListener(OnClickButton);
}
void OnClickButton()
{
panel_Repository.ShowInformation_MQTTData();
}
public void SetButtonData(string name, StudioEntityWithState<object> data)
{
baseDataKey = name;
baseDataValue = data;
buttonName.text = name;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 654b527f256c4fe4183e776d447011e1

View File

@@ -3,22 +3,35 @@ using TMPro;
using UnityEngine;
using UnityEngine.UI;
using XRLib.UI;
using static UnityEngine.Analytics.IAnalytic;
namespace XED.UI
{
public enum ProtocolType
{
API,
MQTT,
}
public class UI_ProtocolLabel : UIBase
{
public ProtocolType protocolType;
public Panel_Repository panel_Repository;
Button ClickButton;
Button FoldButton;
TextMeshProUGUI buttonText;
UI_DataRepositoryButtonList dataList;
string buttonName;
bool isFold;
public override void AfterAwake()
{
buttonText = ClickButton.GetComponentInChildren<TextMeshProUGUI>();
dataList = GetComponentInChildren<UI_DataRepositoryButtonList>();
ClickButton.onClick.AddListener(OnClickButton);
FoldButton.onClick.AddListener(OnClickFoldButton);
@@ -26,12 +39,31 @@ namespace XED.UI
void OnClickButton()
{
panel_Repository.ShowInformation_API();
if (protocolType == ProtocolType.API)
{
panel_Repository.ShowInformation_API();
}
else if(protocolType == ProtocolType.MQTT)
{
panel_Repository.ShowInformation_MQTT();
}
}
void OnClickFoldButton()
{
if (isFold)
{
dataList.FoldButtons(true);
FoldButton.GetComponent<RectTransform>().localRotation = Quaternion.Euler(0f, 0f, 0f);
isFold = false;
}
else
{
dataList.FoldButtons(false);
FoldButton.GetComponent<RectTransform>().localRotation = Quaternion.Euler(0f, 0f, 180f);
isFold = true;
}
panel_Repository.RebuildLayout();
}
public void SetButtonName(string name)