Selector Fix

This commit is contained in:
Marco 2025-08-12 10:42:09 +02:00
commit 7c2d01a52e
3 changed files with 109 additions and 49 deletions

View file

@ -23,9 +23,9 @@ public partial class SelectorController : Node
public bool CanSelect => _canSelect;
private bool _autoSelect = false;
private double _cooldownTimer = 0f;
private Interactable _lastInteractable;
private List<IInteractable> _interactables = [];
@ -40,6 +40,7 @@ public partial class SelectorController : Node
if (value >= _interactables.Count)
{
_selectedInteractable = 0;
return;
}
if (value < 0)
@ -49,21 +50,35 @@ public partial class SelectorController : Node
// {
// _selectedInteractable = 0;
// }
return;
}
_selectedInteractable = value;
}
}
public IInteractable GetSelectedInteractable()
{
return SelectedInteractableIndex < 0
? null
: _interactables.Count > 0
? SelectedInteractableIndex >= _interactables.Count
? _interactables[^1]
: _interactables[SelectedInteractableIndex]
: null;
}
public IInteractable SelectedInteractable
{
// The problem here is that if it's deselected the index is -1
get =>
SelectedInteractableIndex < 0
? null
: _interactables.Count > 0
? SelectedInteractableIndex >= _interactables.Count
? _interactables[^1]
: _interactables[SelectedInteractableIndex]
: null;
// get =>
// SelectedInteractableIndex < 0
// ? null
// : _interactables.Count > 0
// ? SelectedInteractableIndex >= _interactables.Count
// ? _interactables[^1]
// : _interactables[SelectedInteractableIndex]
// : null;
set
{
// Passing null deselects the interactable
@ -128,8 +143,6 @@ public partial class SelectorController : Node
{
_interactables.Add(interactable);
// Always set the current one to the newest
SelectedInteractable = interactable;
// if (_interactables.Count == 1)
// {
@ -138,6 +151,9 @@ public partial class SelectorController : Node
// }
}
// Always set the current one to the newest
SelectedInteractable = interactable;
UpdatePosition();
}
@ -153,7 +169,6 @@ public partial class SelectorController : Node
SelectedInteractable = null;
//SelectedInteractableIndex = -1;
EmitSignalHideSelector();
}
public void DeselectWithCooldown()
@ -165,11 +180,12 @@ public partial class SelectorController : Node
public void UpdatePosition()
{
if (SelectedInteractable != null)
var selected = GetSelectedInteractable();
if (selected != null)
{
EmitSignalChangePosition(SelectedInteractable.GetScreenPosition());
EmitSignalChangePosition(selected.GetScreenPosition());
//EmitSignalChangePosition3D();
EmitSignalChangeParent3D(SelectedInteractable as Node3D);
EmitSignalChangeParent3D(selected as Node3D);
EmitSignalShowSelector();
}
else