import { type Config } from './lib';
import * as Timestamp from './timestamp';
export interface Stepper {
    step: () => void;
}
export interface FixedTimestepper extends Stepper {
    lastCompletedTimestamp: () => Timestamp.Timestamp;
    resetLastCompletedTimestamp: (correctedTimestamp: Timestamp.Timestamp) => void;
    postUpdate: (timestepOvershootSeconds: number) => void;
}
export declare enum TerminationCondition {
    LastUndershoot = 0,
    FirstOvershoot = 1
}
export declare function decomposeFloatTimestamp(condition: TerminationCondition, floatTimestamp: Timestamp.FloatTimestamp, timestepSeconds: number): [Timestamp.Timestamp, number];
export declare function shouldTerminate(condition: TerminationCondition, currentOvershootSeconds: number, nextOvershootSeconds: number): boolean;
export declare class TimeKeeper<$Stepper extends FixedTimestepper> {
    stepper: $Stepper;
    terminationCondition: TerminationCondition;
    timestepOvershootSeconds: number;
    config: Config;
    constructor(stepper: $Stepper, config: Config, terminationCondition?: TerminationCondition);
    update(deltaSeconds: number, serverSecondsSinceStartup: number): void;
    currentLogicalTimestamp(): Timestamp.FloatTimestamp;
    targetLogicalTimestamp(serverSecondsSinceStartup: number): Timestamp.FloatTimestamp;
    timestampDriftSeconds(serverSecondsSinceStartup: number): number;
    deltaSecondsCompensateForDrift(deltaSeconds: number, serverSecondsSinceStartup: number): number;
    advanceStepper(deltaSeconds: number): number;
    timeskipIfNeeded(serverSecondsSinceStartup: number): void;
}
//# sourceMappingURL=fixed_timestepper.d.ts.map