Added Movements List to the IMovementController + Code Improvement

This commit is contained in:
2022-03-10 23:18:11 +03:00
parent e531bdf77e
commit a991c05fad
4 changed files with 65 additions and 34 deletions

View File

@@ -3,17 +3,32 @@ using Syntriax.Modules.Movement.State;
using UnityEngine;
using UnityEngine.Events;
namespace Syntriax.Modules.Movement
{
public class MovementController : MonoBehaviour, IMovementController
{
public IMovement ActiveMovement { get; protected set; } = null;
public UnityEvent<IMovement> OnMovementChanged { get; protected set; } = new UnityEvent<IMovement>();
public UnityEvent<IMovement> OnMovementChanged { get; protected set; } = null;
private IMovement _activeMovement = null;
public IMovement ActiveMovement
{
get => _activeMovement;
protected set
{
_activeMovement = value;
OnMovementChanged.Invoke(value);
}
}
public List<IMovement> Movements { get; protected set; } = null;
protected List<IMovement> movements = new List<IMovement>(32);
protected IToggleState toggleState = null;
protected virtual void Awake()
{
OnMovementChanged = new UnityEvent<IMovement>();
Movements = new List<IMovement>(32);
}
protected virtual void Start()
{
toggleState = GetComponent<IToggleState>();
@@ -30,14 +45,14 @@ namespace Syntriax.Modules.Movement
public virtual void RecacheMovements()
{
foreach (IMovement movement in movements)
foreach (IMovement movement in Movements)
movement.OnTakeOverStateChanged.RemoveListener(OnTakeOverListener);
movements.Clear();
GetComponents<IMovement>(movements);
Movements.Clear();
GetComponents<IMovement>(Movements);
UpdateActiveMovement();
foreach (IMovement movement in movements)
foreach (IMovement movement in Movements)
movement.OnTakeOverStateChanged.AddListener(OnTakeOverListener);
}
@@ -46,16 +61,14 @@ namespace Syntriax.Modules.Movement
protected virtual void UpdateActiveMovement()
{
foreach (IMovement movement in movements)
foreach (IMovement movement in Movements)
if (movement.CanTakeOver)
{
ActiveMovement = movement;
OnMovementChanged.Invoke(ActiveMovement);
return;
}
ActiveMovement = movements[movements.Count - 1];
OnMovementChanged.Invoke(ActiveMovement);
ActiveMovement = Movements[Movements.Count - 1];
}
}
}