warscript 0.0.1-dev.32c305a → 0.0.1-dev.3370e98

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.
Files changed (64) hide show
  1. package/core/types/frame.lua +10 -12
  2. package/core/types/player.lua +3 -1
  3. package/core/types/playerCamera.d.ts +2 -0
  4. package/core/types/playerCamera.lua +79 -5
  5. package/core/types/timer.d.ts +2 -1
  6. package/core/types/timer.lua +7 -2
  7. package/decl/native.d.ts +4 -2
  8. package/engine/behavior.d.ts +2 -0
  9. package/engine/behavior.lua +53 -27
  10. package/engine/behaviour/ability/apply-buff.lua +1 -1
  11. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  12. package/engine/behaviour/ability/emulate-impact.lua +2 -1
  13. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  14. package/engine/behaviour/ability/restore-mana.lua +6 -6
  15. package/engine/behaviour/ability.lua +7 -16
  16. package/engine/behaviour/unit/stun-immunity.d.ts +5 -3
  17. package/engine/behaviour/unit/stun-immunity.lua +43 -27
  18. package/engine/behaviour/unit.d.ts +12 -1
  19. package/engine/behaviour/unit.lua +56 -7
  20. package/engine/buff.d.ts +2 -1
  21. package/engine/buff.lua +9 -3
  22. package/engine/internal/ability.lua +8 -2
  23. package/engine/internal/item/ability.lua +51 -1
  24. package/engine/internal/item+owner.lua +12 -6
  25. package/engine/internal/item.d.ts +1 -0
  26. package/engine/internal/item.lua +7 -3
  27. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  28. package/engine/internal/misc/frame-coordinates.lua +21 -0
  29. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  30. package/engine/internal/misc/get-terrain-z.lua +11 -0
  31. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  32. package/engine/internal/misc/player-local-handle.lua +5 -0
  33. package/engine/internal/unit/ability.d.ts +30 -0
  34. package/engine/internal/unit/ability.lua +48 -0
  35. package/engine/internal/unit/order.d.ts +20 -0
  36. package/engine/internal/unit/order.lua +136 -0
  37. package/engine/internal/unit+ability.lua +1 -1
  38. package/engine/internal/unit-missile-launch.lua +8 -1
  39. package/engine/internal/unit.d.ts +4 -4
  40. package/engine/internal/unit.lua +79 -62
  41. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  42. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  43. package/engine/object-data/entry/ability-type.lua +1 -3
  44. package/engine/object-data/entry/unit-type.d.ts +11 -2
  45. package/engine/object-data/entry/unit-type.lua +59 -1
  46. package/engine/object-field/unit.d.ts +11 -0
  47. package/engine/object-field/unit.lua +34 -0
  48. package/engine/object-field.d.ts +6 -3
  49. package/engine/object-field.lua +85 -73
  50. package/engine/standard/fields/unit.d.ts +4 -0
  51. package/engine/standard/fields/unit.lua +7 -0
  52. package/engine/text-tag.d.ts +36 -2
  53. package/engine/text-tag.lua +249 -10
  54. package/engine/unit.d.ts +1 -0
  55. package/engine/unit.lua +1 -0
  56. package/package.json +2 -2
  57. package/utility/functions.d.ts +7 -0
  58. package/utility/functions.lua +12 -0
  59. package/utility/lua-maps.d.ts +1 -0
  60. package/utility/lua-maps.lua +4 -0
  61. package/utility/lua-sets.d.ts +1 -0
  62. package/utility/lua-sets.lua +4 -0
  63. package/core/types/order.d.ts +0 -26
  64. package/core/types/order.lua +0 -65
@@ -23,8 +23,11 @@ local ObjectDataEntryIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.Ob
23
23
  local ____linked_2Dset = require("utility.linked-set")
24
24
  local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
25
25
  local ____lua_2Dmaps = require("utility.lua-maps")
26
+ local emptyLuaMap = ____lua_2Dmaps.emptyLuaMap
26
27
  local getOrPut = ____lua_2Dmaps.getOrPut
27
28
  local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
29
+ local ____arrays = require("utility.arrays")
30
+ local emptyArray = ____arrays.emptyArray
28
31
  local compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId = {}
