import { AbstractMesh, AnimationGroup, Bone, InstantiatedEntries, Material, Skeleton } from "@babylonjs/core";
import { Point3D } from "chootils/dist/points3d";
import { MyTypes } from "../../declarations";
import { AnimationNameByModel, MeshNameByModel, BoneNameByModel, MaterialNameByModel, DollOptions } from "../../types";
export default function dolls<T_MyTypes extends MyTypes = MyTypes>(prendyAssets: T_MyTypes["Assets"]): {
    startStates: {
        [x: string]: {
            toggledMeshes: Record<string, boolean>;
            nowAnimation: string;
            animationLoops: boolean;
            inRange: Record<string, import("src/helpers/prendyUtils/dolls").InRangeForDoll>;
            isVisible: boolean;
            animWeights: Record<string, number>;
            animWeightsGoal: Record<string, number>;
            animWeightsIsMoving: boolean;
            animWeightsMoveMode: import("repond-movers/src/types").MoveMode;
            animWeightsMoveConfigName: string;
            animWeightsMoveConfigs: Record<string, import("repond-movers/src/types").PhysicsOptions>;
            nowWalkSpeed: number;
            positionOnScreen: import("chootils/dist/points2d").Point2D;
            rotationY: number;
            rotationYGoal: number;
            rotationYIsMoving: boolean;
            rotationYMoveMode: import("repond-movers/src/types").MoveMode;
            rotationYMoveConfigName: string;
            rotationYMoveConfigs: Record<string, import("repond-movers/src/types").PhysicsOptions>;
            position: Point3D;
            positionGoal: Point3D;
            positionIsMoving: boolean;
            positionMoveMode: import("repond-movers/src/types").MoveMode;
            positionMoveConfigName: string;
            positionMoveConfigs: Record<string, import("repond-movers/src/types").PhysicsOptions>;
            modelName: any;
            goalSpotNameAtNewPlace: string | null;
            goalPositionAtNewPlace: Point3D | null;
        };
    };
    getDefaultState: <T_DollName extends string, T_ModelName extends string>(_dollName: T_DollName, modelName?: T_ModelName) => {
        toggledMeshes: Record<string, boolean>;
        nowAnimation: string;
        animationLoops: boolean;
        inRange: Record<string, import("src/helpers/prendyUtils/dolls").InRangeForDoll>;
        isVisible: boolean;
        animWeights: Record<string, number>;
        animWeightsGoal: Record<string, number>;
        animWeightsIsMoving: boolean;
        animWeightsMoveMode: import("repond-movers/src/types").MoveMode;
        animWeightsMoveConfigName: string;
        animWeightsMoveConfigs: Record<string, import("repond-movers/src/types").PhysicsOptions>;
        nowWalkSpeed: number;
        positionOnScreen: import("chootils/dist/points2d").Point2D;
        rotationY: number;
        rotationYGoal: number;
        rotationYIsMoving: boolean;
        rotationYMoveMode: import("repond-movers/src/types").MoveMode;
        rotationYMoveConfigName: string;
        rotationYMoveConfigs: Record<string, import("repond-movers/src/types").PhysicsOptions>;
        position: Point3D;
        positionGoal: Point3D;
        positionIsMoving: boolean;
        positionMoveMode: import("repond-movers/src/types").MoveMode;
        positionMoveConfigName: string;
        positionMoveConfigs: Record<string, import("repond-movers/src/types").PhysicsOptions>;
        modelName: T_ModelName;
        goalSpotNameAtNewPlace: string | null;
        goalPositionAtNewPlace: Point3D | null;
    };
    getDefaultRefs: <T_DollName_1 extends string, T_ModelName_1 extends string>(dollName: T_DollName_1, itemState: {
        toggledMeshes: Record<string, boolean>;
        nowAnimation: string;
        animationLoops: boolean;
        inRange: Record<string, import("src/helpers/prendyUtils/dolls").InRangeForDoll>;
        isVisible: boolean;
        animWeights: Record<string, number>;
        animWeightsGoal: Record<string, number>;
        animWeightsIsMoving: boolean;
        animWeightsMoveMode: import("repond-movers/src/types").MoveMode;
        animWeightsMoveConfigName: string;
        animWeightsMoveConfigs: Record<string, import("repond-movers/src/types").PhysicsOptions>;
        nowWalkSpeed: number;
        positionOnScreen: import("chootils/dist/points2d").Point2D;
        rotationY: number;
        rotationYGoal: number;
        rotationYIsMoving: boolean;
        rotationYMoveMode: import("repond-movers/src/types").MoveMode;
        rotationYMoveConfigName: string;
        rotationYMoveConfigs: Record<string, import("repond-movers/src/types").PhysicsOptions>;
        position: Point3D;
        positionGoal: Point3D;
        positionIsMoving: boolean;
        positionMoveMode: import("repond-movers/src/types").MoveMode;
        positionMoveConfigName: string;
        positionMoveConfigs: Record<string, import("repond-movers/src/types").PhysicsOptions>;
        modelName: any;
        goalSpotNameAtNewPlace: string | null;
        goalPositionAtNewPlace: Point3D | null;
    }) => {
        animWeightsMoverRefs: {
            stateNames: {
                value: "animWeights";
                valueGoal: "animWeightsGoal";
                isMoving: "animWeightsIsMoving";
                moveMode: "animWeightsMoveMode";
                physicsConfigName: "animWeightsMoveConfigName" | undefined;
                physicsConfigs: "animWeightsMoveConfigs" | undefined;
            };
            physicsConfigs: import("repond-movers/src/types").DefinedPhysicsConfig | undefined;
            animRefs: Record<string, {
                velocity: number;
                recentSpeeds: number[];
            }>;
            animNames: readonly string[];
        };
        rotationYMoverRefs: {
            velocity: number;
            recentSpeeds: number[];
            stateNames: {
                value: "rotationY";
                valueGoal: "rotationYGoal";
                isMoving: "rotationYIsMoving";
                moveMode: "rotationYMoveMode";
                physicsConfigName: "rotationYMoveConfigName" | undefined;
                physicsConfigs: "rotationYMoveConfigs" | undefined;
            };
            physicsConfigs: import("repond-movers/src/types").DefinedPhysicsConfig | undefined;
        };
        positionMoverRefs: {
            velocity: Point3D;
            recentSpeeds: number[];
            averageSpeed: number;
            canRunOnSlow: boolean;
            stateNames: {
                value: "position";
                valueGoal: "positionGoal";
                isMoving: "positionIsMoving";
                moveMode: "positionMoveMode";
                physicsConfigName: "positionMoveConfigName" | undefined;
                physicsConfigs: "positionMoveConfigs" | undefined;
            };
            physicsConfigs: import("repond-movers/src/types").DefinedPhysicsConfig | undefined;
        };
        meshRef: AbstractMesh | null;
        otherMeshes: Record<string, AbstractMesh | null>;
        entriesRef: InstantiatedEntries | null;
        aniGroupsRef: Record<string, AnimationGroup> | null;
        assetRefs: {
            meshes: Record<string, AbstractMesh>;
            skeleton: Skeleton;
            bones: Record<string, Bone>;
            aniGroups: Record<string, AnimationGroup>;
            materials: Record<string, Material>;
        } | null;
        groundRef: AbstractMesh | null;
        canGoThroughWalls: boolean;
    };
};
