diff --git a/Editor/DefinitionCreatorEditor.cs b/Editor/DefinitionCreatorEditor.cs index f1257a5..4e49da0 100644 --- a/Editor/DefinitionCreatorEditor.cs +++ b/Editor/DefinitionCreatorEditor.cs @@ -99,7 +99,7 @@ namespace Syntriax.Modules.Movement.Editor movementDefinition.MonoBehaviours = new string[] { typeof(MovementController).FullName, - typeof(ToggleState.ToggleStateMonoBehaviour).FullName + typeof(State.StateEnableMonoBehaviour).FullName }; UpdateSerializedObject(); @@ -142,8 +142,9 @@ namespace Syntriax.Modules.Movement.Editor string jsonText = JsonUtility.ToJson(definition, true); string path = $"Assets/Resources/{MovementDefinitionFactory.ResourceDirectoryToDefinitions}{definition.Name}.json"; - if (!EditorUtility.DisplayDialog("Conflict", $"\"{path}\" already exists, do you want to overwrite?", "Overwrite", "Cancel")) - return; + if (System.IO.File.Exists($"{Application.dataPath}/Resources/{MovementDefinitionFactory.ResourceDirectoryToDefinitions}{definition.Name}.json")) + if (!EditorUtility.DisplayDialog("Conflict", $"\"{path}\" already exists, do you want to overwrite?", "Overwrite", "Cancel")) + return; System.IO.File.WriteAllText(path, jsonText); AssetDatabase.Refresh(); diff --git a/README.md b/README.md index a493a49..f524668 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Movement (Work In Progress) ## Dependencies -1. [ToggleState Module](https://git.syntriax.com/Syntriax/ToggleState) +1. [State Module](https://git.syntriax.com/Syntriax/State) 2. [Trigger Module](https://git.syntriax.com/Syntriax/Trigger) 3. [Factory Module](https://git.syntriax.com/Syntriax/Factory) @@ -32,7 +32,7 @@ Make sure to separately clone these modules along with this one too. #### Longer 1. Clone the module to a folder in your Assets folder -2. Add `ToggleStateMonoBehaviour` component to your Player `GameObject` +2. Add `StateEnableMonoBehaviour` component to your Player `GameObject` 3. Add `MovementController` component to your Player `GameObject` 4. Add `AirMovement1D` component to your Player `GameObject` 5. Add `GroundMovement1D` component to your Player `GameObject` (make sure it's bellow `AirMovement1D`) @@ -42,7 +42,7 @@ Make sure to separately clone these modules along with this one too. --- -This should give you a movement where you can disable the controller through the `IToggleState`, and you should be able to see a the movement changes when the character is not touching the ground. +This should give you a movement where you can disable the controller through the `IStateEnable`, and you should be able to see a the movement changes when the character is not touching the ground. You can add your own movement implementations with bases under the `Bases` folder, or straight up from the `IMovement` interface. diff --git a/Runtime/Bases/MovementBase.cs b/Runtime/Bases/MovementBase.cs index 6b88214..3419f9a 100644 --- a/Runtime/Bases/MovementBase.cs +++ b/Runtime/Bases/MovementBase.cs @@ -1,12 +1,12 @@ using System; -using Syntriax.Modules.ToggleState; +using Syntriax.Modules.State; using UnityEngine; namespace Syntriax.Modules.Movement { public abstract class MovementBase : MonoBehaviour, IMovement { - protected IToggleState toggleState = null; + protected IStateEnable stateEnable = null; protected IMovementController movementController = null; public float BaseSpeed { get; set; } = 1f; @@ -27,8 +27,6 @@ namespace Syntriax.Modules.Movement } } - public IToggleState ToggleState { get; protected set; } = null; - /// public abstract void ApplyMovement(); @@ -46,7 +44,7 @@ namespace Syntriax.Modules.Movement protected virtual void Start() { - toggleState = GetComponent(); + stateEnable = GetComponent(); movementController = GetComponent(); movementController.OnMovementActivated += OnActivated; diff --git a/Runtime/IMovementController.cs b/Runtime/IMovementController.cs index d72295b..c01a1d6 100644 --- a/Runtime/IMovementController.cs +++ b/Runtime/IMovementController.cs @@ -1,15 +1,15 @@ using System; using System.Collections.Generic; -using Syntriax.Modules.ToggleState; +using Syntriax.Modules.State; namespace Syntriax.Modules.Movement { public interface IMovementController { /// - /// Member to switch on or off + /// to control the state of the is on or off /// - IToggleState ToggleStateMember { get; } + IStateEnable StateEnable { get; } /// /// Currently active diff --git a/Runtime/MovementController.cs b/Runtime/MovementController.cs index 729247e..cc9dfe2 100644 --- a/Runtime/MovementController.cs +++ b/Runtime/MovementController.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using Syntriax.Modules.ToggleState; +using Syntriax.Modules.State; using UnityEngine; namespace Syntriax.Modules.Movement @@ -31,13 +31,17 @@ namespace Syntriax.Modules.Movement } } - private bool areBothToggleStatesToggled => ToggleStateMember.IsToggledNullChecked() && toggleStateOnGameObject.IsToggledNullChecked(); - public List Movements { get; protected set; } = new List(32); - public IToggleState ToggleStateMember { get; protected set; } = new ToggleStateMember(true); - - protected IToggleState toggleStateOnGameObject = null; + private IStateEnable _stateEnable = null; + public IStateEnable StateEnable + { + get + { + _stateEnable = _stateEnable ?? GetComponent() ?? gameObject.AddComponent(); + return _stateEnable; + } + } protected virtual void Start() { @@ -45,15 +49,14 @@ namespace Syntriax.Modules.Movement gameObject.AddComponent(); RecacheMovements(); - toggleStateOnGameObject = GetComponent(); - toggleStateOnGameObject.OnToggleStateChanged += (_) => InvokeOnMoveAction(); - ToggleStateMember.OnToggleStateChanged += (_) => InvokeOnMoveAction(); + StateEnable.OnEnabledChanged += (_) => InvokeOnMoveAction(); + OnMovementActivated += (newMovement) => newMovement.Move(lastMove); } protected virtual void FixedUpdate() { - if (!areBothToggleStatesToggled) + if (!StateEnable.IsEnabledNullChecked()) return; ActiveMovement?.ApplyMovement(); @@ -85,6 +88,7 @@ namespace Syntriax.Modules.Movement } private Vector3 lastMove = Vector3.zero; + public void Move(float x = 0, float y = 0, float z = 0) { ActiveMovement?.Move(x, y, z); @@ -95,7 +99,7 @@ namespace Syntriax.Modules.Movement private void InvokeOnMoveAction() { - if (!areBothToggleStatesToggled) + if (!StateEnable.IsEnabledNullChecked()) return; OnMoveCalled?.Invoke(lastMove.x, lastMove.y, lastMove.z); diff --git a/Samples/AirMovement1D.cs b/Samples/AirMovement1D.cs index b7345b1..f1bf410 100644 --- a/Samples/AirMovement1D.cs +++ b/Samples/AirMovement1D.cs @@ -14,7 +14,7 @@ namespace Syntriax.Modules.Movement.Samples { base.Start(); - rigid = GetComponent(); + rigid = GetComponentInParent(); groundTrigger = GetComponentInChildren(); if (groundTrigger != null) diff --git a/Samples/GroundMovement1D.cs b/Samples/GroundMovement1D.cs index 6f29b2b..cbb4d38 100644 --- a/Samples/GroundMovement1D.cs +++ b/Samples/GroundMovement1D.cs @@ -16,7 +16,7 @@ namespace Syntriax.Modules.Movement.Samples { base.Start(); - rigid = GetComponent(); + rigid = GetComponentInParent(); groundTrigger = GetComponentInChildren(); if (groundTrigger != null) diff --git a/package.json b/package.json index 887d512..8d1bca0 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "com.syntriax.movement", - "version": "0.1.4", + "version": "0.2.0", "displayName": "Movement Module", - "description": "Dependends On:\nhttps://git.syntriax.com/Syntriax/ToggleState.git\nhttps://git.syntriax.com/Syntriax/Trigger.git\nhttps://git.syntriax.com/Syntriax/Factory.git", + "description": "Dependends On:\nhttps://git.syntriax.com/Syntriax/State.git\nhttps://git.syntriax.com/Syntriax/Trigger.git\nhttps://git.syntriax.com/Syntriax/Factory.git", "unity": "2019.1", "documentationUrl": "https://git.syntriax.com/Syntriax/Movement.git", "keywords": ["Movement"],