import type { LevelStage, StageType } from "isaac-typescript-definitions";
import { Feature } from "../../private/Feature";
/**
 * By default, callbacks fire in the following order:
 * - `POST_NEW_ROOM` --> `POST_NEW_LEVEL` --> `POST_GAME_STARTED`
 *
 * It is easier to write mod code if the callbacks run in a more logical order:
 * - `POST_GAME_STARTED` --> `POST_NEW_LEVEL` --> `POST_NEW_ROOM`
 *
 * `isaacscript-common` provides three new callbacks that change the order to this:
 * - `POST_GAME_STARTED_REORDERED`
 * - `POST_NEW_LEVEL_REORDERED`
 * - `POST_NEW_ROOM_REORDERED`
 *
 * Additionally, there are some helper functions listed below that can deal with some edge cases
 * that you may run into with these callbacks.
 */
export declare class GameReorderedCallbacks extends Feature {
    /** Used to detect a player resuming a saved run. */
    private renderFrameRunStarted;
    private currentStage;
    private currentStageType;
    private usedGlowingHourGlass;
    private forceNewLevel;
    private forceNewRoom;
    private readonly postGameStartedReordered;
    private readonly postNewLevelReordered;
    private readonly postNewRoomReordered;
    private readonly postGameStartedReorderedLast;
    private readonly postUseItemGlowingHourGlass;
    private readonly postPlayerInit;
    private readonly postGameStarted;
    private readonly preGameExit;
    private readonly postNewLevel;
    private readonly postNewRoom;
    private recordCurrentStage;
    /**
     * Helper function to tell the `POST_NEW_LEVEL_REORDERED` callback that it should always fire on
     * the next `POST_NEW_LEVEL`.
     *
     * If some specific cases, mods can change the current level during run initialization on the 0th
     * frame. (For example, if you had a mod that made the player start the run in Caves instead of
     * Basement.) However, due to how the callback reordering works, the `POST_NEW_LEVEL_REORDERED`
     * callback will never fire on the 0th frame. To get around this, call this function before
     * changing levels to temporarily force the callback to fire.
     *
     * In order to use this function, you must upgrade your mod with
     * `ISCFeature.GAME_REORDERED_CALLBACKS`.
     *
     * @public
     */
    forceNewLevelCallback(): void;
    /**
     * Helper function to tell the `POST_NEW_ROOM_REORDERED` callback that it should always fire on
     * the next `POST_NEW_ROOM`.
     *
     * If some specific cases, mods can change the current room during run initialization on the 0th
     * frame. (For example, if you had a mod that made the player start the Treasure Room of Basement
     * 1 instead of the normal starting room.) However, due to how the callback reordering works, the
     * `POST_NEW_ROOM_REORDERED` callback will never fire on the 0th frame. To get around this, call
     * this function before changing rooms to temporarily force the callback to fire.
     *
     * In order to use this function, you must upgrade your mod with
     * `ISCFeature.GAME_REORDERED_CALLBACKS`.
     *
     * @public
     */
    forceNewRoomCallback(): void;
    /**
     * Helper function to manually set the variables that the reordered callback logic uses to track
     * the current stage and stage type.
     *
     * This is useful because if the stage is changed with the `Game.SetStage` method (or the
     * `setStage` helper function), the reordered callbacks will stop working.
     *
     * In order to use this function, you must upgrade your mod with
     * `ISCFeature.GAME_REORDERED_CALLBACKS`.
     *
     * @public
     */
    reorderedCallbacksSetStage(stage: LevelStage, stageType: StageType): void;
}
//# sourceMappingURL=GameReorderedCallbacks.d.ts.map