29
32
  local defaultValueByObjectDataEntryIdByObjectFieldId = postcompile(function() return compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId end)
30
33
  local objectFieldById = {}
@@ -34,7 +37,11 @@ local idGenerator = __TS__New(
34
37
  )
35
38
  local ObjectFieldBase = __TS__Class()
36
39
  ObjectFieldBase.name = "ObjectFieldBase"
37
- function ObjectFieldBase.prototype.____constructor(self, id)
40
+ function ObjectFieldBase.prototype.____constructor(self, id, isGlobal)
41
+ if isGlobal == nil then
42
+ isGlobal = false
43
+ end
44
+ self.isGlobal = isGlobal
38
45
  self.valueByInstance = setmetatable({}, {__mode = "k"})
39
46
  if objectFieldById[id] ~= nil then
40
47
  error(
@@ -53,12 +60,13 @@ function ObjectFieldBase.prototype.supports(self, instance)
53
60
  end
54
61
  function ObjectFieldBase.prototype.hasValue(self, instance)
55
62
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
56
- return defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
63
+ return self.isGlobal or defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
57
64
  end
58
- function ObjectFieldBase.create(self, id)
65
+ function ObjectFieldBase.create(self, id, isGlobal)
59
66
  return __TS__New(
60
67
  self,
61
- id or idGenerator:next()
68
+ id or idGenerator:next(),
69
+ isGlobal
62
70
  )
63
71
  end
64
72
  function ObjectFieldBase.of(self, id)
@@ -185,36 +193,40 @@ function ObjectField.prototype.trySetValue(self, entry, value)
185
193
  end
186
194
  function ObjectField.prototype.getActualValue(self, instance)
187
195
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
188
- if defaultValueByObjectDataEntryId ~= nil then
189
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
190
- if defaultValue ~= nil then
196
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
197
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
198
+ if defaultValue ~= nil or self.isGlobal then
191
199
  local ____self_valueByInstance_instance_0 = self.valueByInstance[instance]
192
200
  if ____self_valueByInstance_instance_0 == nil then
193
201
  ____self_valueByInstance_instance_0 = defaultValue
194
202
  end
195
- return ____self_valueByInstance_instance_0
203
+ local ____self_valueByInstance_instance_0_1 = ____self_valueByInstance_instance_0
204
+ if ____self_valueByInstance_instance_0_1 == nil then
205
+ ____self_valueByInstance_instance_0_1 = self.defaultValue
206
+ end
207
+ return ____self_valueByInstance_instance_0_1
196
208
  end
197
209
  end
198
- local ____temp_1 = self:getNativeFieldValue(instance)
199
- if ____temp_1 == nil then
200
- ____temp_1 = self.defaultValue
210
+ local ____temp_2 = self:getNativeFieldValue(instance)
211
+ if ____temp_2 == nil then
212
+ ____temp_2 = self.defaultValue
201
213
  end
202
- return ____temp_1
214
+ return ____temp_2
203
215
  end
204
216
  function ObjectField.prototype.setActualValue(self, instance, value)
205
217
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
206
- if defaultValueByObjectDataEntryId ~= nil then
207
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
208
- if defaultValue ~= nil then
209
- local ____self_valueByInstance_instance_2 = self.valueByInstance[instance]
210
- if ____self_valueByInstance_instance_2 == nil then
211
- ____self_valueByInstance_instance_2 = defaultValue
218
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
219
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
220
+ if defaultValue ~= nil or self.isGlobal then
221
+ local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
222
+ if ____self_valueByInstance_instance_3 == nil then
223
+ ____self_valueByInstance_instance_3 = defaultValue
212
224
  end
213
- local ____self_valueByInstance_instance_2_3 = ____self_valueByInstance_instance_2
214
- if ____self_valueByInstance_instance_2_3 == nil then
215
- ____self_valueByInstance_instance_2_3 = self.defaultValue
225
+ local ____self_valueByInstance_instance_3_4 = ____self_valueByInstance_instance_3
226
+ if ____self_valueByInstance_instance_3_4 == nil then
227
+ ____self_valueByInstance_instance_3_4 = self.defaultValue
216
228
  end
217
- local previousValue = ____self_valueByInstance_instance_2_3
229
+ local previousValue = ____self_valueByInstance_instance_3_4
218
230
  if value ~= previousValue then
219
231
  self.valueByInstance[instance] = value
220
232
  self:invokeValueChangeEvent(instance, self, previousValue, value)
@@ -235,10 +247,10 @@ function ObjectField.prototype.setActualValue(self, instance, value)
235
247
  return true
236
248
  end
237
249
  function ObjectField.prototype.calculateActualValue(self, instance)
238
- local ____opt_4 = self.originalValueByInstance
239
- local originalValue = ____opt_4 and ____opt_4[instance]
240
- local ____opt_6 = self.modifiersByInstance
241
- local modifiers = ____opt_6 and ____opt_6[instance]
250
+ local ____opt_5 = self.originalValueByInstance
251
+ local originalValue = ____opt_5 and ____opt_5[instance]
252
+ local ____opt_7 = self.modifiersByInstance
253
+ local modifiers = ____opt_7 and ____opt_7[instance]
242
254
  if originalValue ~= nil then
243
255
  local value = originalValue
244
256
  if modifiers ~= nil then
@@ -303,37 +315,37 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
303
315
  if defaultValueByObjectDataEntryId ~= nil then
304
316
  local value = defaultValueByObjectDataEntryId[entry.id]
305
317
  if value ~= nil then
306
- local ____temp_9
318
+ local ____temp_10
307
319
  if index == nil then
308
- ____temp_9 = value
320
+ ____temp_10 = value
309
321
  else
310
- local ____value_index_8 = value[index + 1]
311
- if ____value_index_8 == nil then
312
- ____value_index_8 = self.defaultValue
322
+ local ____value_index_9 = value[index + 1]
323
+ if ____value_index_9 == nil then
324
+ ____value_index_9 = self.defaultValue
313
325
  end
314
- ____temp_9 = ____value_index_8
326
+ ____temp_10 = ____value_index_9
315
327
  end
316
- return ____temp_9
328
+ return ____temp_10
317
329
  end
318
330
  end
319
331
  return index == nil and ({}) or self.defaultValue
320
332
  end
321
333
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
322
- if defaultValueByObjectDataEntryId ~= nil then
323
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
324
- if defaultValue ~= nil then
325
- local value = self.valueByInstance[entry] or defaultValue
326
- local ____temp_11
334
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
335
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
336
+ if defaultValue ~= nil or self.isGlobal then
337
+ local value = self.valueByInstance[entry] or defaultValue or emptyArray()
338
+ local ____temp_12
327
339
  if index == nil then
328
- ____temp_11 = value
340
+ ____temp_12 = value
329
341
  else
330
- local ____value_index_10 = value[index + 1]
331
- if ____value_index_10 == nil then
332
- ____value_index_10 = self.defaultValue
342
+ local ____value_index_11 = value[index + 1]
343
+ if ____value_index_11 == nil then
344
+ ____value_index_11 = self.defaultValue
333
345
  end
334
- ____temp_11 = ____value_index_10
346
+ ____temp_12 = ____value_index_11
335
347
  end
336
- return ____temp_11
348
+ return ____temp_12
337
349
  end
338
350
  end
339
351
  if index ~= nil then
@@ -378,36 +390,36 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
378
390
  if defaultValueByObjectDataEntryId ~= nil then
379
391
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
380
392
  if valueByLevel ~= nil then
381
- local ____valueByLevel_index_12 = valueByLevel[level + 1]
382
- if ____valueByLevel_index_12 == nil then
383
- ____valueByLevel_index_12 = self.defaultValue
393
+ local ____valueByLevel_index_13 = valueByLevel[level + 1]
394
+ if ____valueByLevel_index_13 == nil then
395
+ ____valueByLevel_index_13 = self.defaultValue
384
396
  end
385
- return ____valueByLevel_index_12
397
+ return ____valueByLevel_index_13
386
398
  end
387
399
  end
388
400
  return self.defaultValue
389
401
  end
390
402
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
391
- if defaultValueByObjectDataEntryId ~= nil then
392
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
393
- if defaultValueByLevel ~= nil then
394
- local ____opt_13 = self.valueByInstance[entry]
395
- local ____temp_15 = ____opt_13 and ____opt_13[level + 1]
396
- if ____temp_15 == nil then
397
- ____temp_15 = defaultValueByLevel[level + 1]
403
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
404
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
405
+ if defaultValueByLevel ~= nil or self.isGlobal then
406
+ local ____opt_14 = self.valueByInstance[entry]
407
+ local ____temp_16 = ____opt_14 and ____opt_14[level + 1]
408
+ if ____temp_16 == nil then
409
+ ____temp_16 = (defaultValueByLevel or emptyArray())[level + 1]
398
410
  end
399
- local ____temp_15_16 = ____temp_15
400
- if ____temp_15_16 == nil then
401
- ____temp_15_16 = self.defaultValue
411
+ local ____temp_16_17 = ____temp_16
412
+ if ____temp_16_17 == nil then
413
+ ____temp_16_17 = self.defaultValue
402
414
  end
403
- return ____temp_15_16
415
+ return ____temp_16_17
404
416
  end
405
417
  end
406
- local ____temp_17 = self:getNativeFieldValue(entry, level)
407
- if ____temp_17 == nil then
408
- ____temp_17 = self.defaultValue
418
+ local ____temp_18 = self:getNativeFieldValue(entry, level)
419
+ if ____temp_18 == nil then
420
+ ____temp_18 = self.defaultValue
409
421
  end
410
- return ____temp_17
422
+ return ____temp_18
411
423
  end
412
424
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
413
425
  if value == nil then
@@ -448,23 +460,23 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
448
460
  return true
449
461
  end
450
462
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
451
- if defaultValueByObjectDataEntryId ~= nil then
452
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
453
- if defaultValueByLevel ~= nil then
463
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
464
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
465
+ if defaultValueByLevel ~= nil or self.isGlobal then
454
466
  local valueByLevel = self.valueByInstance[entry]
455
467
  if valueByLevel == nil then
456
468
  valueByLevel = {}
457
469
  self.valueByInstance[entry] = valueByLevel
458
470
  end
459
- local ____valueByLevel_index_18 = valueByLevel[level + 1]
460
- if ____valueByLevel_index_18 == nil then
461
- ____valueByLevel_index_18 = defaultValueByLevel[level + 1]
471
+ local ____valueByLevel_index_19 = valueByLevel[level + 1]
472
+ if ____valueByLevel_index_19 == nil then
473
+ ____valueByLevel_index_19 = (defaultValueByLevel or emptyArray())[level + 1]
462
474
  end
463
- local ____valueByLevel_index_18_19 = ____valueByLevel_index_18
464
- if ____valueByLevel_index_18_19 == nil then
465
- ____valueByLevel_index_18_19 = self.defaultValue
475
+ local ____valueByLevel_index_19_20 = ____valueByLevel_index_19
476
+ if ____valueByLevel_index_19_20 == nil then
477
+ ____valueByLevel_index_19_20 = self.defaultValue
466
478
  end
467
- local previousValue = ____valueByLevel_index_18_19
479
+ local previousValue = ____valueByLevel_index_19_20
468
480
  if value ~= previousValue then
469
481
  valueByLevel[level + 1] = value
470
482
  self:invokeValueChangeEvent(
@@ -0,0 +1,4 @@
1
+ /** @noSelfInFile */
2
+ import { UnitClassificationsField, UnitPropulsionWindowField } from "../../object-field/unit";
3
+ export declare const PROPULSION_WINDOW_UNIT_FLOAT_FIELD: UnitPropulsionWindowField & symbol;
4
+ export declare const UNIT_CLASSIFICATIONS_FIELD: UnitClassificationsField & symbol;
@@ -0,0 +1,7 @@
1
+ local ____exports = {}
2
+ local ____unit = require("engine.object-field.unit")
3
+ local UnitClassificationsField = ____unit.UnitClassificationsField
4
+ local UnitPropulsionWindowField = ____unit.UnitPropulsionWindowField
5
+ ____exports.PROPULSION_WINDOW_UNIT_FLOAT_FIELD = UnitPropulsionWindowField:create(fourCC("urpw"))
6
+ ____exports.UNIT_CLASSIFICATIONS_FIELD = UnitClassificationsField:create(fourCC("utyp"))
7
+ return ____exports
@@ -1,5 +1,7 @@
1
1
  /** @noSelfInFile */
2
2
  import { Color } from "../core/types/color";
3
+ import { Unit } from "./internal/unit";
4
+ import { AbstractDestroyable, Destructor } from "../destroyable";
3
5
  export type TextTagPreset = {
4
6
  fadepoint: number;
5
7
  lifespan: number;
@@ -10,9 +12,39 @@ export type TextTagPreset = {
10
12
  velocityY: number;
11
13
  color: Color;
12
14
  };
13
- export declare class TextTag {
14
- private readonly handle;
15
+ declare const enum TextTagPropertyKey {
16
+ UNIT = 100,
17
+ HANDLE = 101,
18
+ CONFIGURATION = 102,
19
+ TEXT = 103,
20
+ FONT_SIZE = 104,
21
+ COLOR = 105,
22
+ X = 106,
23
+ Y = 107
24
+ }
25
+ export declare class TextTag extends AbstractDestroyable {
26
+ private [TextTagPropertyKey.HANDLE]?;
27
+ private [TextTagPropertyKey.CONFIGURATION]?;
28
+ private [TextTagPropertyKey.TEXT]?;
29
+ private [TextTagPropertyKey.FONT_SIZE]?;
30
+ private [TextTagPropertyKey.COLOR]?;
31
+ private [TextTagPropertyKey.UNIT]?;
32
+ private [TextTagPropertyKey.X]?;
33
+ private [TextTagPropertyKey.Y]?;
15
34
  private constructor();
35
+ protected onDestroy(): Destructor;
36
+ get text(): string;
37
+ set text(text: string);
38
+ get fontSize(): number;
39
+ set fontSize(fontSize: number);
40
+ get color(): Color;
41
+ set color(color: Color);
42
+ get unit(): Unit | undefined;
43
+ set unit(unit: Unit | undefined);
44
+ get x(): number;
45
+ set x(x: number);
46
+ get y(): number;
47
+ set y(y: number);
16
48
  static BASE: Readonly<TextTagPreset>;
17
49
  static BASH: Readonly<TextTagPreset>;
18
50
  static CRITICAL_STRIKE: Readonly<TextTagPreset>;
@@ -22,4 +54,6 @@ export declare class TextTag {
22
54
  static MISS: Readonly<TextTagPreset>;
23
55
  static SHADOW_STRIKE: Readonly<TextTagPreset>;
24
56
  static flash(configuration: Readonly<TextTagPreset>, text: string, x: number, y: number, z?: number): void;
57
+ static create(configuration: Readonly<TextTagPreset>, text: string, unit: Unit): TextTag;
25
58
  }
59
+ export {};
@@ -1,9 +1,22 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
+ local __TS__New = ____lualib.__TS__New
5
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
3
6
  local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
4
7
  local ____exports = {}
5
8
  local ____color = require("core.types.color")
6
9
  local Color = ____color.Color
10
+ local ____timer = require("core.types.timer")
11
+ local Timer = ____timer.Timer
12
+ local ____destroyable = require("destroyable")
13
+ local AbstractDestroyable = ____destroyable.AbstractDestroyable
14
+ local ____playerCamera = require("core.types.playerCamera")
15
+ local worldCoordinatesToFrame = ____playerCamera.worldCoordinatesToFrame
16
+ local ____get_2Dterrain_2Dz = require("engine.internal.misc.get-terrain-z")
17
+ local getTerrainZ = ____get_2Dterrain_2Dz.getTerrainZ
18
+ local ____player_2Dlocal_2Dhandle = require("engine.internal.misc.player-local-handle")
19
+ local PLAYER_LOCAL_HANDLE = ____player_2Dlocal_2Dhandle.PLAYER_LOCAL_HANDLE
7
20
  local createTextTag = CreateTextTag
8
21
  local destroyTextTag = DestroyTextTag
9
22
  local setTextTagText = SetTextTagText
@@ -17,17 +30,14 @@ local setTextTagPermanent = SetTextTagPermanent
17
30
  local setTextTagAge = SetTextTagAge
18
31
  local setTextTagLifespan = SetTextTagLifespan
19
32
  local setTextTagFadepoint = SetTextTagFadepoint
33
+ local isUnitHidden = IsUnitHidden
34
+ local isUnitLoaded = IsUnitLoaded
35
+ local isUnitVisible = IsUnitVisible
36
+ local getUnitFlyHeight = GetUnitFlyHeight
37
+ local getUnitX = GetUnitX
38
+ local getUnitY = GetUnitY
20
39
  local DEFAULT_FONT_SIZE = 0.024
21
- ____exports.TextTag = __TS__Class()
22
- local TextTag = ____exports.TextTag
23
- TextTag.name = "TextTag"
24
- function TextTag.prototype.____constructor(self, handle)
25
- self.handle = handle
26
- end
27
- function TextTag.flash(self, configuration, text, x, y, z)
28
- local textTag = createTextTag()
29
- setTextTagText(textTag, text, DEFAULT_FONT_SIZE)
30
- setTextTagPos(textTag, x + configuration.offsetX, y + configuration.offsetY, (z or 0) + configuration.offsetZ)
40
+ local function applyConfiguration(textTag, configuration)
31
41
  setTextTagFadepoint(textTag, configuration.fadepoint)
32
42
  setTextTagLifespan(textTag, configuration.lifespan)
33
43
  local color = configuration.color
@@ -42,6 +52,213 @@ function TextTag.flash(self, configuration, text, x, y, z)
42
52
  setTextTagPermanent(textTag, false)
43
53
  setTextTagVisibility(textTag, true)
44
54
  end
55
+ local unitTextTags = setmetatable({}, {__mode = "k"})
56
+ local function ensureHandle(textTag)
57
+ local handle = textTag[101]
58
+ if handle == nil then
59
+ handle = createTextTag()
60
+ applyConfiguration(handle, textTag[102])
61
+ setTextTagPermanent(handle, true)
62
+ setTextTagText(handle, textTag[103] or "", textTag[104] or DEFAULT_FONT_SIZE)
63
+ local color = textTag[105]
64
+ if color ~= nil then
65
+ setTextTagColor(
66
+ handle,
67
+ color.r,
68
+ color.g,
69
+ color.b,
70
+ color.a
71
+ )
72
+ end
73
+ local unit = textTag[100]
74
+ if unit ~= nil then
75
+ setTextTagPosUnit(handle, unit.handle, textTag[102].offsetZ)
76
+ else
77
+ setTextTagPos(handle, textTag[106] or 0, textTag[107] or 0, 0)
78
+ end
79
+ textTag[101] = handle
80
+ end
81
+ return handle
82
+ end
83
+ ____exports.TextTag = __TS__Class()
84
+ local TextTag = ____exports.TextTag
85
+ TextTag.name = "TextTag"
86
+ __TS__ClassExtends(TextTag, AbstractDestroyable)
87
+ function TextTag.prototype.____constructor(self, handle)
88
+ AbstractDestroyable.prototype.____constructor(self)
89
+ self[101] = handle
90
+ end
91
+ function TextTag.prototype.onDestroy(self)
92
+ local handle = self[101]
93
+ if handle ~= nil then
94
+ destroyTextTag(handle)
95
+ self[101] = nil
96
+ end
97
+ unitTextTags[self] = nil
98
+ return AbstractDestroyable.prototype.onDestroy(self)
99
+ end
100
+ function TextTag.flash(self, configuration, text, x, y, z)
101
+ local textTag = createTextTag()
102
+ setTextTagText(textTag, text, DEFAULT_FONT_SIZE)
103
+ setTextTagPos(textTag, x + configuration.offsetX, y + configuration.offsetY, (z or 0) + configuration.offsetZ)
104
+ applyConfiguration(textTag, configuration)
105
+ end
106
+ function TextTag.create(self, configuration, text, unit)
107
+ local textTag = __TS__New(____exports.TextTag)
108
+ textTag[103] = text
109
+ textTag[100] = unit
110
+ textTag[102] = configuration
111
+ ensureHandle(textTag)
112
+ unitTextTags[textTag] = true
113
+ return textTag
114
+ end
115
+ __TS__SetDescriptor(
116
+ TextTag.prototype,
117
+ "text",
118
+ {
119
+ get = function(self)
120
+ return self[103] or ""
121
+ end,
122
+ set = function(self, text)
123
+ setTextTagText(
124
+ ensureHandle(self),
125
+ text,
126
+ self[104] or DEFAULT_FONT_SIZE
127
+ )
128
+ self[103] = text
129
+ end
130
+ },
131
+ true
132
+ )
133
+ __TS__SetDescriptor(
134
+ TextTag.prototype,
135
+ "fontSize",
136
+ {
137
+ get = function(self)
138
+ return self[104] or DEFAULT_FONT_SIZE
139
+ end,
140
+ set = function(self, fontSize)
141
+ setTextTagText(
142
+ ensureHandle(self),
143
+ self[103] or "",
144
+ DEFAULT_FONT_SIZE
145
+ )
146
+ self[104] = fontSize
147
+ end
148
+ },
149
+ true
150
+ )
151
+ __TS__SetDescriptor(
152
+ TextTag.prototype,
153
+ "color",
154
+ {
155
+ get = function(self)
156
+ return self[105] or Color.white
157
+ end,
158
+ set = function(self, color)
159
+ setTextTagColor(
160
+ ensureHandle(self),
161
+ color.r,
162
+ color.g,
163
+ color.b,
164
+ color.a
165
+ )
166
+ self[105] = color
167
+ end
168
+ },
169
+ true
170
+ )
171
+ __TS__SetDescriptor(
172
+ TextTag.prototype,
173
+ "unit",
174
+ {
175
+ get = function(self)
176
+ return self[100]
177
+ end,
178
+ set = function(self, unit)
179
+ if unit ~= nil then
180
+ setTextTagPosUnit(
181
+ ensureHandle(self),
182
+ unit.handle,
183
+ 0
184
+ )
185
+ self[106] = nil
186
+ self[107] = nil
187
+ unitTextTags[self] = true
188
+ elseif self[100] ~= nil then
189
+ local unit = self[100]
190
+ local x = unit.x
191
+ local y = unit.y
192
+ setTextTagPos(
193
+ ensureHandle(self),
194
+ x,
195
+ y,
196
+ 0
197
+ )
198
+ self[106] = x
199
+ self[107] = y
200
+ unitTextTags[self] = nil
201
+ end
202
+ self[100] = unit
203
+ end
204
+ },
205
+ true
206
+ )
207
+ __TS__SetDescriptor(
208
+ TextTag.prototype,
209
+ "x",
210
+ {
211
+ get = function(self)
212
+ local ____self__106_2 = self[106]
213
+ if ____self__106_2 == nil then
214
+ local ____opt_0 = self[100]
215
+ ____self__106_2 = ____opt_0 and ____opt_0.x
216
+ end
217
+ return ____self__106_2 or 0
218
+ end,
219
+ set = function(self, x)
220
+ local ____ensureHandle_result_6 = ensureHandle(self)
221
+ local ____x_7 = x
222
+ local ____self__107_5 = self[107]
223
+ if ____self__107_5 == nil then
224
+ local ____opt_3 = self[100]
225
+ ____self__107_5 = ____opt_3 and ____opt_3.y
226
+ end
227
+ setTextTagPos(____ensureHandle_result_6, ____x_7, ____self__107_5 or 0, 0)
228
+ self[106] = x
229
+ self[100] = nil
230
+ unitTextTags[self] = nil
231
+ end
232
+ },
233
+ true
234
+ )
235
+ __TS__SetDescriptor(
236
+ TextTag.prototype,
237
+ "y",
238
+ {
239
+ get = function(self)
240
+ local ____self__107_10 = self[107]
241
+ if ____self__107_10 == nil then
242
+ local ____opt_8 = self[100]
243
+ ____self__107_10 = ____opt_8 and ____opt_8.y
244
+ end
245
+ return ____self__107_10 or 0
246
+ end,
247
+ set = function(self, y)
248
+ local ____ensureHandle_result_14 = ensureHandle(self)
249
+ local ____self__106_13 = self[106]
250
+ if ____self__106_13 == nil then
251
+ local ____opt_11 = self[100]
252
+ ____self__106_13 = ____opt_11 and ____opt_11.x
253
+ end
254
+ setTextTagPos(____ensureHandle_result_14, ____self__106_13 or 0, y, 0)
255
+ self[107] = y
256
+ self[100] = nil
257
+ unitTextTags[self] = nil
258
+ end
259
+ },
260
+ true
261
+ )
45
262
  TextTag.BASE = {
46
263
  fadepoint = 2,
47
264
  lifespan = 3,
@@ -106,4 +323,26 @@ TextTag.SHADOW_STRIKE = __TS__ObjectAssign(
106
323
  lifespan = 5
107
324
  }
108
325
  )
326
+ Timer.onPeriod[1 / 64]:addListener(function()
327
+ for textTag in pairs(unitTextTags) do
328
+ local unit = textTag[100].handle
329
+ local x = getUnitX(unit)
330
+ local y = getUnitY(unit)
331
+ local ____, ____, isInView = worldCoordinatesToFrame(
332
+ x,
333
+ y,
334
+ getUnitFlyHeight(unit) + getTerrainZ(x, y)
335
+ )
336
+ if isInView and not isUnitHidden(unit) and not isUnitLoaded(unit) and isUnitVisible(unit, PLAYER_LOCAL_HANDLE) then
337
+ setTextTagPosUnit(
338
+ ensureHandle(textTag),
339
+ unit,
340
+ textTag[102].offsetZ
341
+ )
342
+ elseif textTag[101] ~= nil then
343
+ destroyTextTag(textTag[101])
344
+ textTag[101] = nil
345
+ end
346
+ end
347
+ end)
109
348
  return ____exports
package/engine/unit.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  /** @noSelfInFile */
2
2
  import "./internal/unit";
3
+ import "./internal/unit/order";
3
4
  import "./internal/unit/ability";
4
5
  import "./internal/unit/allowed-targets";
5
6
  import "./internal/unit/buff";
package/engine/unit.lua CHANGED
@@ -1,5 +1,6 @@
1
1
  local ____exports = {}
2
2
  require("engine.internal.unit")
3
+ require("engine.internal.unit.order")
3
4
  require("engine.internal.unit.ability")
4
5
  require("engine.internal.unit.allowed-targets")
5
6
  require("engine.internal.unit.buff")
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.32c305a",
4
+ "version": "0.0.1-dev.3370e98",
5
5
  "description": "A typescript library for Warcraft III using Warpack.",
6
6
  "keywords": [
7
7
  "warcraft",
@@ -24,7 +24,7 @@
24
24
  "@warscript/language-extensions": "^0.0.1",
25
25
  "@warscript/tstl-plugin": "^0.0.4",
26
26
  "lua-types": "^2.13.1",
27
- "warpack": "0.0.1-dev.fa5e065"
27
+ "warpack": "0.0.1-dev.78d2c64"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@typescript-eslint/eslint-plugin": "^8.13.0",
@@ -4,3 +4,10 @@ export declare const apply: {
4
4
  <T, ConsumerParameters extends any[], K extends KeysOfType<T, (...parameters: ConsumerParameters) => void>>(object: T, key: K, ...parameters: ConsumerParameters): T;
5
5
  };
6
6
  export declare const identity: <T>(value: T) => T;
7
+ export declare const firstArgument: <T>(value: T) => T;
8
+ export declare const secondArgument: <T>(_: unknown, value: T) => T;
9
+ export declare const thirdArgument: <T>(_first: unknown, _second: unknown, value: T) => T;
10
+ export declare const increment: (value: number) => number;
11
+ export declare const or: (lhs: boolean, rhs: boolean) => boolean;
12
+ export type Transform<T, R> = (<T, R>(value: T) => R) | KeysOfType<T, R>;
13
+ export declare const transform: <T, R>(object: T, transform: Transform<T, R>) => R;