Added OnMovement Activated&Deactivated to the IMovementController

This commit is contained in:
2022-03-13 20:59:45 +03:00
parent a991c05fad
commit e35cdcb069
7 changed files with 54 additions and 6 deletions

View File

@@ -1,74 +0,0 @@
using System.Collections.Generic;
using Syntriax.Modules.Movement.State;
using UnityEngine;
using UnityEngine.Events;
namespace Syntriax.Modules.Movement
{
public class MovementController : MonoBehaviour, IMovementController
{
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 IToggleState toggleState = null;
protected virtual void Awake()
{
OnMovementChanged = new UnityEvent<IMovement>();
Movements = new List<IMovement>(32);
}
protected virtual void Start()
{
toggleState = GetComponent<IToggleState>();
RecacheMovements();
}
protected virtual void FixedUpdate()
{
if (!toggleState.Toggled)
return;
ActiveMovement.ApplyMovement();
}
public virtual void RecacheMovements()
{
foreach (IMovement movement in Movements)
movement.OnTakeOverStateChanged.RemoveListener(OnTakeOverListener);
Movements.Clear();
GetComponents<IMovement>(Movements);
UpdateActiveMovement();
foreach (IMovement movement in Movements)
movement.OnTakeOverStateChanged.AddListener(OnTakeOverListener);
}
private void OnTakeOverListener(bool arg0) => UpdateActiveMovement();
protected virtual void UpdateActiveMovement()
{
foreach (IMovement movement in Movements)
if (movement.CanTakeOver)
{
ActiveMovement = movement;
return;
}
ActiveMovement = Movements[Movements.Count - 1];
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: f9a57082945be29498d2785f8be6484d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -33,5 +33,8 @@ namespace Syntriax.Modules.Movement
rigid.velocity = velocity;
}
protected override void OnDeactivated() { }
protected override void OnActivated() { }
}
}

View File

@@ -24,5 +24,8 @@ namespace Syntriax.Modules.Movement
velocity.x = moveValue;
rigid.velocity = velocity;
}
protected override void OnDeactivated() { }
protected override void OnActivated() { }
}
}

View File

@@ -9,6 +9,7 @@ namespace Syntriax.Modules.Movement
{
protected Rigidbody2D rigid = null;
protected IToggleState toggleState = null;
protected IMovementController movementController = null;
private bool _canTakeOver = false;
public float BaseSpeed { get; set; } = 1f;
@@ -40,6 +41,26 @@ namespace Syntriax.Modules.Movement
{
rigid = GetComponent<Rigidbody2D>();
toggleState = GetComponent<ToggleState>();
movementController = GetComponent<IMovementController>();
movementController.OnMovementActivated.AddListener(OnActivated);
movementController.OnMovementDeactivated.AddListener(OnDeactivated);
}
protected abstract void OnDeactivated();
private void OnDeactivated(IMovement movement)
{
if ((object)movement != this)
return;
OnDeactivated();
}
protected abstract void OnActivated();
private void OnActivated(IMovement movement)
{
if ((object)movement != this)
return;
OnActivated();
}
public abstract void Move(float x = 0, float y = 0, float z = 0);