Added OnMovement Activated&Deactivated to the IMovementController
This commit is contained in:
@@ -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];
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f9a57082945be29498d2785f8be6484d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -33,5 +33,8 @@ namespace Syntriax.Modules.Movement
|
||||
|
||||
rigid.velocity = velocity;
|
||||
}
|
||||
|
||||
protected override void OnDeactivated() { }
|
||||
protected override void OnActivated() { }
|
||||
}
|
||||
}
|
||||
|
@@ -24,5 +24,8 @@ namespace Syntriax.Modules.Movement
|
||||
velocity.x = moveValue;
|
||||
rigid.velocity = velocity;
|
||||
}
|
||||
|
||||
protected override void OnDeactivated() { }
|
||||
protected override void OnActivated() { }
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user