BITKit/Packages/Runtime/Entity/Components/EntityMovement/EntityMovement.cs

69 lines
2.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
namespace BITKit.Entities
{
[System.Serializable]
public struct ExpectState<T>
{
public T shouldBe;
public T being;
public T force;
public static implicit operator T(ExpectState<T> value)
{
return value.being;
}
public void Reset()
{
shouldBe = being = force = default;
}
public void Release()
{
being = shouldBe;
}
public void Release(T value)
{
force = default;
being = shouldBe = value;
}
}
public interface IEntityMovement
{
void SyncMovement(Vector3 velocity, Vector3 position,Quaternion rotation,bool isGrounded);
}
public class EntityMovement : EntityInputComponent, IEntityMovement
{
Vector2 inputVector;
public override void OnMovement(InputAction.CallbackContext context)
{
inputVector = context.ReadValue<Vector2>();
inputVector = Vector2.ClampMagnitude(inputVector, 1);
}
public override void OnFixedUpdate(float deltaTime)
{
transform.position += (Vector3)inputVector * deltaTime;
}
public void SyncMovement(Vector3 velocity, Vector3 position, Quaternion rotation, bool isGrounded)
{
}
}
public interface IMovementCallback { }
public record MovementCallback : IMovementCallback
{
public bool started;
public bool updated;
public bool canceled;
}
public record OnRunCallback : MovementCallback { }
public record OnClimbCallback : MovementCallback { }
public interface IMovementCancelAction { }
public record MovementCancelAction : IMovementCancelAction { }
public record CancelMovement : MovementCancelAction { }
public record CancelMovementAction : MovementCancelAction { }
public record CancelRunOrSprint : MovementCancelAction { }
}