warscript 0.0.1-dev.aaf0a9d → 0.0.1-dev.b530e1f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,6 @@
1
1
  /// <reference types="warpack-types/warpack" />
2
2
  /** @noSelfInFile */
3
+ import "../../internal/unit/ability";
3
4
  import { TupleOf } from "../../../utility/types";
4
5
  import { AnimationName } from "../auxiliary/animation-name";
5
6
  import { AnimationQualifier } from "../auxiliary/animation-qualifier";
@@ -6,6 +6,7 @@ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
6
6
  local ____exports = {}
7
7
  local ____unit = require("engine.internal.unit")
8
8
  local Unit = ____unit.Unit
9
+ require("engine.internal.unit.ability")
9
10
  local ____timer = require("core.types.timer")
10
11
  local Timer = ____timer.Timer
11
12
  local ____effect = require("core.types.effect")
@@ -9,7 +9,6 @@ export type ObjectFieldId = number & {
9
9
  export type ObjectFieldConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (new (id: number) => T);
10
10
  export type ObjectFieldAbstractConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (abstract new (id: number) => T);
11
11
  declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEntry, InstanceType extends AnyNotNil, ValueType, NativeFieldType> {
12
- protected readonly valueByInstance: LuaMap<InstanceType, ValueType>;
13
12
  protected abstract readonly instanceClass: AbstractConstructor<InstanceType> | Function;
14
13
  supports(instance: AnyNotNil): instance is InstanceType & {
15
14
  readonly __oneSidedTypeGuard: unique symbol;
@@ -33,22 +32,22 @@ export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any
33
32
  previousValue: ValueType,
34
33
  newValue: ValueType
35
34
  ]> : never;
36
- export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue">;
35
+ export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue" | "trySetValue">;
37
36
  type ReadonlyObjectFieldConstructor<T extends ObjectField> = OmitConstructor<typeof ObjectField> & (abstract new (...args: any[]) => ReadonlyObjectFieldType<T>);
38
37
  export declare abstract class ObjectField<ObjectDataEntryType extends ObjectDataEntry = ObjectDataEntry, InstanceType extends AnyNotNil = AnyNotNil, ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = unknown> extends ObjectFieldBase<ObjectDataEntryType, InstanceType, ValueType, NativeFieldType> {
39
38
  protected abstract readonly defaultValue: ValueType;
40
- accepts(value: unknown): value is ValueType;
41
39
  protected abstract getNativeFieldValue(instance: InstanceType): ValueType;
42
40
  protected abstract setNativeFieldValue(instance: InstanceType, value: ValueType): boolean;
43
41
  getValue(entry: ObjectDataEntryType | InstanceType): ValueType;
44
42
  setValue(entry: ObjectDataEntryType | InstanceType, value: ValueType): boolean;
45
43
  removeValue(entry: ObjectDataEntryType): boolean;
44
+ trySetValue(entry: ObjectDataEntryType | InstanceType, value: unknown): boolean;
46
45
  private invokeValueChangeEvent;
47
46
  private invokeValueChangeEventRecursive;
48
47
  protected static getOrCreateValueChangeEvent<T extends ObjectField, R extends ReadonlyObjectFieldType<T>>(this: ReadonlyObjectFieldConstructor<T>): ObjectFieldValueChangeEvent<R>;
49
48
  static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<ObjectField>>;
50
49
  }
51
- export type ReadonlyObjectLevelFieldType<T extends ObjectLevelField<any, any, any, any>> = Omit<T, "setValue">;
50
+ export type ReadonlyObjectLevelFieldType<T extends ObjectLevelField<any, any, any, any>> = Omit<T, "setValue" | "trySetValue">;
52
51
  export type ObjectLevelFieldValueChangeEvent<T extends ObjectLevelField<any, any, any, any> | ReadonlyObjectLevelFieldType<ObjectLevelField<any, any, any, any>>> = T extends ObjectLevelField<any, infer InstanceType, infer ValueType, any, any> ? DispatchingEvent<[
53
52
  instance: InstanceType,
54
53
  field: T,
@@ -77,6 +76,7 @@ export declare abstract class ObjectLevelField<ObjectDataEntryType extends Objec
77
76
  protected abstract getLevelCount(entry: ObjectDataEntryType | InstanceType): number;
78
77
  getValue<LevelType extends [number] | []>(entry: ObjectDataEntryType | InstanceType, ...[level]: LevelType): LevelType extends [number] ? ValueType : ValueType[];
79
78
  setValue(entry: ObjectDataEntryType | InstanceType, ...[levelOrValue, value]: [value: ObjectDataEntryLevelFieldValueSupplier<InputValueType, ValueType>] | [level: number, value: InputValueType]): boolean;
79
+ trySetValue(entry: ObjectDataEntryType | InstanceType, levelOrValue: number | unknown, value?: unknown): boolean;
80
80
  private invokeValueChangeEvent;
81
81
  private invokeValueChangeEventRecursive;
82
82
  protected static getOrCreateValueChangeEvent<T extends ObjectLevelField, R extends ReadonlyObjectLevelFieldType<T>>(this: ReadonlyObjectLevelFieldConstructor<T>): ObjectLevelFieldValueChangeEvent<R>;
@@ -71,9 +71,6 @@ ____exports.ObjectField = __TS__Class()
71
71
  local ObjectField = ____exports.ObjectField
72
72
  ObjectField.name = "ObjectField"
73
73
  __TS__ClassExtends(ObjectField, ObjectFieldBase)
74
- function ObjectField.prototype.accepts(self, value)
75
- return __TS__TypeOf(value) == __TS__TypeOf(self.defaultValue)
76
- end
77
74
  function ObjectField.prototype.getValue(self, entry)
78
75
  if __TS__InstanceOf(entry, ObjectDataEntry) then
79
76
  local defaultValueByObjectDataEntryId = (warpack.compiletime and compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId or defaultValueByObjectDataEntryIdByObjectFieldId)[self.id]
@@ -159,6 +156,12 @@ function ObjectField.prototype.removeValue(self, entry)
159
156
  end
160
157
  return false
161
158
  end
159
+ function ObjectField.prototype.trySetValue(self, entry, value)
160
+ if __TS__TypeOf(value) ~= __TS__TypeOf(self.defaultValue) then
161
+ return false
162
+ end
163
+ return self:setValue(entry, value)
164
+ end
162
165
  function ObjectField.prototype.invokeValueChangeEvent(self, ...)
163
166
  self:invokeValueChangeEventRecursive(
164
167
  getClass(self),
@@ -403,6 +406,21 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
403
406
  end
404
407
  return true
405
408
  end
409
+ function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
410
+ if value ~= nil then
411
+ if __TS__TypeOf(value) ~= __TS__TypeOf(self.defaultValue) then
412
+ return false
413
+ end
414
+ if type(levelOrValue) ~= "number" then
415
+ return false
416
+ end
417
+ return self:setValue(entry, levelOrValue, value)
418
+ end
419
+ if __TS__TypeOf(levelOrValue) ~= __TS__TypeOf(self.defaultValue) then
420
+ return false
421
+ end
422
+ return self:setValue(entry, levelOrValue)
423
+ end
406
424
  function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
407
425
  self:invokeValueChangeEventRecursive(
408
426
  getClass(self),
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "warscript",
4
- "version": "0.0.1-dev.aaf0a9d",
4
+ "version": "0.0.1-dev.b530e1f",
5
5
  "description": "A typescript library for Warcraft III using Warpack.",
6
6
  "keywords": [
7
7
  "warcraft",
@@ -44,6 +44,7 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
44
44
  sortBy<R>(selector: ((value: T) => R) | KeysOfType<T, R>): void;
45
45
  protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
46
46
  }
47
+ export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
47
48
  export declare const linkedSetOf: <T extends AnyNotNil>(...elements: readonly T[]) => LinkedSet<T>;
48
49
  export declare const linkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | null | undefined)[]) => LinkedSet<T>;
49
50
  export {};
@@ -2,9 +2,12 @@ local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
3
  local __TS__New = ____lualib.__TS__New
4
4
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
5
6
  local ____exports = {}
6
7
  local ____arrays = require("utility.arrays")
7
8
  local sortBy = ____arrays.sortBy
9
+ local ____exception = require("exception")
10
+ local UnsupportedOperationException = ____exception.UnsupportedOperationException
8
11
  local function linkedSetNext(state)
9
12
  local n = state.n
10
13
  state.n = state.t[n]
@@ -161,6 +164,19 @@ __TS__SetDescriptor(
161
164
  end},
162
165
  true
163
166
  )
167
+ local EmptyLinkedSet = __TS__Class()
168
+ EmptyLinkedSet.name = "EmptyLinkedSet"
169
+ __TS__ClassExtends(EmptyLinkedSet, ____exports.LinkedSet)
170
+ function EmptyLinkedSet.prototype.add(self)
171
+ error(
172
+ __TS__New(UnsupportedOperationException),
173
+ 0
174
+ )
175
+ end
176
+ local EMPTY_LINKED_SET = __TS__New(EmptyLinkedSet)
177
+ ____exports.emptyLinkedSet = function()
178
+ return EMPTY_LINKED_SET
179
+ end
164
180
  ____exports.linkedSetOf = function(...)
165
181
  local linkedSet = __TS__New(____exports.LinkedSet)
166
182
  for i = 1, select("#", ...) do