complete
This commit is contained in:
528
Assets/Scripts/Simulator/UI/PropertyWindow/SourceProperty.cs
Normal file
528
Assets/Scripts/Simulator/UI/PropertyWindow/SourceProperty.cs
Normal file
@@ -0,0 +1,528 @@
|
||||
|
||||
using Simulator.Data;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UVC.UI.Window.PropertyWindow;
|
||||
public enum SpawnPolicy
|
||||
{
|
||||
Constant,
|
||||
Normal,
|
||||
Uniform,
|
||||
Exponential,
|
||||
Triangular
|
||||
}
|
||||
public class SourceProperty : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
private PropertyWindow propertyWindow;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
propertyWindow.PropertyValueChanged += OnPropertyValueChanged;
|
||||
}
|
||||
|
||||
public void SetProertyWindow(ComponentType type, ComponentDataBase data)
|
||||
{
|
||||
if (PlayerPropertyDataBase.isPlaying)
|
||||
{
|
||||
return;
|
||||
}
|
||||
switch (type)
|
||||
{
|
||||
case ComponentType.Source:
|
||||
InitSourceProperty(data as SourceDataClass);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
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 InitSourceProperty(SourceDataClass source)
|
||||
{
|
||||
List<IPropertyEntry> entries = new List<IPropertyEntry>
|
||||
{
|
||||
new StringProperty("name", "이름", source.name)
|
||||
{
|
||||
IsReadOnly=true
|
||||
},
|
||||
new StringProperty("label", "라벨", source.label)
|
||||
{
|
||||
IsReadOnly=false
|
||||
}.Bind(
|
||||
setter: v => {source.label = v;SaveChange(source,v,"label"); }
|
||||
),
|
||||
CreatePositionGroup(source),
|
||||
new ListProperty("prefabType","생성될 개체 유형",new List<string>(PrefabManager.Instance.prefabDict.Keys),source.prefab)
|
||||
{
|
||||
IsReadOnly=false
|
||||
}.Bind(
|
||||
setter: v => {source.prefab=v; SaveChange(source,v,"prefab"); }
|
||||
),
|
||||
new EnumProperty("display_mode_TimePolicy", "생산 간격 정책",source.spawn_time_policy.policy).Bind(
|
||||
setter: v=>{source.spawn_time_policy=PolicyFactory.Create(v.ToString());SaveChange(source,PolicyFactory.Create(v.ToString()),"spawn_time_policy");}
|
||||
),
|
||||
CreateSpawnTimePolicy_Constant(source),
|
||||
CreateSpawnTimePolicy_Normal(source),
|
||||
CreateSpawnTimePolicy_Uniform(source),
|
||||
CreateSpawnTimePolicy_Exponential(source),
|
||||
CreateSpawnTimePolicy_Triangular(source),
|
||||
|
||||
new EnumProperty("display_mode_CountPolicy", "생산 개수 정책",source.spawn_count_policy.policy).Bind(
|
||||
setter: v=>{source.spawn_count_policy=PolicyFactory.Create(v.ToString());SaveChange(source,PolicyFactory.Create(v.ToString()),"spawn_count_policy");}
|
||||
),
|
||||
CreateSpawnCountPolicy_Constant(source),
|
||||
CreateSpawnCountPolicy_Normal(source),
|
||||
CreateSpawnCountPolicy_Uniform(source),
|
||||
CreateSpawnCountPolicy_Exponential(source),
|
||||
CreateSpawnCountPolicy_Triangular(source),
|
||||
|
||||
new BoolProperty("is_unlimited","무제한 모드",source.is_unlimited).Bind(
|
||||
setter: v => {source.is_unlimited = v;SaveChange(source,v,"is_unlimited"); }
|
||||
),
|
||||
new IntProperty("capacity","최대 수용 개수", source.max_spawn_limit)
|
||||
{
|
||||
IsReadOnly=false
|
||||
}.Bind(
|
||||
setter: v => { source.max_spawn_limit = v; SaveChange(source, v, "max_spawn_limit"); }
|
||||
),
|
||||
|
||||
new EnumProperty("display_mode_DefectPolicy", "불량률 정책",source.defect_rate_policy.policy).Bind(
|
||||
setter: v=>{source.defect_rate_policy=PolicyFactory.Create(v.ToString());SaveChange(source,PolicyFactory.Create(v.ToString()),"defect_rate_policy");}
|
||||
),
|
||||
CreateSpawnDefectPolicy_Constant(source),
|
||||
CreateSpawnDefectPolicy_Normal(source),
|
||||
CreateSpawnDefectPolicy_Uniform(source),
|
||||
CreateSpawnDefectPolicy_Exponential(source),
|
||||
CreateSpawnDefectPolicy_Triangular(source),
|
||||
};
|
||||
propertyWindow.LoadMixedProperties(entries);
|
||||
|
||||
HandleDisplayModeChanged_TimePolicy(source.spawn_time_policy.policy.ToString());
|
||||
HandleDisplayModeChanged_CountPolicy(source.spawn_count_policy.policy.ToString());
|
||||
HandleDisplayModeChanged_DefectPolicy(source.defect_rate_policy.policy.ToString());
|
||||
propertyWindow.SetPropertyVisibility("capacity", !source.is_unlimited);
|
||||
}
|
||||
|
||||
private void OnPropertyValueChanged(object sender, PropertyValueChangedEventArgs e)
|
||||
{
|
||||
Debug.Log($"[PropertyChanged] Id:{e.PropertyId}, Type:{e.PropertyType}, Value:{e.NewValue}");
|
||||
|
||||
// 동적 그룹 표시/비표시 테스트
|
||||
if (e.PropertyId == "display_mode_TimePolicy")
|
||||
{
|
||||
string selectedMode = e.NewValue.ToString();
|
||||
HandleDisplayModeChanged_TimePolicy(selectedMode);
|
||||
}
|
||||
if (e.PropertyId == "display_mode_CountPolicy")
|
||||
{
|
||||
string selectedMode = e.NewValue.ToString();
|
||||
HandleDisplayModeChanged_CountPolicy(selectedMode);
|
||||
}
|
||||
if (e.PropertyId == "display_mode_DefectPolicy")
|
||||
{
|
||||
string selectedMode = e.NewValue.ToString();
|
||||
HandleDisplayModeChanged_DefectPolicy(selectedMode);
|
||||
}
|
||||
if (e.PropertyId == "is_unlimited")
|
||||
{
|
||||
bool flag = Convert.ToBoolean(e.NewValue);
|
||||
propertyWindow.SetPropertyVisibility("capacity", !flag);
|
||||
}
|
||||
}
|
||||
|
||||
private PropertyGroup CreatePositionGroup(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("robotArm_position", "위치 및 회전", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("x_position", "X 좌표(m)", source.physical.position.x)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {source.physical.position.x = v;SaveChange(source,v,"physical.position.x"); }
|
||||
),
|
||||
new FloatProperty("y_position", "y 좌표(m)", source.physical.position.y)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {source.physical.position.y = v;SaveChange(source,v,"physical.position.y"); }
|
||||
),
|
||||
new FloatProperty("orientation", "회전(°)", source.physical.orientation)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {source.physical.orientation = v;SaveChange(source,v,"physical.orientation");propertyWindow.ApplyExternalValue("orientation",RotationSnap.snaporientaion(v),false); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
|
||||
#region 생산 간격 정책
|
||||
private PropertyGroup CreateSpawnTimePolicy_Constant(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnTimePolicy_Constant", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnTimePolicy_Constant_Value", "상수 값", (source.spawn_time_policy as Policy_Constant) ?.value ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_time_policy as Policy_Constant).value = v;SaveChange(source,v,"spawn_time_policy.value"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
|
||||
private PropertyGroup CreateSpawnTimePolicy_Normal(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnTimePolicy_Normal", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnTimePolicy_Normal_Mean", "정규 분포 표준치", (source.spawn_time_policy as Policy_Normal) ?.mean ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_time_policy as Policy_Normal).mean = v;SaveChange(source,v,"spawn_time_policy.mean"); }
|
||||
),
|
||||
new FloatProperty("SpawnTimePolicy_Normal_Gap", "정규 분포 표준 편차", (source.spawn_time_policy as Policy_Normal) ?.stddev ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_time_policy as Policy_Normal).stddev = v;SaveChange(source,v,"spawn_time_policy.stddev"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
|
||||
private PropertyGroup CreateSpawnTimePolicy_Uniform(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnTimePolicy_Uniform", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnTimePolicy_Uniform_Min", "균등 분포 최소값", (source.spawn_time_policy as Policy_Uniform) ?.min_val ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_time_policy as Policy_Uniform).min_val = v;SaveChange(source,v,"spawn_time_policy.min_val"); }
|
||||
),
|
||||
new FloatProperty("SpawnTimePolicy_Uniform_Max", "균등 분포 최대값", (source.spawn_time_policy as Policy_Uniform) ?.max_val ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_time_policy as Policy_Uniform).max_val = v;SaveChange(source,v,"spawn_time_policy.max_val"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
|
||||
private PropertyGroup CreateSpawnTimePolicy_Exponential(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnTimePolicy_Exponential", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnTimePolicy_Exponential_Mean", "지수 분포 평균치", (source.spawn_time_policy as Policy_Exponential) ?.mean ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_time_policy as Policy_Exponential).mean = v;SaveChange(source,v,"spawn_time_policy.mean"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
|
||||
private PropertyGroup CreateSpawnTimePolicy_Triangular(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnTimePolicy_Triangular", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnTimePolicy_Triangular_Min", "지수 분포 최소값", (source.spawn_time_policy as Policy_Triangular) ?.min_val ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_time_policy as Policy_Triangular).min_val = v;SaveChange(source,v,"spawn_time_policy.min_val"); }
|
||||
),
|
||||
new FloatProperty("SpawnTimePolicy_Triangular_Mean", "지수 분포 최빈값", (source.spawn_time_policy as Policy_Triangular) ?.mode ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_time_policy as Policy_Triangular).mode = v;SaveChange(source,v,"spawn_time_policy.mode"); }
|
||||
),
|
||||
new FloatProperty("SpawnTimePolicy_Triangular_Max", "지수 분포 최대값", (source.spawn_time_policy as Policy_Triangular) ?.max_val ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_time_policy as Policy_Triangular).max_val = v;SaveChange(source,v,"spawn_time_policy.max_val"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
|
||||
private void HandleDisplayModeChanged_TimePolicy(string mode)
|
||||
{
|
||||
// 모든 조건부 그룹 숨김
|
||||
propertyWindow.SetGroupVisibility("SpawnTimePolicy_Constant", false);
|
||||
propertyWindow.SetGroupVisibility("SpawnTimePolicy_Normal", false);
|
||||
propertyWindow.SetGroupVisibility("SpawnTimePolicy_Uniform", false);
|
||||
propertyWindow.SetGroupVisibility("SpawnTimePolicy_Exponential", false);
|
||||
propertyWindow.SetGroupVisibility("SpawnTimePolicy_Triangular", false);
|
||||
|
||||
// 선택된 모드에 따라 해당 그룹만 표시
|
||||
switch (mode)
|
||||
{
|
||||
case "Constant":
|
||||
propertyWindow.SetGroupVisibility("SpawnTimePolicy_Constant", true);
|
||||
break;
|
||||
case "Normal":
|
||||
propertyWindow.SetGroupVisibility("SpawnTimePolicy_Normal", true);
|
||||
break;
|
||||
case "Uniform":
|
||||
propertyWindow.SetGroupVisibility("SpawnTimePolicy_Uniform", true);
|
||||
break;
|
||||
case "Exponential":
|
||||
propertyWindow.SetGroupVisibility("SpawnTimePolicy_Exponential", true);
|
||||
break;
|
||||
case "Triangular":
|
||||
propertyWindow.SetGroupVisibility("SpawnTimePolicy_Triangular", true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 생산 개수 정책
|
||||
private PropertyGroup CreateSpawnCountPolicy_Constant(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnCountPolicy_Constant", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnCountPolicy_Constant_Value", "상수 값", (source.spawn_count_policy as Policy_Constant)?.value??0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_count_policy as Policy_Constant).value = v;SaveChange(source,v,"spawn_count_policy.value"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
|
||||
private PropertyGroup CreateSpawnCountPolicy_Normal(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnCountPolicy_Normal", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnCountPolicy_Normal_Mean", "정규 분포 표준치", (source.spawn_count_policy as Policy_Normal) ?.mean ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_count_policy as Policy_Normal).mean = v;SaveChange(source,v,"spawn_count_policy.mean"); }
|
||||
),
|
||||
new FloatProperty("SpawnCountPolicy_Normal_Gap", "정규 분포 표준 편차", (source.spawn_count_policy as Policy_Normal) ?.stddev ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_count_policy as Policy_Normal).stddev = v;SaveChange(source,v,"spawn_count_policy.stddev"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
|
||||
private PropertyGroup CreateSpawnCountPolicy_Uniform(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnCountPolicy_Uniform", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnCountPolicy_Uniform_Min", "균등 분포 최소값", (source.spawn_count_policy as Policy_Uniform) ?.min_val ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_count_policy as Policy_Uniform).min_val = v;SaveChange(source,v,"spawn_count_policy.min_val"); }
|
||||
),
|
||||
new FloatProperty("SpawnCountPolicy_Uniform_Max", "균등 분포 최대값", (source.spawn_count_policy as Policy_Uniform) ?.max_val ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_count_policy as Policy_Uniform).max_val = v;SaveChange(source,v,"spawn_count_policy.max_val"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
|
||||
private PropertyGroup CreateSpawnCountPolicy_Exponential(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnCountPolicy_Exponential", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnCountPolicy_Exponential_Mean", "지수 분포 평균치", (source.spawn_count_policy as Policy_Exponential) ?.mean ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_count_policy as Policy_Exponential).mean = v;SaveChange(source,v,"spawn_count_policy.mean"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
|
||||
private PropertyGroup CreateSpawnCountPolicy_Triangular(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnCountPolicy_Triangular", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnCountPolicy_Triangular_Min", "지수 분포 최소값", (source.spawn_count_policy as Policy_Triangular) ?.min_val ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_count_policy as Policy_Triangular).min_val = v;SaveChange(source,v,"spawn_count_policy.min_val"); }
|
||||
),
|
||||
new FloatProperty("SpawnCountPolicy_Triangular_Mean", "지수 분포 최빈값", (source.spawn_count_policy as Policy_Triangular) ?.mode ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_count_policy as Policy_Triangular).mode = v;SaveChange(source,v,"spawn_count_policy.mode"); }
|
||||
),
|
||||
new FloatProperty("SpawnCountPolicy_Triangular_Max", "지수 분포 최대값", (source.spawn_count_policy as Policy_Triangular) ?.max_val ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.spawn_count_policy as Policy_Triangular).max_val = v;SaveChange(source,v,"spawn_count_policy.max_val"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
private void HandleDisplayModeChanged_CountPolicy(string mode)
|
||||
{
|
||||
// 모든 조건부 그룹 숨김
|
||||
propertyWindow.SetGroupVisibility("SpawnCountPolicy_Constant", false);
|
||||
propertyWindow.SetGroupVisibility("SpawnCountPolicy_Normal", false);
|
||||
propertyWindow.SetGroupVisibility("SpawnCountPolicy_Uniform", false);
|
||||
propertyWindow.SetGroupVisibility("SpawnCountPolicy_Exponential", false);
|
||||
propertyWindow.SetGroupVisibility("SpawnCountPolicy_Triangular", false);
|
||||
|
||||
// 선택된 모드에 따라 해당 그룹만 표시
|
||||
switch (mode)
|
||||
{
|
||||
case "Constant":
|
||||
propertyWindow.SetGroupVisibility("SpawnCountPolicy_Constant", true);
|
||||
break;
|
||||
case "Normal":
|
||||
propertyWindow.SetGroupVisibility("SpawnCountPolicy_Normal", true);
|
||||
break;
|
||||
case "Uniform":
|
||||
propertyWindow.SetGroupVisibility("SpawnCountPolicy_Uniform", true);
|
||||
break;
|
||||
case "Exponential":
|
||||
propertyWindow.SetGroupVisibility("SpawnCountPolicy_Exponential", true);
|
||||
break;
|
||||
case "Triangular":
|
||||
propertyWindow.SetGroupVisibility("SpawnCountPolicy_Triangular", true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 불량률 정책
|
||||
private PropertyGroup CreateSpawnDefectPolicy_Constant(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnDefectPolicy_Constant", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnDefectPolicy_Constant_Value", "상수 값", (source.defect_rate_policy as Policy_Constant)?.value??0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.defect_rate_policy as Policy_Constant).value = v;SaveChange(source,v,"defect_rate_policy.value"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
|
||||
private PropertyGroup CreateSpawnDefectPolicy_Normal(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnDefectPolicy_Normal", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnDefectPolicy_Normal_Mean", "정규 분포 표준치", (source.defect_rate_policy as Policy_Normal)?.mean??0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.defect_rate_policy as Policy_Normal).mean = v;SaveChange(source,v,"defect_rate_policy.mean"); }
|
||||
),
|
||||
new FloatProperty("SpawnDefectPolicy_Normal_Gap", "정규 분포 표준 편차", (source.defect_rate_policy as Policy_Normal)?.stddev??0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.defect_rate_policy as Policy_Normal).stddev = v;SaveChange(source,v,"defect_rate_policy.stddev"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
|
||||
private PropertyGroup CreateSpawnDefectPolicy_Uniform(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnDefectPolicy_Uniform", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnDefectPolicy_Uniform_Min", "균등 분포 최소값", (source.defect_rate_policy as Policy_Uniform) ?.min_val ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.defect_rate_policy as Policy_Uniform).min_val = v;SaveChange(source,v,"defect_rate_policy.min_val"); }
|
||||
),
|
||||
new FloatProperty("SpawnDefectPolicy_Uniform_Max", "균등 분포 최대값", (source.defect_rate_policy as Policy_Uniform) ?.max_val ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.defect_rate_policy as Policy_Uniform).max_val = v;SaveChange(source,v,"defect_rate_policy.max_val"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
|
||||
private PropertyGroup CreateSpawnDefectPolicy_Exponential(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnDefectPolicy_Exponential", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnDefectPolicy_Exponential_Mean", "지수 분포 평균치", (source.defect_rate_policy as Policy_Exponential) ?.mean ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.defect_rate_policy as Policy_Exponential).mean = v;SaveChange(source,v,"defect_rate_policy.mean"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
|
||||
private PropertyGroup CreateSpawnDefectPolicy_Triangular(SourceDataClass source)
|
||||
{
|
||||
var group = new PropertyGroup("SpawnDefectPolicy_Triangular", "", isExpanded: true);
|
||||
group.AddItems(new IPropertyItem[]
|
||||
{
|
||||
new FloatProperty("SpawnDefectPolicy_Triangular_Min", "지수 분포 최소값", (source.defect_rate_policy as Policy_Triangular) ?.min_val ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.defect_rate_policy as Policy_Triangular).min_val = v;SaveChange(source,v,"defect_rate_policy.min_val"); }
|
||||
),
|
||||
new FloatProperty("SpawnDefectPolicy_Triangular_Mean", "지수 분포 최빈값", (source.defect_rate_policy as Policy_Triangular) ?.mode ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.defect_rate_policy as Policy_Triangular).mode = v;SaveChange(source,v,"defect_rate_policy.mode"); }
|
||||
),
|
||||
new FloatProperty("SpawnDefectPolicy_Triangular_Max", "지수 분포 최대값", (source.defect_rate_policy as Policy_Triangular) ?.max_val ?? 0f)
|
||||
{
|
||||
}.Bind(
|
||||
setter: v => {(source.defect_rate_policy as Policy_Triangular).max_val = v;SaveChange(source,v,"defect_rate_policy.max_val"); }
|
||||
),
|
||||
});
|
||||
return group;
|
||||
}
|
||||
private void HandleDisplayModeChanged_DefectPolicy(string mode)
|
||||
{
|
||||
// 모든 조건부 그룹 숨김
|
||||
propertyWindow.SetGroupVisibility("SpawnDefectPolicy_Constant", false);
|
||||
propertyWindow.SetGroupVisibility("SpawnDefectPolicy_Normal", false);
|
||||
propertyWindow.SetGroupVisibility("SpawnDefectPolicy_Uniform", false);
|
||||
propertyWindow.SetGroupVisibility("SpawnDefectPolicy_Exponential", false);
|
||||
propertyWindow.SetGroupVisibility("SpawnDefectPolicy_Triangular", false);
|
||||
|
||||
// 선택된 모드에 따라 해당 그룹만 표시
|
||||
switch (mode)
|
||||
{
|
||||
case "Constant":
|
||||
propertyWindow.SetGroupVisibility("SpawnDefectPolicy_Constant", true);
|
||||
break;
|
||||
case "Normal":
|
||||
propertyWindow.SetGroupVisibility("SpawnDefectPolicy_Normal", true);
|
||||
break;
|
||||
case "Uniform":
|
||||
propertyWindow.SetGroupVisibility("SpawnDefectPolicy_Uniform", true);
|
||||
break;
|
||||
case "Exponential":
|
||||
propertyWindow.SetGroupVisibility("SpawnDefectPolicy_Exponential", true);
|
||||
break;
|
||||
case "Triangular":
|
||||
propertyWindow.SetGroupVisibility("SpawnDefectPolicy_Triangular", true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
Reference in New Issue
Block a user