using System;
using UnityEngine;
namespace NeoCC
{
public static class NeoCharacterControllerDelegates
{
///
/// An event fired when the character controller changes height
///
/// The new height of the character capsule.
/// The distance the base of the capsule moved vertically.
public delegate void OnHeightChange(float newHeight, float rootOffset);
///
/// A callback for requesting input from registered inputs. Can be used to retrieve either a move vector or velocity vector.
///
/// The output move vector for this tick.
/// Should the character controller add gravity to the move.
/// Should the character snap to the ground.
public delegate void GetMoveVector(out Vector3 move, out bool applyGravity, out bool stickToGround);
///
/// An event fired after the character controller has completed a move update
///
public delegate void OnMoved();
///
/// An event fired when the character controller is teleported
///
public delegate void OnTeleported();
///
/// An event called when the character controller hits another object during a move.
///
/// A struct containing relevant data about the collision.
public delegate void OnCharacterControllerHit(NeoCharacterControllerHit hit);
///
/// An event called when the character controller hits another character controller during a move.
///
/// The character controller that was hit.
/// The normal of the impact.
/// The collision flags for this specific impact.
public delegate void OnHitCharacter(INeoCharacterController other, Vector3 normal, NeoCharacterCollisionFlags flags);
///
/// An event called when the character controller hits a non-kinematic rigidbody during a move.
///
/// The rigidbody that was hit.
/// The hit point of the impact.
/// The normal of the impact.
/// The collision flags for this specific impact.
public delegate void OnHitRigidbody(Rigidbody rigidbody, Vector3 point, Vector3 normal, NeoCharacterCollisionFlags flags);
}
}