import type { Collider } from "./Collider.js";
import type { PhysicsWorld } from "./PhysicsWorld.js";
import type { RigidBody } from "./RigidBody.js";
import { type Vec3 } from "./Shape.js";
export type CharacterControllerDescriptor = {
    readonly position?: Vec3;
    readonly radius?: number;
    readonly halfHeight?: number;
    readonly maxSpeed?: number;
    readonly acceleration?: number;
    readonly jumpSpeed?: number;
    readonly groundProbeDistance?: number;
    readonly maxSlopeAngleRadians?: number;
    readonly collisionMask?: number;
};
export type CharacterControllerMoveInput = {
    readonly x: number;
    readonly z?: number;
};
export type CharacterControllerState = {
    readonly grounded: boolean;
    readonly groundNormal: Vec3;
    readonly groundColliderId: number | null;
    readonly desiredVelocity: Vec3;
    readonly velocity: Vec3;
    readonly speed: number;
    readonly jumpedThisFrame: boolean;
};
export declare class CharacterController {
    private readonly world;
    readonly body: RigidBody;
    readonly collider: Collider;
    readonly radius: number;
    readonly halfHeight: number;
    readonly maxSpeed: number;
    readonly acceleration: number;
    readonly jumpSpeed: number;
    readonly groundProbeDistance: number;
    readonly maxSlopeAngleRadians: number;
    private readonly collisionMask;
    private moveInput;
    private jumpQueued;
    private state;
    constructor(world: PhysicsWorld, descriptor?: CharacterControllerDescriptor);
    setMoveInput(input: CharacterControllerMoveInput): void;
    jump(): void;
    teleport(position: Vec3): void;
    step(dt: number): CharacterControllerState;
    snapshot(): CharacterControllerState;
    private probeGround;
}
//# sourceMappingURL=CharacterController.d.ts.map