diff --git a/Runtime/UXComponent/Controller/UXController.cs b/Runtime/UXComponent/Controller/UXController.cs index 43b0097..e5ab88c 100644 --- a/Runtime/UXComponent/Controller/UXController.cs +++ b/Runtime/UXComponent/Controller/UXController.cs @@ -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 _controllers = new List(); @@ -61,7 +81,14 @@ namespace AlicizaX.UI private readonly Dictionary _controllerIdMap = new Dictionary(); private readonly Dictionary _controllerNameMap = new Dictionary(); - public IReadOnlyList Controllers => _controllers; + public IReadOnlyList Controllers + { + get + { + EnsureInitialized(); + return _controllers; + } + } public IReadOnlyList 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; }