import GameObject, { emptyRenderFunction } from "./object";
import PhysicalBody from "./physicalBody";
export default class ControlledBody extends PhysicalBody {
    maxXSpeed: number;
    jumpVel: number;
    keys: {
        w: boolean;
        a: boolean;
        s: boolean;
        d: boolean;
        top: boolean;
        bottom: boolean;
        right: boolean;
        left: boolean;
    };
    xAcceleration: number;
    jumps: number;
    maxJumps: number;
    wallJumps: boolean;
    wallPushOffSpeed: number;
    /**
     * 0 for left, 1 for center, 2 for right
     */
    wallSide: 0 | 1 | 2;
    constructor({ x, y, rotation, width, height, image, color, layer, mass, render, update, maxXSpeed, jumpVel, maxJumps, wallJump, wallPushOffSpeed, onCollide, }?: {
        x?: number;
        y?: number;
        rotation?: number;
        width?: number;
        height?: number;
        image?: HTMLImageElement | null;
        color?: string | null;
        layer?: number;
        mass?: number;
        render?: emptyRenderFunction | null;
        update?: (self: ControlledBody) => void;
        maxXSpeed?: number;
        jumpVel?: number;
        maxJumps?: number;
        wallJump?: boolean;
        wallPushOffSpeed?: number;
        onCollide?: (object: GameObject) => void;
    });
    getPreventFriction(): boolean;
    jump(): void;
    bindKeyboardControls({ wasd, arrowKeys, spaceJump, }?: {
        wasd?: boolean | undefined;
        arrowKeys?: boolean | undefined;
        spaceJump?: boolean | undefined;
    }): void;
    private wasdKeyListener;
    private arrowKeyListener;
    private spaceKeyListener;
    private updateHorizontalMovement;
}
//# sourceMappingURL=controlledBody.d.ts.map