Files
XRLib/Assets/Scripts/Simulator/UI/PropertyWindow/QueueProperty.cs

100 lines
3.3 KiB
C#
Raw Permalink Normal View History

2026-01-16 11:36:54 +09:00
using Simulator.Data;
using System;
using System.Collections.Generic;
using UnityEngine;
using UVC.UI.Window.PropertyWindow;
public class QueueProperty : MonoBehaviour
{
[SerializeField]
private PropertyWindow propertyWindow;
private void Awake()
{
propertyWindow.PropertyValueChanged += OnPropertyValueChanged;
}
2026-02-25 16:30:12 +09:00
public void SetPropertyWindow(ComponentType type, ComponentDataBase data)
2026-01-16 11:36:54 +09:00
{
2026-02-10 17:01:25 +09:00
if (PlayerPropertyDataBase.isPlaying)
{
return;
}
2026-01-16 11:36:54 +09:00
InitNodeProperty(data as QueueDataClass);
}
void SaveChange(object source, object value, string name)
{
var path = PathIndexer.GetNodePath(source);
Patch updateData = new Patch();
updateData.value = value;
UpdateValueStack.AddPatch($"{path}.{name}", value);
}
public void InitNodeProperty(QueueDataClass queue)
{
2026-02-26 14:04:33 +09:00
var entries = new List<IPropertyEntry>
2026-01-16 11:36:54 +09:00
{
new StringProperty("name", "이름", queue.name)
{
IsReadOnly=true
},
new StringProperty("label", "라벨", queue.label)
{
IsReadOnly=false
}.Bind(
setter: v => {queue.label = v;SaveChange(queue,v,"label"); }
),
2026-02-03 11:40:26 +09:00
CreatePositionGroup(queue),
2026-01-16 11:36:54 +09:00
new BoolProperty("is_unlimited","수용 용량 무제한", queue.is_unlimited)
{
IsReadOnly=false
},
new IntProperty("capacity","최대 수용 개수", queue.capacity)
{
IsReadOnly=false
}.Bind(
setter: v => { queue.capacity = v; SaveChange(queue, v, "capacity"); }
),
new ListProperty("queue_type","대기열 처리 방식",new List<string>(){ "fifo", "lifo", "priority" }, queue.queue_type)
{
IsReadOnly=false,
}.Bind(
setter: v => { queue.queue_type = v; SaveChange(queue, v, "queue_type"); }
),
};
2026-02-26 14:04:33 +09:00
entries.AddRange(PolicyPropertyBuilder.CreatePolicyEntries(
"CostPolicy", "대기 비용 처리 정책", "display_mode_CostPolicy",
() => queue.cost_policy, v => queue.cost_policy = v,
"cost_policy", queue, SaveChange));
2026-01-16 11:36:54 +09:00
propertyWindow.LoadMixedProperties(entries);
2026-02-26 14:04:33 +09:00
PolicyPropertyBuilder.HandleDisplayModeChanged(propertyWindow, "CostPolicy", queue.cost_policy.policy.ToString());
2026-02-10 17:01:25 +09:00
propertyWindow.SetPropertyEnabled("capacity", !queue.is_unlimited);
2026-01-16 11:36:54 +09:00
}
private void OnPropertyValueChanged(object sender, PropertyValueChangedEventArgs e)
{
Debug.Log($"[PropertyChanged] Id:{e.PropertyId}, Type:{e.PropertyType}, Value:{e.NewValue}");
2026-02-26 14:04:33 +09:00
PolicyPropertyBuilder.TryHandleDisplayModeChanged(e, propertyWindow, "display_mode_CostPolicy", "CostPolicy");
2026-01-16 11:36:54 +09:00
if (e.PropertyId == "is_unlimited")
{
bool flag = Convert.ToBoolean(e.NewValue);
propertyWindow.SetPropertyEnabled("capacity", !flag);
}
}
2026-02-03 11:40:26 +09:00
private PropertyGroup CreatePositionGroup(QueueDataClass queue)
{
2026-03-17 10:52:33 +09:00
return PropertyHelper.CreatePositionGroup("queue_position", queue, propertyWindow, SaveChange);
2026-02-03 11:40:26 +09:00
}
2026-02-25 16:30:12 +09:00
private void OnDestroy()
{
if (propertyWindow != null)
propertyWindow.PropertyValueChanged -= OnPropertyValueChanged;
}
2026-01-16 11:36:54 +09:00
}