mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-07 22:55:53 +00:00
Better handling of selection
This commit is contained in:
parent
acf3857129
commit
1c7afec7e2
2 changed files with 47 additions and 23 deletions
|
|
@ -10,17 +10,34 @@ public partial class Selector : Node2D
|
|||
private List<IInteractable> _interactables = [];
|
||||
|
||||
private int _selectedInteractable;
|
||||
|
||||
|
||||
private int SelectedInteractableIndex
|
||||
{
|
||||
get => _selectedInteractable;
|
||||
set
|
||||
{
|
||||
if (value >= _interactables.Count)
|
||||
{
|
||||
_selectedInteractable = 0;
|
||||
}
|
||||
|
||||
if (value < 0)
|
||||
{
|
||||
_selectedInteractable = _interactables.Count - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//[Signal]
|
||||
//public delegate void SelectedItemInteractableChangedEventHandler(IInteractable interactable);
|
||||
|
||||
|
||||
public IInteractable SelectedInteractable
|
||||
{
|
||||
get =>
|
||||
_interactables.Count > 0
|
||||
? _selectedInteractable >= _interactables.Count
|
||||
? SelectedInteractableIndex >= _interactables.Count
|
||||
? _interactables[^1]
|
||||
: _interactables[_selectedInteractable]
|
||||
: _interactables[SelectedInteractableIndex]
|
||||
: null;
|
||||
set
|
||||
{
|
||||
|
|
@ -31,14 +48,14 @@ public partial class Selector : Node2D
|
|||
NotifyChanged(null);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// If it's already in the list, set the current one to it, otherwise add it
|
||||
if (!_interactables.Contains(value))
|
||||
{
|
||||
AddInteractable(value);
|
||||
}
|
||||
|
||||
_selectedInteractable = _interactables.IndexOf(value);
|
||||
SelectedInteractableIndex = _interactables.IndexOf(value);
|
||||
NotifyChanged(value);
|
||||
}
|
||||
}
|
||||
|
|
@ -62,11 +79,12 @@ public partial class Selector : Node2D
|
|||
|
||||
public void SelectNext()
|
||||
{
|
||||
_selectedInteractable += 1;
|
||||
if (_selectedInteractable >= _interactables.Count)
|
||||
{
|
||||
_selectedInteractable = 0;
|
||||
}
|
||||
SelectedInteractableIndex += 1;
|
||||
// _selectedInteractable += 1;
|
||||
// if (_selectedInteractable >= _interactables.Count)
|
||||
// {
|
||||
// _selectedInteractable = 0;
|
||||
// }
|
||||
|
||||
if (_interactables.Count > 0)
|
||||
{
|
||||
|
|
@ -76,7 +94,7 @@ public partial class Selector : Node2D
|
|||
{
|
||||
_selectedInteractable = -1;
|
||||
}
|
||||
|
||||
|
||||
UpdatePosition();
|
||||
}
|
||||
|
||||
|
|
@ -87,15 +105,16 @@ public partial class Selector : Node2D
|
|||
|
||||
public void AddInteractable(IInteractable interactable)
|
||||
{
|
||||
if (!_interactables.Contains(interactable)) {
|
||||
if (!_interactables.Contains(interactable))
|
||||
{
|
||||
_interactables.Add(interactable);
|
||||
|
||||
if (_interactables.Count == 1)
|
||||
{
|
||||
_selectedInteractable = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
UpdatePosition();
|
||||
}
|
||||
|
||||
|
|
@ -105,6 +124,7 @@ public partial class Selector : Node2D
|
|||
{
|
||||
_interactables.Remove(interactable);
|
||||
}
|
||||
|
||||
UpdatePosition();
|
||||
}
|
||||
|
||||
|
|
@ -126,5 +146,4 @@ public partial class Selector : Node2D
|
|||
this.Visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue