warscript
Version:
A typescript library for Warcraft III using Warpack.
81 lines (80 loc) • 6.77 kB
TypeScript
/// <reference types="warpack-types/warpack" />
/** @noSelfInFile */
import { AttachmentPreset, AttachmentPresetInput } from "./auxiliary/attachment-preset";
import { MutableKeys } from "../../utility/types";
export type ObjectDataEntryId = number & {
readonly __objectDataEntryId: unique symbol;
};
export type ObjectDataEntryIdType<T extends ObjectDataEntry> = T extends ObjectDataEntry<infer Id> ? Id : never;
export type ObjectDataEntryConstructor<T extends ObjectDataEntry> = OmitConstructor<typeof ObjectDataEntry> & (new (object: WarObject) => T);
export type ObjectDataEntryAbstractConstructor<T extends ObjectDataEntry> = OmitConstructor<typeof ObjectDataEntry> & (abstract new (object: WarObject) => T);
export type ObjectDataEntryProperties<T extends ObjectDataEntry> = Partial<T[MutableKeys<T>]>;
export type ObjectDataEntryLevelFieldValueSupplier<ValueType extends string | number | boolean | undefined | Record<string, any>, InputValueType = ValueType> = ValueType | readonly ValueType[] | ((level: number, currentValue: InputValueType) => ValueType);
export declare const extractObjectDataEntryLevelFieldValue: <ValueType extends string | number | boolean | Record<string, any> | undefined, InputValueType = ValueType>(supplier: ObjectDataEntryLevelFieldValueSupplier<ValueType, InputValueType>, level: number, currentValue: InputValueType) => ValueType;
export declare const extractObjectDataEntryLevelArrayFieldValue: <T extends string | number | boolean | Record<string, any> | undefined, S extends T[]>(supplier: ObjectDataEntryLevelFieldValueSupplier<S, S>, level: number, currentValue: S) => S;
export declare abstract class ObjectDataEntry<Id extends ObjectDataEntryId = ObjectDataEntryId> {
protected readonly object: WarObject;
static readonly BASE_ID: ObjectDataEntryId;
protected static readonly IS_SYNTHETIC: boolean;
private readonly levelFieldParametersByField;
private readonly maxAffectedLevelByField;
private _isInternal;
get isInternal(): boolean;
protected static generateId(): number;
protected static getObjectData(map: WarMap): WarObjects;
static getAllIdsByBaseIds<T extends ObjectDataEntry>(this: ObjectDataEntryAbstractConstructor<T>, baseIds: number | number[]): ObjectDataEntryIdType<T>[];
static create<T extends ObjectDataEntry>(this: ObjectDataEntryConstructor<T>, ...args: [id?: number, properties?: ObjectDataEntryProperties<T>] | [properties: ObjectDataEntryProperties<T>]): T;
static getAllByBaseIds<T extends ObjectDataEntry>(this: ObjectDataEntryAbstractConstructor<T>, baseIds: number | number[]): T[];
static getAll<T extends ObjectDataEntry>(this: ObjectDataEntryAbstractConstructor<T>): T[];
static of<T extends ObjectDataEntry>(this: ObjectDataEntryAbstractConstructor<T>, id: number): T | undefined;
constructor(object: WarObject);
get id(): Id;
get baseId(): Id;
get isCustom(): boolean;
getFieldValue<This extends this, Args extends any[], T>(this: This, field: {
getValue(entry: This, ...args: Args): T;
}, ...args: Args): T;
setFieldValue<This extends this, Args extends any[]>(this: This, field: {
setValue(entry: This, ...args: Args): boolean;
}, ...args: Args): void;
protected getBooleanField(field: string): boolean;
protected setBooleanField(field: string, value: boolean): void;
protected getNumberField(field: string): number;
protected setNumberField(field: string, value: number): void;
protected getStringField(field: string): string;
protected setStringField(field: string, value: string): void;
protected getObjectDataEntryIdField<Id extends ObjectDataEntryId>(field: string): Id;
protected setObjectDataEntryIdField<Id extends ObjectDataEntryId>(field: string, value: Id): void;
protected getAttachmentPresetField(modelPathField: string, nodeFQNField: string): AttachmentPreset | undefined;
protected setAttachmentPresetField(modelPathField: string, nodeFQNField: string, attachmentPreset: AttachmentPresetInput | undefined): void;
protected getBooleansField(field: string): boolean[];
protected setBooleansField(field: string, values: boolean[]): void;
protected getNumbersField(field: string): number[];
protected setNumbersField(field: string, values: number[]): void;
protected getStringsField(field: string): string[];
protected setStringsField(field: string, values: string[]): void;
protected getObjectDataEntryIdsField<Id extends ObjectDataEntryId>(field: string): Id[];
protected setObjectDataEntryIdsField<Id extends ObjectDataEntryId>(field: string, values: Id[]): void;
protected getAttachmentPresetListField(modelPathListField: string, nodeFQNFields: string[]): AttachmentPreset[];
protected setAttachmentPresetListField(modelPathListField: string, nodeFQNFields: string[], lengthField: string, attachmentPresets: AttachmentPresetInput[]): void;
protected setFlagLevelFieldValue(fieldId: string, flag: 1 | 2 | 4 | 8 | 16, supplier: ObjectDataEntryLevelFieldValueSupplier<boolean>): void;
protected getFlagLevelFieldValue(fieldId: string, flag: 1 | 2 | 4 | 8 | 16): boolean[];
protected getBooleanLevelField(field: string): boolean[];
protected setBooleanLevelField(field: string, values: ObjectDataEntryLevelFieldValueSupplier<boolean>): void;
protected getNumberLevelField(field: string): number[];
protected setNumberLevelField(field: string, values: ObjectDataEntryLevelFieldValueSupplier<number>): void;
protected getStringLevelField(field: string): string[];
protected setStringLevelField(field: string, values: ObjectDataEntryLevelFieldValueSupplier<string>): void;
protected getObjectDataEntryIdLevelField<Id extends ObjectDataEntryId>(field: string): Id[];
protected setObjectDataEntryIdLevelField<Id extends ObjectDataEntryId>(field: string, values: ObjectDataEntryLevelFieldValueSupplier<Id>): void;
protected getBooleansLevelField(field: string): boolean[][];
protected setBooleansLevelField(field: string, values: ObjectDataEntryLevelFieldValueSupplier<boolean[]>): void;
protected getNumbersLevelField(field: string): number[][];
protected setNumbersLevelField(field: string, values: ObjectDataEntryLevelFieldValueSupplier<number[]>): void;
protected getStringsLevelField(field: string): string[][];
protected setStringsLevelField(field: string, values: ObjectDataEntryLevelFieldValueSupplier<string[]>): void;
protected getObjectDataEntryIdsLevelField<T extends ObjectDataEntryId>(field: string): T[][];
protected setObjectDataEntryIdsLevelField<T extends ObjectDataEntryId>(field: string, values: ObjectDataEntryLevelFieldValueSupplier<T[]>): void;
private getLevelField;
private setLevelField;
}