VariableMovement Added
This commit is contained in:
parent
a047be629b
commit
e531bdf77e
|
@ -1,3 +1,16 @@
|
||||||
{
|
{
|
||||||
"name": "Movement"
|
"name": "Movement",
|
||||||
}
|
"rootNamespace": "",
|
||||||
|
"references": [
|
||||||
|
"GUID:75469ad4d38634e559750d17036d5f7c"
|
||||||
|
],
|
||||||
|
"includePlatforms": [],
|
||||||
|
"excludePlatforms": [],
|
||||||
|
"allowUnsafeCode": false,
|
||||||
|
"overrideReferences": false,
|
||||||
|
"precompiledReferences": [],
|
||||||
|
"autoReferenced": true,
|
||||||
|
"defineConstraints": [],
|
||||||
|
"versionDefines": [],
|
||||||
|
"noEngineReferences": false
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 726dbb7aaeb452e42b1faf1318513cdb
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,7 @@
|
||||||
|
namespace Syntriax.Modules.Movement.VariableMovement
|
||||||
|
{
|
||||||
|
public interface IVariableMovement
|
||||||
|
{
|
||||||
|
VMAsset Asset { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6cdf8a548c241e0419fcf7e95c760cae
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,14 @@
|
||||||
|
using UnityEngine.Events;
|
||||||
|
using UnityEngine.InputSystem;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement.VariableMovement
|
||||||
|
{
|
||||||
|
public interface IVariableMovementController
|
||||||
|
{
|
||||||
|
IVariableMovement ActiveVariableMovement { get; }
|
||||||
|
UnityEvent<IVariableMovement> OnVariableMovementChanged { get; }
|
||||||
|
IInputActionCollection InputActionCollection { get; set; }
|
||||||
|
|
||||||
|
void LoadVariableMovementCollection(VMCollection collection);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8626f2dd751462548adce79ccb84d6d3
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,10 @@
|
||||||
|
using UnityEngine.Events;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement.VariableMovement
|
||||||
|
{
|
||||||
|
public interface IVariableMovementWithState : IVariableMovement
|
||||||
|
{
|
||||||
|
bool Enabled { get; set; }
|
||||||
|
UnityEvent<bool> OnToggleStateChanged { get; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c4e5bc603a4ef1342abf1e987cfced7f
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 63a9b9d234afa1d4d81a6f018393c057
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,10 @@
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement.VariableMovement
|
||||||
|
{
|
||||||
|
[CreateAssetMenu(fileName = "VMAsset", menuName = "Syntriax/Modules/Movement/Variable Movement/Asset", order = 0)]
|
||||||
|
public class VMAssetSO : ScriptableObject
|
||||||
|
{
|
||||||
|
public VMAsset asset;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 675d01134857a5b4aa8278985b7d2c09
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,10 @@
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement.VariableMovement
|
||||||
|
{
|
||||||
|
[CreateAssetMenu(fileName = "VMCollection", menuName = "Syntriax/Modules/Movement/Variable Movement/Collection", order = 0)]
|
||||||
|
public class VMCollectionSO : ScriptableObject
|
||||||
|
{
|
||||||
|
public VMCollection collection;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b6d52a12481917c4b877c026fa81dfef
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,19 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement.VariableMovement
|
||||||
|
{
|
||||||
|
[Serializable]
|
||||||
|
public struct VMAsset
|
||||||
|
{
|
||||||
|
public string Name;
|
||||||
|
public float Multiplier;
|
||||||
|
public string ActionReference;
|
||||||
|
|
||||||
|
public VMAsset(string name, float multiplier, string actionReference)
|
||||||
|
{
|
||||||
|
Name = name;
|
||||||
|
Multiplier = multiplier;
|
||||||
|
ActionReference = actionReference;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 35f90754856e0cf43a33a1a6bc5e0423
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,17 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement.VariableMovement
|
||||||
|
{
|
||||||
|
[Serializable]
|
||||||
|
public struct VMCollection
|
||||||
|
{
|
||||||
|
public VMAsset DefaultAsset;
|
||||||
|
public VMAsset[] VMAssets;
|
||||||
|
|
||||||
|
public VMCollection(VMAsset defaultAsset, VMAsset[] vMAssets)
|
||||||
|
{
|
||||||
|
DefaultAsset = defaultAsset;
|
||||||
|
VMAssets = vMAssets;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6c9addcc3980a2948b5c2e493f8f1642
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,11 @@
|
||||||
|
namespace Syntriax.Modules.Movement.VariableMovement
|
||||||
|
{
|
||||||
|
public class VariableMovement : IVariableMovement
|
||||||
|
{
|
||||||
|
public VMAsset Asset { get; set; }
|
||||||
|
|
||||||
|
public VariableMovement() { }
|
||||||
|
public VariableMovement(VMAsset asset)
|
||||||
|
=> Asset = asset;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9fa3a5e4edf40ce42a96a32da76de626
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,91 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.Events;
|
||||||
|
using UnityEngine.InputSystem;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement.VariableMovement
|
||||||
|
{
|
||||||
|
public class VariableMovementController : MonoBehaviour, IVariableMovementController
|
||||||
|
{
|
||||||
|
public UnityEvent<IVariableMovement> OnVariableMovementChanged { get; protected set; } = null;
|
||||||
|
public IInputActionCollection InputActionCollection { get; set; } = null;
|
||||||
|
private IVariableMovement _activeVariableMovement = null;
|
||||||
|
public IVariableMovement ActiveVariableMovement
|
||||||
|
{
|
||||||
|
get => _activeVariableMovement;
|
||||||
|
protected set
|
||||||
|
{
|
||||||
|
_activeVariableMovement = value;
|
||||||
|
OnVariableMovementChanged.Invoke(value);
|
||||||
|
|
||||||
|
if (movementController != null)
|
||||||
|
SetMultiplierToActiveMovement(movementController.ActiveMovement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IMovementController movementController = null;
|
||||||
|
protected IVariableMovement defaultVariableMovement = null;
|
||||||
|
protected List<IVariableMovementWithState> variableMovementsWithState = null;
|
||||||
|
protected VMCollection collection;
|
||||||
|
|
||||||
|
protected virtual void Awake()
|
||||||
|
{
|
||||||
|
OnVariableMovementChanged = new UnityEvent<IVariableMovement>();
|
||||||
|
defaultVariableMovement = new VariableMovement();
|
||||||
|
variableMovementsWithState = new List<IVariableMovementWithState>(16);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void Start()
|
||||||
|
{
|
||||||
|
movementController = GetComponent<IMovementController>();
|
||||||
|
movementController.OnMovementChanged.AddListener(SetMultiplierToActiveMovement);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void SetMultiplierToActiveMovement(IMovement currentMovement)
|
||||||
|
=> currentMovement.MovementMultiplier = ActiveVariableMovement.Asset.Multiplier;
|
||||||
|
|
||||||
|
public void LoadVariableMovementCollection(VMCollection collection)
|
||||||
|
{
|
||||||
|
if (InputActionCollection == null)
|
||||||
|
throw new System.NullReferenceException("InputActionCollection must be set on the VariableMovementController to load a collection!");
|
||||||
|
|
||||||
|
this.collection = collection;
|
||||||
|
|
||||||
|
UnsubscribeFromMovements();
|
||||||
|
|
||||||
|
variableMovementsWithState.Clear();
|
||||||
|
foreach (VMAsset asset in collection.VMAssets)
|
||||||
|
variableMovementsWithState.Add(new VariableMovementWithState(asset, InputActionCollection));
|
||||||
|
defaultVariableMovement.Asset = collection.DefaultAsset;
|
||||||
|
|
||||||
|
SubscribeToMovements();
|
||||||
|
UpdateActiveVariableMovement();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void SubscribeToMovements()
|
||||||
|
{
|
||||||
|
foreach (IVariableMovementWithState variableMovementWithState in variableMovementsWithState)
|
||||||
|
variableMovementWithState.OnToggleStateChanged.AddListener(VariableMovementStateListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void UnsubscribeFromMovements()
|
||||||
|
{
|
||||||
|
foreach (IVariableMovementWithState variableMovementWithState in variableMovementsWithState)
|
||||||
|
variableMovementWithState.OnToggleStateChanged.RemoveListener(VariableMovementStateListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void VariableMovementStateListener(bool arg0) => UpdateActiveVariableMovement();
|
||||||
|
protected virtual void UpdateActiveVariableMovement()
|
||||||
|
{
|
||||||
|
foreach (IVariableMovementWithState variableMovementWithState in variableMovementsWithState)
|
||||||
|
if (variableMovementWithState.Enabled)
|
||||||
|
{
|
||||||
|
ActiveVariableMovement = variableMovementWithState;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ActiveVariableMovement = defaultVariableMovement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9c54e2868362dbe4eab92c16ee11fc42
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,63 @@
|
||||||
|
using UnityEngine.Events;
|
||||||
|
using UnityEngine.InputSystem;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement.VariableMovement
|
||||||
|
{
|
||||||
|
public class VariableMovementWithState : IVariableMovementWithState
|
||||||
|
{
|
||||||
|
public UnityEvent<bool> OnToggleStateChanged { get; protected set; } = null;
|
||||||
|
private bool _enabled = false;
|
||||||
|
public bool Enabled
|
||||||
|
{
|
||||||
|
get => _enabled;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
bool isNewValue = _enabled != value;
|
||||||
|
|
||||||
|
_enabled = value;
|
||||||
|
|
||||||
|
if (isNewValue)
|
||||||
|
OnToggleStateChanged.Invoke(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private VMAsset _asset;
|
||||||
|
public VMAsset Asset
|
||||||
|
{
|
||||||
|
get => _asset;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (actionReference != null)
|
||||||
|
{
|
||||||
|
actionReference.performed -= Performed;
|
||||||
|
actionReference.canceled -= Cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (InputAction action in inputClass)
|
||||||
|
if (action.name == value.Name)
|
||||||
|
{
|
||||||
|
actionReference = action;
|
||||||
|
actionReference.performed += Performed;
|
||||||
|
actionReference.canceled += Cancelled;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
_asset = value;
|
||||||
|
|
||||||
|
Enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected readonly IInputActionCollection inputClass;
|
||||||
|
protected InputAction actionReference = null;
|
||||||
|
|
||||||
|
public VariableMovementWithState(VMAsset asset, IInputActionCollection inputClass)
|
||||||
|
{
|
||||||
|
this.inputClass = inputClass;
|
||||||
|
OnToggleStateChanged = new UnityEvent<bool>();
|
||||||
|
Asset = asset;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void Cancelled(InputAction.CallbackContext obj) => Enabled = false;
|
||||||
|
protected void Performed(InputAction.CallbackContext obj) => Enabled = true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 95216561eb395f54596b439538c1c691
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Loading…
Reference in New Issue