using System.Collections; using System.Collections.Generic; using UnityEngine; using BITKit; using KinematicCharacterController; using BITKit.StateMachine; using BITKit.Entities; namespace BITFALL.Entites { public interface IKinematicMovementState : IEntityMovementState, ICharacterController { void OnCancelMovement(IMovementCancelAction action); } public class KinematicMovementState : IKinematicMovementState { [SerializeField] protected EntityKinematicMovement controller; [SerializeField] protected KinematicCharacterMotor motor; public virtual void AfterCharacterUpdate(float deltaTime) { } public virtual void BeforeCharacterUpdate(float deltaTime) { } public virtual bool IsColliderValidForCollisions(Collider coll) { return controller.ignoreColliders.Contains(coll); } public virtual void OnDiscreteCollisionDetected(Collider hitCollider) { } public virtual void OnGroundHit(Collider hitCollider, Vector3 hitNormal, Vector3 hitPoint, ref HitStabilityReport hitStabilityReport) { } public virtual void OnMovementHit(Collider hitCollider, Vector3 hitNormal, Vector3 hitPoint, ref HitStabilityReport hitStabilityReport) { } public virtual void OnStateEnter(IState old) { } public virtual void OnStateExit(IState old, IState newState) { } public virtual void Initialize() { } public virtual void OnStateUpdate() { } public virtual void PostGroundingUpdate(float deltaTime) { } public virtual void ProcessHitStabilityReport(Collider hitCollider, Vector3 hitNormal, Vector3 hitPoint, Vector3 atCharacterPosition, Quaternion atCharacterRotation, ref HitStabilityReport hitStabilityReport) { } public virtual void UpdateRotation(ref Quaternion currentRotation, float deltaTime) { } public virtual void UpdateVelocity(ref Vector3 currentVelocity, float deltaTime) { } public virtual void OnCancelMovement(IMovementCancelAction action) { } protected void TransitionState() where T : IKinematicMovementState { var stateMachine = controller as IStateMachine; stateMachine.TransitionState(); } } }