增加ControllerDefion引用直接生效效果

This commit is contained in:
陈思海 2026-03-23 14:04:26 +08:00
parent 005899c17c
commit 68566ef5d5

View File

@ -19,6 +19,7 @@ namespace AlicizaX.UI
[SerializeField] private int _length = 2;
[SerializeField] private string _description = string.Empty;
[NonSerialized] private int _selectedIndex = -1;
[NonSerialized] private UXController _owner;
public string Id => _id;
@ -43,7 +44,16 @@ namespace AlicizaX.UI
public int SelectedIndex
{
get => _selectedIndex;
internal set => _selectedIndex = value;
set
{
if (_owner == null)
{
SetSelectedIndexSilently(Mathf.Clamp(value, 0, Length - 1));
return;
}
_owner.SetControllerIndexInternal(this, value);
}
}
internal void EnsureId()
@ -53,6 +63,16 @@ namespace AlicizaX.UI
_id = Guid.NewGuid().ToString("N");
}
}
internal void SetOwner(UXController owner)
{
_owner = owner;
}
internal void SetSelectedIndexSilently(int selectedIndex)
{
_selectedIndex = selectedIndex;
}
}
[SerializeField] private List<ControllerDefinition> _controllers = new List<ControllerDefinition>();
@ -61,7 +81,14 @@ namespace AlicizaX.UI
private readonly Dictionary<string, int> _controllerIdMap = new Dictionary<string, int>();
private readonly Dictionary<string, int> _controllerNameMap = new Dictionary<string, int>();
public IReadOnlyList<ControllerDefinition> Controllers => _controllers;
public IReadOnlyList<ControllerDefinition> Controllers
{
get
{
EnsureInitialized();
return _controllers;
}
}
public IReadOnlyList<UXBinding> Bindings => _bindings;
public int ControllerCount => _controllers.Count;
@ -103,6 +130,8 @@ namespace AlicizaX.UI
public ControllerDefinition GetControllerAt(int index)
{
EnsureInitialized();
if (index < 0 || index >= _controllers.Count)
{
return null;
@ -243,7 +272,8 @@ namespace AlicizaX.UI
}
controller.EnsureId();
controller.SelectedIndex = Mathf.Clamp(controller.SelectedIndex, -1, controller.Length - 1);
controller.SetOwner(this);
controller.SetSelectedIndexSilently(Mathf.Clamp(controller.SelectedIndex, -1, controller.Length - 1));
if (string.IsNullOrWhiteSpace(controller.Name))
{
@ -285,7 +315,7 @@ namespace AlicizaX.UI
return false;
}
controller.SelectedIndex = selectedIndex;
controller.SetSelectedIndexSilently(selectedIndex);
NotifyBindings(controller.Id, selectedIndex);
return true;
}