/// <reference types="node" />
import { DepthRenderer, Effect, PostProcess, RenderTargetTexture, Scene, SolidParticleSystem, Texture } from "@babylonjs/core";
import { Point3D } from "chootils/dist/points3d";
import { MyTypes } from "../../declarations";
import { InRangeForDoll } from "../../helpers/prendyUtils/dolls";
export type PrendySaveState = {
    global: {
        nowCamName: string;
        nowPlaceName: string;
        nowSegmentName: string;
        heldPickups: string[];
        storyOverlayToggled: boolean;
        alarmTextIsVisible: boolean;
        alarmText: string;
        aSpeechBubbleIsShowing: boolean;
        aConvoIsHappening: boolean;
    };
    dolls: Record<string, {
        position: Point3D;
        rotationY: number;
        isVisible: boolean;
        toggledMeshes: Record<string, boolean>;
        inRange: Record<string, InRangeForDoll>;
        nowAnimation: string;
    }>;
    places: Record<string, {
        toggledWalls: Record<string, boolean>;
    }>;
    characters: Record<string, {
        hasLeftFirstTrigger: boolean;
    }>;
    player: {
        animationNames: {
            walking: string;
            idle: string;
        };
    };
    miniBubbles: Record<string, {
        isVisible: boolean;
        text: string;
    }>;
    speechBubbles: Record<string, {
        isVisible: boolean;
        goalText: string;
        nowVideoName: string;
        font: string;
        stylesBySpecialText: {
            [key: string]: {
                color: string;
                fontSize: string;
                fontWeight: string;
                fontStyle: string;
                textDecoration: string;
            };
        };
        forCharacter: string;
        typingFinished: boolean;
    }>;
    storyState: Record<any, any>;
};
export declare const timeStatePath: readonly ["global", "main", "elapsedGameTime"];
export default function global<T_MyTypes extends MyTypes = MyTypes>(prendyAssets: T_MyTypes["Assets"]): {
    startStates: {
        main: {
            slatePosMoveConfigName: string;
            isOnVerticalScreen: boolean;
            zoomMultiplier: number;
            timeScreenResized: number;
            interactButtonPressTime: number;
            heldPickups: string[];
            storyOverlayToggled: boolean;
            alarmTextIsVisible: boolean;
            alarmText: string;
            aSpeechBubbleIsShowing: boolean;
            aConvoIsHappening: boolean;
            backdropTime: number;
            backdropFrame: number;
            frameTick: number;
            timeMode: "pause" | "game" | "miniGame";
            elapsedGameTime: number;
            elapsedPauseTime: number;
            elapsedMiniGameTime: number;
            isGamePaused: boolean;
            gameTimeSpeed: number;
            gameIsInBackground: boolean;
            debugMessage: string;
            latestSave: PrendySaveState | null;
            latestLoadTime: number;
            slateZoom: number;
            slateZoomGoal: number;
            slateZoomIsMoving: boolean;
            slateZoomMoveMode: import("repond-movers/src/types").MoveMode;
            slateZoomMoveConfigName: string;
            slateZoomMoveConfigs: Record<string, import("repond-movers/src/types").PhysicsOptions>;
            slatePos: import("chootils/dist/points2d").Point2D;
            slatePosGoal: import("chootils/dist/points2d").Point2D;
            slatePosIsMoving: boolean;
            slatePosMoveMode: import("repond-movers/src/types").MoveMode;
            slatePosMoveConfigs: Record<string, import("repond-movers/src/types").PhysicsOptions>;
            nowPlaceName: string;
            goalPlaceName: string | null;
            readyToSwapPlace: boolean;
            isLoadingBetweenPlaces: boolean;
            loadingOverlayToggled: boolean;
            loadingOverlayFullyShowing: boolean;
            goalCamWhenNextPlaceLoads: string | null;
            goalCamNameAtLoop: string | null;
            goalCamName: string | null;
            nowCamName: string;
            nowSegmentName: string;
            goalSegmentName: string | null;
            goalSegmentNameAtLoop: string | null;
            goalSegmentWhenGoalPlaceLoads: string | null;
            modelNamesLoaded: string[];
            newPlaceModelLoaded: boolean;
            newPlaceVideosLoaded: boolean;
            newPlaceProbesLoaded: boolean;
            playerCharacter: string;
            gravityValue: number;
            playerMovingPaused: boolean;
            focusedDoll: any;
            focusedDollIsInView: boolean;
        };
    };
    getDefaultState: () => {
        slatePosMoveConfigName: string;
        isOnVerticalScreen: boolean;
        zoomMultiplier: number;
        timeScreenResized: number;
        interactButtonPressTime: number;
        heldPickups: string[];
        storyOverlayToggled: boolean;
        alarmTextIsVisible: boolean;
        alarmText: string;
        aSpeechBubbleIsShowing: boolean;
        aConvoIsHappening: boolean;
        backdropTime: number;
        backdropFrame: number;
        frameTick: number;
        timeMode: "pause" | "game" | "miniGame";
        elapsedGameTime: number;
        elapsedPauseTime: number;
        elapsedMiniGameTime: number;
        isGamePaused: boolean;
        gameTimeSpeed: number;
        gameIsInBackground: boolean;
        debugMessage: string;
        latestSave: PrendySaveState | null;
        latestLoadTime: number;
        slateZoom: number;
        slateZoomGoal: number;
        slateZoomIsMoving: boolean;
        slateZoomMoveMode: import("repond-movers/src/types").MoveMode;
        slateZoomMoveConfigName: string;
        slateZoomMoveConfigs: Record<string, import("repond-movers/src/types").PhysicsOptions>;
        slatePos: import("chootils/dist/points2d").Point2D;
        slatePosGoal: import("chootils/dist/points2d").Point2D;
        slatePosIsMoving: boolean;
        slatePosMoveMode: import("repond-movers/src/types").MoveMode;
        slatePosMoveConfigs: Record<string, import("repond-movers/src/types").PhysicsOptions>;
        nowPlaceName: string;
        goalPlaceName: string | null;
        readyToSwapPlace: boolean;
        isLoadingBetweenPlaces: boolean;
        loadingOverlayToggled: boolean;
        loadingOverlayFullyShowing: boolean;
        goalCamWhenNextPlaceLoads: string | null;
        goalCamNameAtLoop: string | null;
        goalCamName: string | null;
        nowCamName: string;
        nowSegmentName: string;
        goalSegmentName: string | null;
        goalSegmentNameAtLoop: string | null;
        goalSegmentWhenGoalPlaceLoads: string | null;
        modelNamesLoaded: string[];
        newPlaceModelLoaded: boolean;
        newPlaceVideosLoaded: boolean;
        newPlaceProbesLoaded: boolean;
        playerCharacter: string;
        gravityValue: number;
        playerMovingPaused: boolean;
        focusedDoll: any;
        focusedDollIsInView: boolean;
    };
    getDefaultRefs: () => {
        sounds: {
            [x: string]: import("@babylonjs/core").Sound | null;
        };
        music: {
            [x: string]: import("@babylonjs/core").Sound | null;
        };
        musicEffects: {
            lowPass: BiquadFilterNode | null;
            compress: DynamicsCompressorNode | null;
            extraGain: GainNode | null;
        };
        solidParticleSystems: Record<string, SolidParticleSystem>;
        timerSpeed: number;
        aConvoIsHappening_timeout: NodeJS.Timeout | null;
        camSegmentRulesOptions: Partial<{
            [x: string]: Partial<{
                [x: string]: (usefulStuff: Record<any, any>) => keyof string[];
            }>;
        }> | null;
        onPickupButtonClick: ((pickupName: any) => void) | null;
        slateZoomMoverRefs: {
            velocity: number;
            recentSpeeds: number[];
            stateNames: {
                value: "slateZoom";
                valueGoal: "slateZoomGoal";
                isMoving: "slateZoomIsMoving";
                moveMode: "slateZoomMoveMode";
                physicsConfigName: "slateZoomMoveConfigName" | undefined;
                physicsConfigs: "slateZoomMoveConfigs" | undefined;
            };
            physicsConfigs: import("repond-movers/src/types").DefinedPhysicsConfig | undefined;
        };
        slatePosMoverRefs: {
            velocity: import("chootils/dist/points2d").Point2D;
            recentSpeeds: number[];
            averageSpeed: number;
            canRunOnSlow: boolean;
            stateNames: {
                value: "slatePos";
                valueGoal: "slatePosGoal";
                isMoving: "slatePosIsMoving";
                moveMode: "slatePosMoveMode";
                physicsConfigName: "slatePosMoveConfigName" | undefined;
                physicsConfigs: "slatePosMoveConfigs" | undefined;
            };
            physicsConfigs: import("repond-movers/src/types").DefinedPhysicsConfig | undefined;
        };
        scene: Scene | null;
        backdropTex: Texture | null;
        backdropTexDepth: Texture | null;
        depthRenderer: DepthRenderer | null;
        depthRenderTarget: RenderTargetTexture | null;
        backdropPostProcess: PostProcess | null;
        backdropPostProcessEffect: Effect | null;
        fxaaPostProcess: PostProcess | null;
        stretchVideoSize: {
            x: number;
            y: number;
        };
        stretchVideoGoalSize: {
            x: number;
            y: number;
        };
        stretchSceneSize: {
            x: number;
            y: number;
        };
    };
};
