增加ControllerDefion引用直接生效效果
This commit is contained in:
parent
005899c17c
commit
68566ef5d5
@ -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;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user