Added IMovementController.Move method & Added Some Documentation
This commit is contained in:
		| @@ -8,22 +8,22 @@ namespace Syntriax.Modules.Movement | |||||||
|     { |     { | ||||||
|         protected IToggleState toggleState = null; |         protected IToggleState toggleState = null; | ||||||
|         protected IMovementController movementController = null; |         protected IMovementController movementController = null; | ||||||
|         private bool _canTakeOver = false; |  | ||||||
|  |  | ||||||
|         public float BaseSpeed { get; set; } = 1f; |         public float BaseSpeed { get; set; } = 1f; | ||||||
|         public float MovementMultiplier { get; set; } = 1f; |         public float MovementMultiplier { get; set; } = 1f; | ||||||
|  |  | ||||||
|         public Action<bool> OnTakeOverStateChanged { get; set; } = null; |         public Action<bool> OnTakeOverStateChanged { get; set; } = null; | ||||||
|  |         private bool _canTakeOver = false; | ||||||
|         public bool CanTakeOver |         public bool CanTakeOver | ||||||
|         { |         { | ||||||
|             get => _canTakeOver; |             get => _canTakeOver; | ||||||
|             protected set |             protected set | ||||||
|             { |             { | ||||||
|                 bool isNewValue = _canTakeOver != value; |                 bool oldValue = _canTakeOver; | ||||||
|  |  | ||||||
|                 _canTakeOver = value; |                 _canTakeOver = value; | ||||||
|  |  | ||||||
|                 if (isNewValue) |                 if (oldValue != value) | ||||||
|                     OnTakeOverStateChanged?.Invoke(value); |                     OnTakeOverStateChanged?.Invoke(value); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -45,12 +45,14 @@ namespace Syntriax.Modules.Movement | |||||||
|             movementController.OnMovementActivated += OnActivated; |             movementController.OnMovementActivated += OnActivated; | ||||||
|             movementController.OnMovementDeactivated += OnDeactivated; |             movementController.OnMovementDeactivated += OnDeactivated; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         private void OnActivated(IMovement movement) |         private void OnActivated(IMovement movement) | ||||||
|         { |         { | ||||||
|             if ((object)movement != this) |             if ((object)movement != this) | ||||||
|                 return; |                 return; | ||||||
|             OnActivated(); |             OnActivated(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         private void OnDeactivated(IMovement movement) |         private void OnDeactivated(IMovement movement) | ||||||
|         { |         { | ||||||
|             if ((object)movement != this) |             if ((object)movement != this) | ||||||
|   | |||||||
| @@ -3,6 +3,13 @@ using UnityEngine; | |||||||
|  |  | ||||||
| namespace Syntriax.Modules.Movement.Config | namespace Syntriax.Modules.Movement.Config | ||||||
| { | { | ||||||
|  |     /// <summary> | ||||||
|  |     /// The Singleton factory responsible for loading and applying <see cref="MovementDefinition"/>s, | ||||||
|  |     /// </summary> | ||||||
|  |     /// <remarks> | ||||||
|  |     /// <para> Looks for the path specified in the variable <see cref="ResourceDirectoryToDefinitions"/></para> | ||||||
|  |     /// <para> The default path is "Resources/Modules/Syntriax/Movement/Definitions/"</para> | ||||||
|  |     /// </remarks> | ||||||
|     public class MovementDefinitionFactory : MonoBehaviour |     public class MovementDefinitionFactory : MonoBehaviour | ||||||
|     { |     { | ||||||
|         private const string Name = "Movement Definition Factory"; |         private const string Name = "Movement Definition Factory"; | ||||||
| @@ -41,6 +48,13 @@ namespace Syntriax.Modules.Movement.Config | |||||||
|             Destroy(this); |             Destroy(this); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Initializes the factory, if already initialized reinitializes | ||||||
|  |         /// </summary> | ||||||
|  |         /// <remarks> | ||||||
|  |         /// <para> Automatically loads the definition files specificed path <see cref="ResourceDirectoryToDefinitions"/></para> | ||||||
|  |         /// <para> The default is "Resources/Modules/Syntriax/Movement/Definitions/"</para> | ||||||
|  |         /// </remarks> | ||||||
|         public void Initialize() |         public void Initialize() | ||||||
|         { |         { | ||||||
|             if (_definitions == null) |             if (_definitions == null) | ||||||
| @@ -52,20 +66,36 @@ namespace Syntriax.Modules.Movement.Config | |||||||
|                 AddToFactoryWithJSON(definitionTextAsset.text); |                 AddToFactoryWithJSON(definitionTextAsset.text); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Manually registers a <see cref="MovementDefinition"/> to the factory with a JSON <see cref="string"/> | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="definitionJSONText">A <see cref="string"/> of a <see cref="MovementDefinition"/> in JSON</param> | ||||||
|         public void AddToFactoryWithJSON(string definitionJSONText) |         public void AddToFactoryWithJSON(string definitionJSONText) | ||||||
|         { |         { | ||||||
|             MovementDefinition movementDefinition = JsonUtility.FromJson<MovementDefinition>(definitionJSONText); |             MovementDefinition movementDefinition = JsonUtility.FromJson<MovementDefinition>(definitionJSONText); | ||||||
|             AddDefinitionToFactory(movementDefinition); |             AddDefinitionToFactory(movementDefinition); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Clears all the definitions in the factory | ||||||
|  |         /// </summary> | ||||||
|  |         /// <remarks> | ||||||
|  |         /// Does not reinitialize, please call <see cref="Initialize"/> to initialize it back | ||||||
|  |         /// </remarks> | ||||||
|         public void Reset() => _definitions?.Clear(); |         public void Reset() => _definitions?.Clear(); | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Registers a list of <see cref="MovementDefinition"/>s to the factory | ||||||
|  |         /// </summary> | ||||||
|         public void AddDefinitionsToFactory(List<MovementDefinition> movementDefinitions) |         public void AddDefinitionsToFactory(List<MovementDefinition> movementDefinitions) | ||||||
|         { |         { | ||||||
|             foreach (MovementDefinition movementDefinition in movementDefinitions) |             foreach (MovementDefinition movementDefinition in movementDefinitions) | ||||||
|                 AddDefinitionToFactory(movementDefinition); |                 AddDefinitionToFactory(movementDefinition); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Registers a single <see cref="MovementDefinition"/> to the factory | ||||||
|  |         /// </summary> | ||||||
|         public void AddDefinitionToFactory(MovementDefinition movementDefinition) |         public void AddDefinitionToFactory(MovementDefinition movementDefinition) | ||||||
|         { |         { | ||||||
|             if (Definitions.ContainsKey(movementDefinition.Name)) |             if (Definitions.ContainsKey(movementDefinition.Name)) | ||||||
| @@ -74,6 +104,12 @@ namespace Syntriax.Modules.Movement.Config | |||||||
|             Definitions.Add(movementDefinition.Name, movementDefinition); |             Definitions.Add(movementDefinition.Name, movementDefinition); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Searches for the <see cref="MovementDefinition"/> in the factory and applies it to the <see cref="GameObject"/> | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="gameObject"><see cref="GameObject"/> that the <see cref="MovementDefinition"/> will be applied to</param> | ||||||
|  |         /// <param name="definitionName">The registered <see cref="MovementDefinition"/>'s name that will be applied to the provided <see cref="GameObject"/></param> | ||||||
|  |         /// <exception cref="System.ArgumentException">When the provided <see cref="MovementDefinition"/> name is not registered in the factory</exception> | ||||||
|         public void ApplyDefinitionToGameObject(GameObject gameObject, string definitionName) |         public void ApplyDefinitionToGameObject(GameObject gameObject, string definitionName) | ||||||
|         { |         { | ||||||
|             if (!Definitions.ContainsKey(definitionName)) |             if (!Definitions.ContainsKey(definitionName)) | ||||||
| @@ -82,6 +118,11 @@ namespace Syntriax.Modules.Movement.Config | |||||||
|             ApplyDefinitionToGameObject(gameObject, Definitions[definitionName]); |             ApplyDefinitionToGameObject(gameObject, Definitions[definitionName]); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Applies the provided <see cref="MovementDefinition"/> to the <see cref="GameObject"/> | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="gameObject"><see cref="GameObject"/> that the <see cref="MovementDefinition"/> will be applied to</param> | ||||||
|  |         /// <param name="definition">The <see cref="MovementDefinition"/> that will be applied to the provided <see cref="GameObject"/></param> | ||||||
|         public void ApplyDefinitionToGameObject(GameObject gameObject, MovementDefinition definition) |         public void ApplyDefinitionToGameObject(GameObject gameObject, MovementDefinition definition) | ||||||
|         { |         { | ||||||
|             foreach (MovementConfig movementConfig in definition.MovementConfigs) |             foreach (MovementConfig movementConfig in definition.MovementConfigs) | ||||||
|   | |||||||
							
								
								
									
										18
									
								
								IMovement.cs
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								IMovement.cs
									
									
									
									
									
								
							| @@ -5,13 +5,31 @@ namespace Syntriax.Modules.Movement | |||||||
|     public interface IMovement |     public interface IMovement | ||||||
|     { |     { | ||||||
|         float BaseSpeed { get; set; } |         float BaseSpeed { get; set; } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// The value will be multiplied with the <see cref="BaseSpeed"/> value | ||||||
|  |         /// </summary> | ||||||
|         float MovementMultiplier { get; set; } |         float MovementMultiplier { get; set; } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// If the <see cref="IMovement"/> can be taken over by the <see cref="IMovementController"/>s as the <see cref="IMovementController.ActiveMovement"/> | ||||||
|  |         /// </summary> | ||||||
|         bool CanTakeOver { get; } |         bool CanTakeOver { get; } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Called everytime the <see cref="CanTakeOver"/> field is changed | ||||||
|  |         /// </summary> | ||||||
|  |         /// <value>The new value of <see cref="CanTakeOver"/></value> | ||||||
|         Action<bool> OnTakeOverStateChanged { get; set; } |         Action<bool> OnTakeOverStateChanged { get; set; } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Updates the movement data on the <see cref="IMovement"/>  | ||||||
|  |         /// </summary> | ||||||
|         void Move(float x = 0f, float y = 0f, float z = 0f); |         void Move(float x = 0f, float y = 0f, float z = 0f); | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Applies the movement that was passed on with the <see cref="Move"/> method | ||||||
|  |         /// </summary> | ||||||
|         void ApplyMovement(); |         void ApplyMovement(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -5,12 +5,36 @@ namespace Syntriax.Modules.Movement | |||||||
| { | { | ||||||
|     public interface IMovementController |     public interface IMovementController | ||||||
|     { |     { | ||||||
|  |         /// <summary> | ||||||
|  |         /// Currently active <see cref="IMovement"/> | ||||||
|  |         /// </summary> | ||||||
|         IMovement ActiveMovement { get; } |         IMovement ActiveMovement { get; } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// List of all <see cref="IMovement"/>s controlled by this controller, can be updated by calling <see cref="RecacheMovements"/> method  | ||||||
|  |         /// </summary> | ||||||
|         List<IMovement> Movements { get; } |         List<IMovement> Movements { get; } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Called when a <see cref="IMovement"/> is deactivated when another <see cref="IMovement"/> takes over it's place | ||||||
|  |         /// </summary> | ||||||
|  |         /// <value>Deactived <see cref="IMovement"/></value> | ||||||
|         Action<IMovement> OnMovementDeactivated { get; set; } |         Action<IMovement> OnMovementDeactivated { get; set; } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Called when a new <see cref="IMovement"/> takes over by the controller | ||||||
|  |         /// </summary> | ||||||
|  |         /// <value>Actived <see cref="IMovement"/></value> | ||||||
|         Action<IMovement> OnMovementActivated { get; set; } |         Action<IMovement> OnMovementActivated { get; set; } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Updates the <see cref="Movements"/> list   | ||||||
|  |         /// </summary> | ||||||
|         void RecacheMovements(); |         void RecacheMovements(); | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Apply the movement data that <see cref="IMovement"/>s will use | ||||||
|  |         /// </summary> | ||||||
|  |         void Move(float x = 0, float y = 0, float z = 0); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								IMovementControllerExtensions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								IMovementControllerExtensions.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | using UnityEngine; | ||||||
|  |  | ||||||
|  | namespace Syntriax.Modules.Movement | ||||||
|  | { | ||||||
|  |     public static class IMovementControllerExtensions | ||||||
|  |     { | ||||||
|  |         /// <summary> | ||||||
|  |         /// Calls <see cref="IMovementController.Move"/> with a <see cref="Vector2"/>'s values accordingly, leaving the z parameter 0 | ||||||
|  |         /// </summary> | ||||||
|  |         public static void Move(this IMovementController movementController, Vector2 moveVector) | ||||||
|  |             => movementController.ActiveMovement?.Move(moveVector.x, moveVector.y, 0f); | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Calls <see cref="IMovementController.Move"/> with a <see cref="Vector3"/>'s values accordingly | ||||||
|  |         /// </summary> | ||||||
|  |         public static void Move(this IMovementController movementController, Vector3 moveVector) | ||||||
|  |             => movementController.ActiveMovement?.Move(moveVector.x, moveVector.y, moveVector.z); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								IMovementControllerExtensions.cs.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								IMovementControllerExtensions.cs.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 4fef99ac1b1716848ad4b8462a03ebce | ||||||
|  | MonoImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   defaultReferences: [] | ||||||
|  |   executionOrder: 0 | ||||||
|  |   icon: {instanceID: 0} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
| @@ -4,9 +4,15 @@ namespace Syntriax.Modules.Movement | |||||||
| { | { | ||||||
|     public static class IMovementExtensions |     public static class IMovementExtensions | ||||||
|     { |     { | ||||||
|  |         /// <summary> | ||||||
|  |         /// Applies a <see cref="Vector2"/> parameter into the <see cref="IMovement"/>'s <see cref="IMovement.Move(x, y, z)"/> method by applying the vector's X and Y values accordingly | ||||||
|  |         /// </summary> | ||||||
|         public static void Move(this IMovement movement, Vector2 moveVector) |         public static void Move(this IMovement movement, Vector2 moveVector) | ||||||
|             => movement.Move(moveVector.x, moveVector.y); |             => movement.Move(moveVector.x, moveVector.y); | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Applies a <see cref="Vector3"/> parameter into the <see cref="IMovement"/>'s <see cref="IMovement.Move(x, y, z)"/> method by applying the vector's X, Y and Z values accordingly | ||||||
|  |         /// </summary> | ||||||
|         public static void Move(this IMovement movement, Vector3 moveVector) |         public static void Move(this IMovement movement, Vector3 moveVector) | ||||||
|             => movement.Move(moveVector.x, moveVector.y, moveVector.z); |             => movement.Move(moveVector.x, moveVector.y, moveVector.z); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -79,5 +79,8 @@ namespace Syntriax.Modules.Movement | |||||||
|             try { ActiveMovement = Movements[Movements.Count - 1]; } |             try { ActiveMovement = Movements[Movements.Count - 1]; } | ||||||
|             catch (System.Exception) { Debug.LogError("Movement Controller component needs at least one Monobehaviour attached that implements IMovement interface", this); } |             catch (System.Exception) { Debug.LogError("Movement Controller component needs at least one Monobehaviour attached that implements IMovement interface", this); } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         public void Move(float x = 0, float y = 0, float z = 0) | ||||||
|  |             => ActiveMovement?.Move(x, y, z); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user