import { AsyncEventEmitter } from "@vladfrangu/async_event_emitter";
import type { Client } from "../client";
import { type ParcelPropertiesData, Quaternion, Vector3 } from "../network";
import { Parcel } from "../structures";
import type { Collision } from "../types";
export interface SelfEvents {
    collision: [collision: Collision];
    "parcel-update": [parcel: Parcel];
}
export declare class Self extends AsyncEventEmitter<SelfEvents> {
    private readonly client;
    key: string;
    sessionId: string;
    circuitCode: number;
    firstName: string;
    lastName: string;
    state: number;
    rotation: Quaternion;
    position: Vector3;
    cameraAtAxis: Vector3;
    cameraLeftAxis: Vector3;
    cameraUpAxis: Vector3;
    parcel?: Parcel;
    /** If the user is an estate admin in the current region */
    isEstateManager: boolean;
    /** Linden Damage health */
    health: number;
    /**
     * The last parcel sequence ID that was received from the server. This is
     * used to determine if the current parcel properties has changed.
     *
     * @internal
     */
    lastParcelSequenceId: number;
    /**
     * @see {@link https://wiki.secondlife.com/wiki/How_movement_works}
     */
    controlFlags: number;
    /**
     * @internal
     */
    constructor(client: Client, data: {
        key: string;
        sessionId: string;
        circuitCode: number;
        firstName: string;
        lastName: string;
        lookAt?: Vector3;
        offset?: Vector3;
    });
    get name(): string;
    set lookAt(value: Parameters<typeof Quaternion.fromEuler>[0]);
    updateParcelProperties(data: ParcelPropertiesData): void;
    sendAgentUpdate(options?: {
        state?: number;
        controlFlags?: number;
    }): void;
    sitOnObject(targetId: string): void;
    sitOnGround(): void;
    standUp(): void;
}
