/**
 * Game Loop Manager
 *
 * Handles the core game simulation loop and iteration utilities.
 * - Main game loop (initLifeSim): Processes each game tick
 * - Game iteration (iterateGames): Loads and processes all active games
 */
import { Player } from '../../models/index.js';
import { BatchedUpdate, GameEvent } from './GameEngine.js';
export interface LoopManagerOptions {
    tickInterval?: number;
    maxOfflineMinutes?: number;
}
export interface OfflineStats {
    minutesOffline: number;
    lastOnline?: Date;
}
export interface ConnectionRecord {
    playerId: string;
    connection: 'connected' | 'disconnected';
    lastActivity: Date;
}
/**
 * Register a player in the records
 */
export declare function registerPlayer(player: Player): void;
/**
 * Unregister a player from records
 */
export declare function unregisterPlayer(playerId: string): void;
/**
 * Get a player from records
 */
export declare function getPlayer(playerId: string): Player | undefined;
/**
 * Get all registered players
 */
export declare function getAllPlayers(): Player[];
/**
 * Iterate through all saved games and process one tick for disconnected players
 */
export declare function iterateGames(loadGames: () => Promise<Array<{
    playerId: string;
}>>, loadGameAsync: (playerId: string) => Promise<Player | null>, saveGameAsync: (player: Player) => Promise<void>): Promise<void>;
/**
 * Send function type for WebSocket messaging
 */
export type SendFunction = (message: Record<string, unknown>) => Promise<void>;
export interface WebSocketConnection {
    userID: string;
    send: SendFunction;
}
/**
 * Create batched update object
 */
export declare function createBatchedUpdate(player: Player): BatchedUpdate;
/**
 * Main game simulation loop - processes one game tick
 */
export declare function initLifeSim(websocket: WebSocketConnection | null, oneTimePlayer?: Player | null, saveGameAsync?: (player: Player) => Promise<void>, sendEventMessage?: (ws: WebSocketConnection | null, event: GameEvent) => Promise<void>, sendUserInfo?: (player: Player, ws: WebSocketConnection | null) => Promise<void>, sendDict?: (ws: WebSocketConnection | null, data: Record<string, unknown>) => Promise<void>): Promise<boolean>;
/**
 * Start the game loop for a player
 */
export declare function startGameLoop(player: Player, tickCallback: (player: Player) => Promise<void>, intervalMs?: number): NodeJS.Timeout;
/**
 * Stop the game loop
 */
export declare function stopGameLoop(intervalId: NodeJS.Timeout): void;
/**
 * Process offline time for a player
 */
export declare function processOfflineTime(player: Player, saveGameAsync: (player: Player) => Promise<void>): Promise<number>;
//# sourceMappingURL=LoopManager.d.ts.map