using Simulator.Data; using System; using System.Collections.Generic; using UnityEngine; using UVC.UI.Window.PropertyWindow; public class NodeProperty : MonoBehaviour { [SerializeField] private PropertyWindow propertyWindow; private void Awake() { propertyWindow.PropertyValueChanged += OnPropertyValueChanged; } public void SetPropertyWindow(ConveyorNode data) { if (PlayerPropertyDataBase.isPlaying) { return; } Debug.Log(data); InitNodeProperty(data); } 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(ConveyorNode node) { var entries = new List { new StringProperty("name", "이름", node.name) { IsReadOnly=true }, new StringProperty("label", "라벨", node.label) { IsReadOnly=false }.Bind( setter: v => {node.label = v;SaveChange(node,v,"label"); } ), new ListProperty("type","타입",new List { "start","junction","endpoint"},node.node_type) { IsReadOnly=true }.Bind( setter: v => {node.node_type=v; SaveChange(node,v,"node_type"); } ), CreateInputDetailGroup(node), CreateOutputDetailGroup(node), new IntProperty("capacity", "용량", node.capacity) { IsReadOnly=false }.Bind( setter: v => {node.capacity = v;SaveChange(node,v,"capacity"); } ), }; entries.AddRange(PolicyPropertyBuilder.CreatePolicyEntries( "ProcessingTimePolicy", "보관 비용 정책", "display_mode_ProcessingTimePolicy", () => node.processing_time_policy, v => node.processing_time_policy = v, "processing_time_policy", node, SaveChange)); propertyWindow.LoadMixedProperties(entries); PolicyPropertyBuilder.HandleDisplayModeChanged(propertyWindow, "ProcessingTimePolicy", node.processing_time_policy.policy.ToString()); HandleDisplayModeChanged_InputOutput(node.node_type); } private void OnPropertyValueChanged(object sender, PropertyValueChangedEventArgs e) { PolicyPropertyBuilder.TryHandleDisplayModeChanged(e, propertyWindow, "display_mode_ProcessingTimePolicy", "ProcessingTimePolicy"); } private PropertyGroup CreateInputDetailGroup(ConveyorNode node) { return PropertyHelper.CreateConnectionGroup("inputs", "투입 대상 컴포넌트", node.inputs, SaveChange); } private PropertyGroup CreateOutputDetailGroup(ConveyorNode node) { return PropertyHelper.CreateConnectionGroup("outputs", "출하 대상 컴포넌트", node.outputs, SaveChange); } private void HandleDisplayModeChanged_InputOutput(string mode) { propertyWindow.SetGroupVisibility("inputs", false); propertyWindow.SetGroupVisibility("outputs", false); switch (mode) { case "start": propertyWindow.SetGroupVisibility("inputs", true); break; case "endpoint": propertyWindow.SetGroupVisibility("outputs", true); break; } } private void OnDestroy() { if (propertyWindow != null) propertyWindow.PropertyValueChanged -= OnPropertyValueChanged; } }