popup menu refactor, player class refactor

This commit is contained in:
Vova
2023-12-17 12:01:08 +02:00
parent 72191123c2
commit 19d57651c3
10 changed files with 261 additions and 194 deletions
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using UnityEngine;
public abstract class BaseInteractableObject : MonoBehaviour
@@ -30,52 +31,28 @@ public abstract class BaseInteractableObject : MonoBehaviour
};
}
public InteractionStatus Interact(Player player)
public async Task<InteractionStatus> ShowPopupMenu(Player player)
{
_player = player;
PrepareMenuActions();
switch (_currentStatus)
{
case InteractionStatus.None:
var filteredActions = _menuActions.Where(x => x.Value.IsEnabled).ToDictionary(i => i.Key, i => i.Value) ;
GameManager.Instance.UI.ShowItemPopupMenu(filteredActions, PopupMenuCallback);
_currentStatus = InteractionStatus.WaitForChoose;
break;
case InteractionStatus.Complete:
_currentStatus = InteractionStatus.None;
return InteractionStatus.Complete;
default:
if (_currentStatus != InteractionStatus.WaitForChoose && _currentStatus != InteractionStatus.Complete)
{
if (_player.IsPathComplete(_interactionPoint.position))
{
InteractAction(_selectedAction);
_currentStatus = InteractionStatus.None;
return InteractionStatus.Complete;
}
else
{
_currentStatus = InteractionStatus.FarFromPlayer;
}
}
break;
}
return _currentStatus;
}
private void PopupMenuCallback(RadialMenuActions action)
{
if (action == RadialMenuActions.Cancel)
var filteredActions = _menuActions.Where(x => x.Value.IsEnabled).ToDictionary(i => i.Key, i => i.Value);
var result=await GameManager.Instance.UI.ShowItemPopupMenu(filteredActions);
if (result == RadialMenuActions.Cancel)
{
_currentStatus = InteractionStatus.Complete;
}
else
{
_selectedAction= action;
_selectedAction = result;
_currentStatus = InteractionStatus.InProgress;
}
return _currentStatus;
}
public TaskStatus Interact()
{
InteractAction(_selectedAction);
return TaskStatus.Complete;
}
protected abstract void InteractAction(RadialMenuActions interactAction);