Files
ichni_Creator_Studio/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIToggle.cs

65 lines
2.1 KiB
C#
Raw Normal View History

using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
namespace Ichni.Editor
{
public class DynamicUIToggle : DynamicUIElement
{
public Toggle toggle;
2026-03-22 12:05:32 -04:00
private UnityAction<bool> customAction;
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
{
2026-03-22 12:05:32 -04:00
// [对象池安全] 精准解绑业务代理,不动预制体原生的展示事件!
toggle.onValueChanged.RemoveListener(OnToggleValueChanged);
customAction = null;
base.Initialize(baseElement, title, parameterName);
2025-02-21 14:08:32 -05:00
if (parameterName != string.Empty)
{
2026-03-22 12:05:32 -04:00
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);
2025-02-21 14:08:32 -05:00
}
else
{
toggle.isOn = false;
2026-03-22 12:05:32 -04:00
toggle.onValueChanged.AddListener(OnToggleValueChanged);
}
}
private void OnToggleValueChanged(bool value)
{
if (parameterName != string.Empty)
{
ApplyParameters(value);
2025-02-21 14:08:32 -05:00
}
2026-03-22 12:05:32 -04:00
customAction?.Invoke(value);
}
private void ApplyParameters(bool value)
{
2026-03-22 12:05:32 -04:00
Ichni.Editor.Commands.CommandManager.ExecuteCommand(new Ichni.Editor.Commands.ChangeValueCommand(connectedBaseElement, parameterName, value));
connectedBaseElement.Refresh();
}
2025-04-14 17:49:47 -04:00
public override DynamicUIElement AddListenerFunction(UnityAction action)
{
2026-03-22 12:05:32 -04:00
customAction += _ => action();
2025-04-14 17:49:47 -04:00
return this;
}
}
}