超级爆改
This commit is contained in:
@@ -11,30 +11,54 @@ namespace Ichni.Editor
|
||||
{
|
||||
public Toggle toggle;
|
||||
|
||||
private UnityAction<bool> customAction;
|
||||
|
||||
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
|
||||
{
|
||||
// [对象池安全] 精准解绑业务代理,不动预制体原生的展示事件!
|
||||
toggle.onValueChanged.RemoveListener(OnToggleValueChanged);
|
||||
customAction = null;
|
||||
|
||||
base.Initialize(baseElement, title, parameterName);
|
||||
if (parameterName != string.Empty)
|
||||
{
|
||||
|
||||
toggle.isOn = (bool)ReflectionHelper.GetDeepValue(connectedBaseElement, parameterName);
|
||||
toggle.onValueChanged.AddListener(ApplyParameters);
|
||||
var val = ReflectionHelper.GetDeepValue(connectedBaseElement, parameterName);
|
||||
if (val != null)
|
||||
{
|
||||
toggle.isOn = (bool)val;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"[DynamicUI] 尝试绑定 {title} ({parameterName}) 失败,由于其值或路径无效。");
|
||||
toggle.isOn = false;
|
||||
}
|
||||
toggle.onValueChanged.AddListener(OnToggleValueChanged);
|
||||
}
|
||||
else
|
||||
{
|
||||
toggle.isOn = false;
|
||||
toggle.onValueChanged.AddListener(OnToggleValueChanged);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnToggleValueChanged(bool value)
|
||||
{
|
||||
if (parameterName != string.Empty)
|
||||
{
|
||||
ApplyParameters(value);
|
||||
}
|
||||
customAction?.Invoke(value);
|
||||
}
|
||||
|
||||
private void ApplyParameters(bool value)
|
||||
{
|
||||
ReflectionHelper.SetDeepValue(connectedBaseElement, parameterName, value);
|
||||
Ichni.Editor.Commands.CommandManager.ExecuteCommand(new Ichni.Editor.Commands.ChangeValueCommand(connectedBaseElement, parameterName, value));
|
||||
connectedBaseElement.Refresh();
|
||||
}
|
||||
|
||||
public override DynamicUIElement AddListenerFunction(UnityAction action)
|
||||
{
|
||||
toggle.onValueChanged.AddListener(_ => action());
|
||||
customAction += _ => action();
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user