mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-08 09:35:55 +00:00
Selector Fix
This commit is contained in:
parent
c6fa31188a
commit
7c2d01a52e
3 changed files with 109 additions and 49 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue