warscript
Version:
A typescript library for Warcraft III using Warpack.
54 lines (53 loc) • 2.91 kB
TypeScript
/// <reference types="@typescript-to-lua/language-extensions" />
/** @noSelfInFile */
export type EventListener<T extends any[]> = (...args: T) => void;
export declare const enum EventListenerPriority {
LOWEST = 0,
LOW = 1,
MEDIUM = 2,
HIGH = 3,
HIGHEST = 4
}
export declare class Event<T extends any[] = []> {
protected listeners: EventListener<any>[];
protected priorityByListener: LuaMap<EventListener<any>, EventListenerPriority>;
addListener(listener: EventListener<T>): void;
addListener(priority: EventListenerPriority, listener: EventListener<T>): void;
protected addListenerInternal(priority: EventListenerPriority, listener: EventListener<T>): boolean;
removeListener(listener: EventListener<T>): boolean;
static invoke<T extends any[]>(this: void, event: Event<T>, ...args: T): void;
}
export declare class InitializingEvent<T extends any[] = [], Data = void> extends Event<T> {
#private;
private readonly initialize;
private readonly deinitialize?;
constructor(initialize: (this: void, event: InitializingEvent<T, Data>) => Data, deinitialize?: ((this: void, data: Data) => void) | undefined);
protected addListenerInternal(priority: EventListenerPriority, listener: EventListener<T>): boolean;
removeListener(callback: EventListener<T>): boolean;
destroy(): void;
}
declare const IgnoreEvent: unique symbol;
type IgnoreEvent = typeof IgnoreEvent;
export { IgnoreEvent };
export declare class TriggerEvent<T extends any[] = []> extends InitializingEvent<T, jtrigger | undefined> {
constructor(r: (trigger: jtrigger) => void, c: () => LuaMultiReturn<T | [IgnoreEvent]>);
}
export type EventParameters<T> = T extends Event<infer P> ? P : never;
export type EventDispatchTable<EventType extends Event<any>, KeyType extends number = number> = {
readonly [key in KeyType]: EventType;
};
export type DispatchingEvent<P extends any[], T extends Event<P> = Event<P>, S extends Event<P> = Event<P>> = T & EventDispatchTable<S>;
export declare const createDispatchingEvent: {
<T extends Event<any>, S extends Event<EventParameters<T>>>(underlyingEvent: T, extractKey: (...args: EventParameters<T>) => number, ...createEvent: [...(Event<any> extends S ? [(() => S)?] : [() => S])]): DispatchingEvent<EventParameters<T>, T>;
};
export declare class DependentInitializingEvent<T extends any[], R extends any[]> extends InitializingEvent<R, EventListener<T>> {
constructor(underlyingEvent: Event<T>, priority: EventListenerPriority, collector: (...args: T) => LuaMultiReturn<[false] | [true, ...R]>);
}
export declare class EventParametersCaptor<T extends any[]> {
private readonly event;
private invoked?;
private constructor();
getFirstParameters(): LuaMultiReturn<[] | T>;
getLastParameters(): LuaMultiReturn<[] | T>;
static create<T extends any[]>(event: Event<T>): EventParametersCaptor<T>;
}