diff --git a/VariableMovement/DefaulVariableMovementAsset.cs b/VariableMovement/DefaulVariableMovementAsset.cs index a4be91c..1b85213 100644 --- a/VariableMovement/DefaulVariableMovementAsset.cs +++ b/VariableMovement/DefaulVariableMovementAsset.cs @@ -2,6 +2,9 @@ namespace Syntriax.Modules.Movement.VariableMovement { public class DefaulVariableMovementAsset : IVariableMovementAsset { + public static DefaulVariableMovementAsset _instance = new DefaulVariableMovementAsset(); + public static DefaulVariableMovementAsset Instance => _instance; + public string MovementName => "Default Movement"; public float MovementMultiplier { get; } = 1f; diff --git a/VariableMovement/IVariableMovement.cs b/VariableMovement/IVariableMovement.cs index 4063934..6552da6 100644 --- a/VariableMovement/IVariableMovement.cs +++ b/VariableMovement/IVariableMovement.cs @@ -2,6 +2,6 @@ namespace Syntriax.Modules.Movement.VariableMovement { public interface IVariableMovement : IState { - IVariableMovementAsset VariableMovementAsset { get; } + IVariableMovementAsset VariableMovementAsset { get; set; } } } diff --git a/VariableMovement/IVariableMovementCollection.cs b/VariableMovement/IVariableMovementCollection.cs new file mode 100644 index 0000000..3e13710 --- /dev/null +++ b/VariableMovement/IVariableMovementCollection.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace Syntriax.Modules.Movement.VariableMovement +{ + public interface IVariableMovementCollection + { + IVariableMovementAsset DefaultVariableMovementsAsset { get; } + List VariableMovementsAssets { get; } + } +} diff --git a/VariableMovement/IVariableMovementCollection.cs.meta b/VariableMovement/IVariableMovementCollection.cs.meta new file mode 100644 index 0000000..4e45d9a --- /dev/null +++ b/VariableMovement/IVariableMovementCollection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 47411e74f07b72041a17185dd8483dfc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VariableMovement/IVariableMovementController.cs b/VariableMovement/IVariableMovementController.cs index 9790af0..139c030 100644 --- a/VariableMovement/IVariableMovementController.cs +++ b/VariableMovement/IVariableMovementController.cs @@ -5,6 +5,7 @@ namespace Syntriax.Modules.Movement.VariableMovement public interface IVariableMovementController : IState { List VariableMovements { get; } + IVariableMovementCollection VariableMovementCollection { get; set; } IVariableMovement CurrentVariableMovement { get; } } } diff --git a/VariableMovement/SimpleImplemantation/SimpleVariableMovement.cs b/VariableMovement/SimpleImplemantation/SimpleVariableMovement.cs index 5a0772f..9555dd1 100644 --- a/VariableMovement/SimpleImplemantation/SimpleVariableMovement.cs +++ b/VariableMovement/SimpleImplemantation/SimpleVariableMovement.cs @@ -2,9 +2,21 @@ namespace Syntriax.Modules.Movement.VariableMovement.SimpleImplementation { public class SimpleVariableMovement : IVariableMovement { - public IVariableMovementAsset VariableMovementAsset { get; protected set; } = null; + protected IVariableMovementAsset _variableMovementAsset = null; + + public IVariableMovementAsset VariableMovementAsset + { + get => _variableMovementAsset; + set + { + _variableMovementAsset = value; + StateEnabled = false; + } + } public bool StateEnabled { get; set; } = false; + public SimpleVariableMovement() { } + public SimpleVariableMovement(IVariableMovementAsset variableMovementAsset) => VariableMovementAsset = variableMovementAsset; } diff --git a/VariableMovement/SimpleImplemantation/SimpleVariableMovementCollection.cs b/VariableMovement/SimpleImplemantation/SimpleVariableMovementCollection.cs new file mode 100644 index 0000000..7abd82e --- /dev/null +++ b/VariableMovement/SimpleImplemantation/SimpleVariableMovementCollection.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Syntriax.Modules.Movement.VariableMovement.SimpleImplementation +{ + [CreateAssetMenu(fileName = "Simple VM Asset Collection", menuName = "Syntriax/Modules/Movement/VariableMovement/Simple VM Asset Collection", order = 0)] + public class SimpleVariableMovementCollection : ScriptableObject, IVariableMovementCollection + { + [SerializeField] protected SimpleVariableMovementAsset defaultVariableMovementsAsset = null; + [SerializeField] protected List variableMovementsAssets = new List(); + + public IVariableMovementAsset DefaultVariableMovementsAsset => defaultVariableMovementsAsset; + public List VariableMovementsAssets => variableMovementsAssets.ConvertAll(simple => (IVariableMovementAsset)simple); + } +} diff --git a/VariableMovement/SimpleImplemantation/SimpleVariableMovementCollection.cs.meta b/VariableMovement/SimpleImplemantation/SimpleVariableMovementCollection.cs.meta new file mode 100644 index 0000000..836e3df --- /dev/null +++ b/VariableMovement/SimpleImplemantation/SimpleVariableMovementCollection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5cee6b82ee9d68c4eb38ce2e693515d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VariableMovement/SimpleImplemantation/SimpleVariableMovementController.cs b/VariableMovement/SimpleImplemantation/SimpleVariableMovementController.cs index 647e256..bb5ea85 100644 --- a/VariableMovement/SimpleImplemantation/SimpleVariableMovementController.cs +++ b/VariableMovement/SimpleImplemantation/SimpleVariableMovementController.cs @@ -5,23 +5,45 @@ namespace Syntriax.Modules.Movement.VariableMovement.SimpleImplementation { public class SimpleVariableMovementController : MonoBehaviour, IVariableMovementController { - private static IVariableMovement DefaultVariableMovement = new SimpleVariableMovement(new DefaulVariableMovementAsset()); + protected IVariableMovement _defaultVariableMovement = new SimpleVariableMovement(); + protected IVariableMovementCollection _variableMovementCollection = null; public bool StateEnabled { get; set; } = false; public List VariableMovements { get; protected set; } = new List(); + + public IVariableMovementCollection VariableMovementCollection + { + get => _variableMovementCollection; + set + { + _variableMovementCollection = value; + + VariableMovements.Clear(); + + _defaultVariableMovement.VariableMovementAsset = value.DefaultVariableMovementsAsset; + _defaultVariableMovement.StateEnabled = true; + + if (VariableMovements.Capacity < value.VariableMovementsAssets.Count) + VariableMovements.Capacity = value.VariableMovementsAssets.Count; + + foreach (var asset in value.VariableMovementsAssets) + VariableMovements.Add(new SimpleVariableMovement(asset)); + } + } + public IVariableMovement CurrentVariableMovement { get { if (!StateEnabled) - return DefaultVariableMovement; + return _defaultVariableMovement; foreach (IVariableMovement variableMovement in VariableMovements) if (variableMovement.StateEnabled) return variableMovement; - return DefaultVariableMovement; + return _defaultVariableMovement; } } }