using Syntriax.Modules.Movement.ColliderCheck; using UnityEngine; namespace Syntriax.Modules.Movement { [RequireComponent(typeof(Rigidbody2D))] public class OneDimensional2DAirMovement : MonoBehaviour, IMovement, IState { private IGroundCheck groundCheck = null; private Rigidbody2D rigid = null; private float moveValue = 0f; public bool IsActive => StateEnabled && !groundCheck.IsCollided(); public bool StateEnabled { get; set; } = true; public float BaseSpeed { get; set; } = 1f; public float MovementMultiplier { get; set; } = 1f; private void Start() { rigid = GetComponent(); groundCheck = GetComponentInChildren(); } private void FixedUpdate() { if (!IsActive) return; ApplyMovement(); } private void ApplyMovement() { Vector2 velocity = rigid.velocity; velocity.x += moveValue * Time.fixedDeltaTime; if (moveValue != 0f) { if (Mathf.Abs(velocity.x) > Mathf.Abs(moveValue)) velocity.x = moveValue; else if (Mathf.Abs(velocity.x - moveValue) > Mathf.Abs(moveValue)) velocity.x += moveValue * Time.fixedDeltaTime; } rigid.velocity = velocity; } public void Move(float x = 0, float y = 0, float z = 0) { moveValue = x * BaseSpeed * MovementMultiplier; } } }