import type { Socket } from "socket.io-client";
import type { GData, MapName } from "./definitions/adventureland-data.js";
import type { ServerData, WelcomeData, ActionData, ServerInfoData, EntitiesData, NewMapData, ServerToClientEvents, ClientToServerEvents } from "./definitions/adventureland-server.js";
import { Entity } from "./Entity.js";
import { Player } from "./Player.js";
export declare class Observer {
    socket: Socket<ServerToClientEvents, ClientToServerEvents>;
    protected lastAllEntities: number;
    protected lastPositionUpdate: number;
    G: GData;
    entities: Map<string, Entity>;
    protected secret?: string;
    protected pingIndex: number;
    protected pingMap: Map<string, {
        log: boolean;
        time: number;
    }>;
    protected pingNum: number;
    private static pingsPerServer;
    pings: number[];
    players: Map<string, Player>;
    projectiles: Map<string, ActionData & {
        date: Date;
    }>;
    S: ServerInfoData;
    server: WelcomeData;
    serverData: ServerData;
    map: MapName;
    in: string;
    x: number;
    y: number;
    get ping(): number;
    get timeout(): number;
    constructor(serverData: ServerData, g: GData, secret?: string);
    connect(reconnect?: boolean, start?: boolean): Promise<void>;
    /**
     * Removes an entity from the entity map, as well as potentially handling database updates
     * for special monsters
     * @param id The ID of the entity to remove
     * @param death Are we deleting it because it died?
     * @returns If the entity was successfully deleted from the entities map
     */
    deleteEntity(id: string, death?: boolean): boolean;
    protected parseEntities(data: EntitiesData): void;
    protected parseNewMap(data: NewMapData): void;
    protected updatePositions(): void;
    sendPing(log?: boolean): Promise<number>;
}
