import { type MMLCharacterDescription } from "@mml-io/3d-web-avatar";
import { AnimationAction, AnimationMixer, Bone, Color, Object3D } from "three";
import { CameraManager } from "../camera/CameraManager";
import { CharacterDescription, LoadedAnimations } from "./Character";
import { AnimationState } from "./CharacterState";
import { CharacterModelLoader } from "./loading/CharacterModelLoader";
export declare const colorPartNamesIndex: readonly ["hair", "shirt_short", "shirt_long", "pants_short", "pants_long", "shoes", "skin", "lips"];
export type ColorPartName = (typeof colorPartNamesIndex)[number];
export declare function colorsToColorArray(colors: Map<ColorPartName, Color>): Array<[number, number, number]>;
export declare function colorArrayToColors(colorArray: Array<[number, number, number]>): Map<ColorPartName, Color>;
export type CharacterModelConfig = {
    characterDescription: CharacterDescription;
    animationsPromise: Promise<LoadedAnimations>;
    characterModelLoader: CharacterModelLoader;
    cameraManager: CameraManager;
    characterId: number;
    isLocal: boolean;
    abortController?: AbortController;
};
export declare class CharacterModel {
    private config;
    mesh: Object3D | null;
    headBone: Bone | null;
    characterHeight: number | null;
    private materials;
    animations: Record<string, AnimationAction>;
    animationMixer: AnimationMixer | null;
    currentAnimation: AnimationState;
    mmlCharacterDescription: MMLCharacterDescription;
    private isPostDoubleJump;
    private colors;
    constructor(config: CharacterModelConfig);
    init(): Promise<void>;
    private applyCustomMaterials;
    updateAnimation(targetAnimation: AnimationState): void;
    private composeMMLCharacter;
    private loadCharacterFromDescription;
    getColors(): Array<[number, number, number]>;
    private cleanAnimationClips;
    private setAnimationFromFile;
    private transitionToAnimation;
    update(time: number): void;
    dispose(): void;
}
//# sourceMappingURL=CharacterModel.d.ts.map