# Movement (Work In Progress) ## Dependencies 1. [ToggleState Module](https://git.syntriax.com/Syntriax/ToggleState) 2. [Trigger Module](https://git.syntriax.com/Syntriax/Trigger) Make sure to clone these modules along with this one. Or you can call ```git submodule init``` to get them automatically added (note that this method may cause conflicts if another module also imports one of these submodules too, only use if you are only using `Movement` module) --- ## Getting Started 2D ### Automaticaly #### Custom The Editor 1. Find the button on the Unity Editor's top panel named `Syntriax`, Under `Modules/Movement` open the window `Definition Creator` 3. You can find two buttons for both `Quick` and `Longer` presets, or you can define your own, then press `Create` button 4. Add `MovementDefinitionApplier` component to your Player `GameObject` 5. Put the name of the definition you created in the first step to `Startup Definition Name` field - You can also call `MovementDefinitionApplier.LoadDefinition` method manually to load them via anoher script. ### Manually #### Quick 1. Clone the module to a folder in your Assets folder 2. Add `MovementController` component to your Player `GameObject` 3. Add `GroundMovement1D` component to your Player `GameObject` 4. Connect your inputs to the `MovementController` ([Example with Input System](#input-system-example)) #### Longer 1. Clone the module to a folder in your Assets folder 2. Add `ToggleStateMonoBehaviour` 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`) 6. Add a new empty child `GameObject` and add `Box2DColliderTrigger` component to it and place and resize it under the player for ground detection, optionally you can set the `CollisionMask` field on it to make sure it only detects specific layers 7. Connect your inputs to the `MovementController` ([Example with Input System](#input-system-example)) 8. (Optional) Add a jumping script to see the effects better --- 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. You can add your own movement implementations with bases under the `Bases` folder, or straight up from the `IMovement` interface. Or if you want you can write your own `MovementController` with using the `IMovementController` interface, too, but it should be enough for most cases. --- ### Input System Example ```cs using Syntriax.Modules.Movement; using UnityEngine; using UnityEngine.InputSystem; public class MovementInputs : MonoBehaviour, Inputs.IMovementActions { private Inputs inputs = null; private IMovementController movementController = null; public void OnMovement(InputAction.CallbackContext context) => movementController.Move(context.ReadValue()); private void OnEnable() { if (inputs == null) { inputs = new Inputs(); inputs.Movement.SetCallbacks(this); } movementController = movementController ?? FindObjectOfType(); inputs.Enable(); } private void OnDisable() { inputs.Disable(); } } ```