UNPKG

warscript

Version:

A typescript library for Warcraft III using Warpack.

54 lines (53 loc) 2.91 kB
/// <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>; }