warscript 0.0.1-dev.193ed34 → 0.0.1-dev.1a26d39

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 (102) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +22 -32
  4. package/core/types/player.d.ts +16 -0
  5. package/core/types/player.lua +57 -14
  6. package/core/types/playerCamera.lua +48 -4
  7. package/core/types/tileCell.d.ts +11 -1
  8. package/core/types/tileCell.lua +97 -0
  9. package/core/types/timer.d.ts +3 -2
  10. package/core/types/timer.lua +22 -2
  11. package/decl/native.d.ts +2 -2
  12. package/destroyable.d.ts +1 -0
  13. package/destroyable.lua +9 -0
  14. package/engine/behavior.d.ts +12 -1
  15. package/engine/behavior.lua +199 -65
  16. package/engine/behaviour/ability/apply-buff.lua +4 -4
  17. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  18. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  19. package/engine/behaviour/ability.d.ts +6 -1
  20. package/engine/behaviour/ability.lua +31 -1
  21. package/engine/behaviour/unit/stun-immunity.d.ts +9 -5
  22. package/engine/behaviour/unit/stun-immunity.lua +17 -7
  23. package/engine/behaviour/unit.d.ts +15 -5
  24. package/engine/behaviour/unit.lua +126 -22
  25. package/engine/buff.d.ts +19 -7
  26. package/engine/buff.lua +178 -118
  27. package/engine/internal/ability.d.ts +3 -1
  28. package/engine/internal/ability.lua +26 -9
  29. package/engine/internal/item+owner.lua +12 -6
  30. package/engine/internal/item.d.ts +13 -15
  31. package/engine/internal/item.lua +63 -49
  32. package/engine/internal/mechanics/cast-ability.lua +6 -3
  33. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  34. package/engine/internal/misc/frame-coordinates.lua +21 -0
  35. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  36. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  37. package/engine/internal/unit/ability.d.ts +14 -14
  38. package/engine/internal/unit/ability.lua +72 -45
  39. package/engine/internal/unit/attributes.d.ts +17 -0
  40. package/engine/internal/unit/attributes.lua +46 -0
  41. package/engine/internal/unit/bonus.d.ts +2 -0
  42. package/engine/internal/unit/bonus.lua +10 -0
  43. package/engine/internal/unit/fly-height.d.ts +7 -0
  44. package/engine/internal/unit/fly-height.lua +20 -0
  45. package/engine/internal/unit/interrupts.d.ts +12 -0
  46. package/engine/internal/unit/interrupts.lua +28 -0
  47. package/engine/internal/unit/main-selected.lua +12 -27
  48. package/engine/internal/unit/range-event.d.ts +12 -0
  49. package/engine/internal/unit/range-event.lua +90 -0
  50. package/engine/internal/unit/scale.d.ts +7 -0
  51. package/engine/internal/unit/scale.lua +20 -0
  52. package/engine/internal/unit+ability.lua +10 -1
  53. package/engine/internal/unit-missile-launch.lua +51 -20
  54. package/engine/internal/unit.d.ts +18 -22
  55. package/engine/internal/unit.lua +179 -200
  56. package/engine/local-client.d.ts +2 -0
  57. package/engine/local-client.lua +30 -0
  58. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  59. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  60. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  61. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  62. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  63. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  64. package/engine/object-data/entry/ability-type.lua +4 -1
  65. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  66. package/engine/object-data/entry/destructible-type.lua +155 -0
  67. package/engine/object-data/entry/unit-type.d.ts +4 -0
  68. package/engine/object-data/entry/unit-type.lua +76 -32
  69. package/engine/object-field/ability.d.ts +3 -3
  70. package/engine/object-field/ability.lua +7 -6
  71. package/engine/object-field/unit.d.ts +20 -5
  72. package/engine/object-field/unit.lua +61 -0
  73. package/engine/object-field.d.ts +11 -3
  74. package/engine/object-field.lua +270 -125
  75. package/engine/random.d.ts +9 -0
  76. package/engine/random.lua +13 -0
  77. package/engine/standard/fields/ability.d.ts +2 -2
  78. package/engine/standard/fields/ability.lua +2 -2
  79. package/engine/standard/fields/unit.d.ts +11 -3
  80. package/engine/standard/fields/unit.lua +15 -2
  81. package/engine/synchronization.d.ts +11 -0
  82. package/engine/synchronization.lua +77 -0
  83. package/engine/text-tag.lua +4 -2
  84. package/engine/unit.d.ts +5 -0
  85. package/engine/unit.lua +5 -0
  86. package/net/socket.lua +1 -1
  87. package/objutil/buff.lua +10 -8
  88. package/package.json +2 -2
  89. package/patch-lua.lua +15 -0
  90. package/patch-lualib.lua +1 -1
  91. package/utility/arrays.d.ts +1 -0
  92. package/utility/arrays.lua +8 -0
  93. package/utility/callback-array.d.ts +17 -0
  94. package/utility/callback-array.lua +61 -0
  95. package/utility/linked-map.d.ts +34 -0
  96. package/utility/linked-map.lua +101 -0
  97. package/utility/linked-set.d.ts +3 -1
  98. package/utility/linked-set.lua +40 -1
  99. package/utility/lua-maps.d.ts +11 -2
  100. package/utility/lua-maps.lua +33 -2
  101. package/utility/records.lua +20 -1
  102. package/utility/types.d.ts +3 -0
package/attributes.d.ts CHANGED
@@ -13,5 +13,6 @@ export declare namespace Attribute {
13
13
  export declare class AttributesHolder {
14
14
  readonly get: (<T>(attribute: Attribute<T>) => T | undefined) & LuaExtension<"TableGetMethod">;
15
15
  readonly set: (<T>(attribute: Attribute<T>, value: T | undefined) => void) & LuaExtension<"TableSetMethod">;
16
+ getOrPut<T>(attribute: Attribute<T>, defaultValue: () => T): T;
16
17
  }
17
18
  export {};
package/attributes.lua CHANGED
@@ -20,4 +20,13 @@ local AttributesHolder = ____exports.AttributesHolder
20
20
  AttributesHolder.name = "AttributesHolder"
21
21
  function AttributesHolder.prototype.____constructor(self)
22
22
  end
23
+ function AttributesHolder.prototype.getOrPut(self, attribute, defaultValue)
24
+ local value = self[attribute]
25
+ if value ~= nil then
26
+ return value
27
+ end
28
+ value = defaultValue()
29
+ self[attribute] = value
30
+ return value
31
+ end
23
32
  return ____exports
@@ -15,15 +15,20 @@ local Event = ____event.Event
15
15
  local TriggerEvent = ____event.TriggerEvent
16
16
  local ____timer = require("core.types.timer")
17
17
  local Timer = ____timer.Timer
18
+ local ____frame_2Dcoordinates = require("engine.internal.misc.frame-coordinates")
19
+ local FRAME_MAX_Y = ____frame_2Dcoordinates.FRAME_MAX_Y
20
+ local FRAME_MIN_Y = ____frame_2Dcoordinates.FRAME_MIN_Y
21
+ local getFrameMinXMaxX = ____frame_2Dcoordinates.getFrameMinXMaxX
22
+ local ____playerCamera = require("core.types.playerCamera")
23
+ local frameCoordinatesToWorld = ____playerCamera.frameCoordinatesToWorld
24
+ local worldCoordinatesToFrame = ____playerCamera.worldCoordinatesToFrame
25
+ local ____get_2Dterrain_2Dz = require("engine.internal.misc.get-terrain-z")
26
+ local getTerrainZ = ____get_2Dterrain_2Dz.getTerrainZ
18
27
  local frameClick = BlzFrameClick
19
28
  local frameGetEnable = BlzFrameGetEnable
20
29
  local frameIsVisible = BlzFrameIsVisible
21
30
  local frameSetEnable = BlzFrameSetEnable
22
31
  local frameSetScale = BlzFrameSetScale
23
- local getLocalClientWidth = BlzGetLocalClientWidth
24
- local getLocalClientHeight = BlzGetLocalClientHeight
25
- local getCameraTargetPositionX = GetCameraTargetPositionX
26
- local getCameraTargetPositionY = GetCameraTargetPositionY
27
32
  local ____rawget = _G.rawget
28
33
  local rawset = _G.rawset
29
34
  local invoke = Event.invoke
@@ -125,23 +130,6 @@ do
125
130
  FramePoint.BOTTOM_RIGHT = FRAMEPOINT_BOTTOMRIGHT
126
131
  end
127
132
  local tooltipByFrame = setmetatable({}, {__mode = "k"})
128
- ---
129
- -- @internal For use by internal systems only.
130
- ____exports.getFrameMinXMaxX = function()
131
- local w = getLocalClientWidth()
132
- local h = getLocalClientHeight()
133
- local width4by3 = (w - h / 600 * 800) / 2
134
- local pxtodpi = 0.6 / h
135
- local minX = -width4by3 * pxtodpi
136
- local maxX = minX + w * pxtodpi
137
- return minX, maxX
138
- end
139
- ---
140
- -- @internal For use by internal systems only.
141
- ____exports.FRAME_MIN_Y = 0
142
- ---
143
- -- @internal For use by internal systems only.
144
- ____exports.FRAME_MAX_Y = 0.6
145
133
  ____exports.Frame = __TS__Class()
146
134
  local Frame = ____exports.Frame
147
135
  Frame.name = "Frame"
@@ -363,7 +351,7 @@ __TS__ObjectDefineProperty(
363
351
  Frame,
364
352
  "minX",
365
353
  {get = function(self)
366
- local minX = ____exports.getFrameMinXMaxX()
354
+ local minX = getFrameMinXMaxX()
367
355
  return minX
368
356
  end}
369
357
  )
@@ -371,13 +359,13 @@ __TS__ObjectDefineProperty(
371
359
  Frame,
372
360
  "maxX",
373
361
  {get = function(self)
374
- local ____, maxX = ____exports.getFrameMinXMaxX()
362
+ local ____, maxX = getFrameMinXMaxX()
375
363
  return maxX
376
364
  end}
377
365
  )
378
366
  Frame.centerX = 0.4
379
- Frame.minY = ____exports.FRAME_MIN_Y
380
- Frame.maxY = ____exports.FRAME_MAX_Y
367
+ Frame.minY = FRAME_MIN_Y
368
+ Frame.maxY = FRAME_MAX_Y
381
369
  Frame.centerY = 0.3
382
370
  __TS__SetDescriptor(
383
371
  Frame.prototype,
@@ -951,16 +939,19 @@ __TS__ObjectDefineProperty(
951
939
  local event = __TS__New(Event)
952
940
  local syncX = 0
953
941
  local syncY = 0
954
- local syncCamX = getCameraTargetPositionX()
955
- local syncCamY = getCameraTargetPositionY()
942
+ local syncFrameX = 0
943
+ local syncFrameY = 0
956
944
  local lastX = syncX
957
945
  local lastY = syncY
958
946
  self.onMouseMove:addListener(function(player, x, y)
959
947
  if player.isLocal then
960
948
  syncX = x
961
949
  syncY = y
962
- syncCamX = getCameraTargetPositionX()
963
- syncCamY = getCameraTargetPositionY()
950
+ syncFrameX, syncFrameY = worldCoordinatesToFrame(
951
+ x,
952
+ y,
953
+ getTerrainZ(x, y)
954
+ )
964
955
  lastX = x
965
956
  lastY = y
966
957
  invoke(event, x, y)
@@ -970,9 +961,8 @@ __TS__ObjectDefineProperty(
970
961
  if syncX == 0 and syncY == 0 then
971
962
  return
972
963
  end
973
- local x = syncX + (getCameraTargetPositionX() - syncCamX)
974
- local y = syncY + (getCameraTargetPositionY() - syncCamY)
975
- if x ~= lastX or y ~= lastY then
964
+ local x, y, ____, isDefinite = frameCoordinatesToWorld(syncFrameX, syncFrameY)
965
+ if isDefinite and (x ~= lastX or y ~= lastY) then
976
966
  lastX = x
977
967
  lastY = y
978
968
  invoke(event, x, y)
@@ -7,6 +7,18 @@ import { UpgradeId } from "../../engine/object-data/entry/upgrade";
7
7
  interface Unit {
8
8
  handle: junit;
9
9
  }
10
+ export declare const enum PlayerAllianceType {
11
+ PASSIVE = 0,
12
+ RESCUABLE = 1,
13
+ HELP_REQUEST = 2,
14
+ HELP_RESPONSE = 3,
15
+ SHARED_XP = 4,
16
+ SHARED_SPELLS = 5,
17
+ SHARED_VISION = 6,
18
+ SHARED_VISION_FORCED = 7,
19
+ SHARED_CONTROL = 8,
20
+ SHARED_ADVANCED_CONTROL = 9
21
+ }
10
22
  export declare class Player extends Handle<jplayer> {
11
23
  static readonly all: Player[];
12
24
  static readonly local: Player;
@@ -42,6 +54,8 @@ export declare class Player extends Handle<jplayer> {
42
54
  forceUICancel(): void;
43
55
  isAllyOf(other: Player): boolean;
44
56
  isEnemyOf(other: Player): boolean;
57
+ setAlliance(other: Player, type: PlayerAllianceType, value: boolean): void;
58
+ getAlliance(other: Player, type: PlayerAllianceType): boolean;
45
59
  setAbilityAvailable(abilityId: number, available: boolean): void;
46
60
  getMaximumUpgradeLevel(upgradeId: UpgradeId): number;
47
61
  setMaximumUpgradeLevel(upgradeId: UpgradeId, maximumLevel: number): void;
@@ -50,6 +64,7 @@ export declare class Player extends Handle<jplayer> {
50
64
  setUpgradeLevel(upgradeId: UpgradeId, level: number): void;
51
65
  private static getEvent;
52
66
  private static getMouseEvent;
67
+ static get allianceChangedEvent(): Readonly<Record<PlayerAllianceType, Event<[Player]>>>;
53
68
  static get onLeave(): Event<[Player]>;
54
69
  static get onMouseDown(): Event<[Player, jmousebuttontype]>;
55
70
  static get onMouseUp(): Event<[Player, jmousebuttontype]>;
@@ -66,6 +81,7 @@ export declare class Player extends Handle<jplayer> {
66
81
  };
67
82
  };
68
83
  static get onChat(): Event<[player: Player, message: string]>;
84
+ static readonly colorChangedEvent: Event<[Player]>;
69
85
  static byId(id: number): Player | undefined;
70
86
  }
71
87
  export {};
@@ -1,7 +1,7 @@
1
1
  local ____lualib = require("lualib_bundle")
2
+ local __TS__New = ____lualib.__TS__New
2
3
  local __TS__Class = ____lualib.__TS__Class
3
4
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
- local __TS__New = ____lualib.__TS__New
5
5
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
6
6
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
7
7
  local ____exports = {}
@@ -23,14 +23,33 @@ local ____math = require("math")
23
23
  local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
24
24
  local ____player_2Dlocal_2Dhandle = require("engine.internal.misc.player-local-handle")
25
25
  local PLAYER_LOCAL_HANDLE = ____player_2Dlocal_2Dhandle.PLAYER_LOCAL_HANDLE
26
+ local ____lazy = require("utility.lazy")
27
+ local lazyRecord = ____lazy.lazyRecord
28
+ local getPlayerAlliance = GetPlayerAlliance
26
29
  local getPlayerColor = GetPlayerColor
27
30
  local getPlayerName = GetPlayerName
28
31
  local getPlayerTechCount = GetPlayerTechCount
29
32
  local getPlayerTechMaxAllowed = GetPlayerTechMaxAllowed
33
+ local getTriggerPlayer = GetTriggerPlayer
34
+ local setPlayerAlliance = SetPlayerAlliance
30
35
  local setPlayerTechMaxAllowed = SetPlayerTechMaxAllowed
31
36
  local setPlayerTechResearched = SetPlayerTechResearched
32
37
  local setPlayerAbilityAvailable = SetPlayerAbilityAvailable
38
+ local triggerRegisterPlayerAllianceChange = TriggerRegisterPlayerAllianceChange
33
39
  local playerNative = _G.Player
40
+ local nativeByPlayerAllianceType = {
41
+ [0] = ALLIANCE_PASSIVE,
42
+ [1] = ALLIANCE_RESCUABLE,
43
+ [2] = ALLIANCE_HELP_REQUEST,
44
+ [3] = ALLIANCE_HELP_RESPONSE,
45
+ [4] = ALLIANCE_SHARED_XP,
46
+ [5] = ALLIANCE_SHARED_SPELLS,
47
+ [6] = ALLIANCE_SHARED_VISION,
48
+ [7] = ALLIANCE_SHARED_VISION_FORCED,
49
+ [8] = ALLIANCE_SHARED_CONTROL,
50
+ [9] = ALLIANCE_SHARED_ADVANCED_CONTROL
51
+ }
52
+ local playerColorChangedEvent = __TS__New(Event)
34
53
  ____exports.Player = __TS__Class()
35
54
  local Player = ____exports.Player
36
55
  Player.name = "Player"
@@ -85,6 +104,12 @@ end
85
104
  function Player.prototype.isEnemyOf(self, other)
86
105
  return IsPlayerEnemy(self.handle, other.handle)
87
106
  end
107
+ function Player.prototype.setAlliance(self, other, ____type, value)
108
+ setPlayerAlliance(self.handle, other.handle, nativeByPlayerAllianceType[____type], value)
109
+ end
110
+ function Player.prototype.getAlliance(self, other, ____type)
111
+ return getPlayerAlliance(self.handle, other.handle, nativeByPlayerAllianceType[____type])
112
+ end
88
113
  function Player.prototype.setAbilityAvailable(self, abilityId, available)
89
114
  setPlayerAbilityAvailable(self.handle, abilityId, available)
90
115
  end
@@ -124,14 +149,11 @@ function Player.getMouseEvent(self, event, collector)
124
149
  self.events[eventId] = __TS__New(
125
150
  TriggerEvent,
126
151
  function(trigger)
127
- Timer:simple(
128
- 0,
129
- function()
130
- for ____, player in ipairs(____exports.Player.all) do
131
- TriggerRegisterPlayerEvent(trigger, player.handle, event)
132
- end
152
+ Timer:run(function()
153
+ for ____, player in ipairs(____exports.Player.all) do
154
+ TriggerRegisterPlayerEvent(trigger, player.handle, event)
133
155
  end
134
- )
156
+ end)
135
157
  end,
136
158
  collector or (function() return {} end)
137
159
  )
@@ -180,7 +202,7 @@ function Player.getKeyEvent(self, isDown)
180
202
  TriggerAddCondition(
181
203
  trigger,
182
204
  Condition(function()
183
- local player = ____exports.Player:of(GetTriggerPlayer())
205
+ local player = ____exports.Player:of(getTriggerPlayer())
184
206
  local key = BlzGetTriggerPlayerKey()
185
207
  local metaKey = BlzGetTriggerPlayerMetaKey()
186
208
  Event.invoke(event, player, key, metaKey)
@@ -279,6 +301,7 @@ __TS__SetDescriptor(
279
301
  end,
280
302
  set = function(self, color)
281
303
  SetPlayerColor(self.handle, color.handle)
304
+ Event.invoke(playerColorChangedEvent, self)
282
305
  end
283
306
  },
284
307
  true
@@ -369,13 +392,32 @@ __TS__SetDescriptor(
369
392
  end},
370
393
  true
371
394
  )
395
+ __TS__ObjectDefineProperty(
396
+ Player,
397
+ "allianceChangedEvent",
398
+ {get = function(self)
399
+ local event = lazyRecord(function(____type)
400
+ return __TS__New(
401
+ TriggerEvent,
402
+ function(trigger)
403
+ for ____, player in ipairs(____exports.Player.all) do
404
+ triggerRegisterPlayerAllianceChange(trigger, player.handle, nativeByPlayerAllianceType[____type])
405
+ end
406
+ end,
407
+ function() return ____exports.Player:of(getTriggerPlayer()) end
408
+ )
409
+ end)
410
+ rawset(self, "allianceChangedEvent", event)
411
+ return event
412
+ end}
413
+ )
372
414
  __TS__ObjectDefineProperty(
373
415
  Player,
374
416
  "onLeave",
375
417
  {get = function(self)
376
418
  return ____exports.Player:getEvent(
377
419
  EVENT_PLAYER_LEAVE,
378
- function() return ____exports.Player:of(GetTriggerPlayer()) end
420
+ function() return ____exports.Player:of(getTriggerPlayer()) end
379
421
  )
380
422
  end}
381
423
  )
@@ -385,7 +427,7 @@ __TS__ObjectDefineProperty(
385
427
  {get = function(self)
386
428
  return ____exports.Player:getMouseEvent(
387
429
  EVENT_PLAYER_MOUSE_DOWN,
388
- function() return ____exports.Player:of(GetTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
430
+ function() return ____exports.Player:of(getTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
389
431
  )
390
432
  end}
391
433
  )
@@ -395,7 +437,7 @@ __TS__ObjectDefineProperty(
395
437
  {get = function(self)
396
438
  return ____exports.Player:getMouseEvent(
397
439
  EVENT_PLAYER_MOUSE_UP,
398
- function() return ____exports.Player:of(GetTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
440
+ function() return ____exports.Player:of(getTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
399
441
  )
400
442
  end}
401
443
  )
@@ -405,7 +447,7 @@ __TS__ObjectDefineProperty(
405
447
  {get = function(self)
406
448
  return ____exports.Player:getMouseEvent(
407
449
  EVENT_PLAYER_MOUSE_MOVE,
408
- function() return ____exports.Player:of(GetTriggerPlayer()), vec2(
450
+ function() return ____exports.Player:of(getTriggerPlayer()), vec2(
409
451
  BlzGetTriggerPlayerMouseX(),
410
452
  BlzGetTriggerPlayerMouseY()
411
453
  ) end
@@ -441,10 +483,11 @@ __TS__ObjectDefineProperty(
441
483
  TriggerRegisterPlayerChatEvent(trigger, player.handle, "", false)
442
484
  end
443
485
  end,
444
- function() return ____exports.Player:of(GetTriggerPlayer()), GetEventPlayerChatString() end
486
+ function() return ____exports.Player:of(getTriggerPlayer()), GetEventPlayerChatString() end
445
487
  )
446
488
  rawset(self, "onChat", event)
447
489
  return event
448
490
  end}
449
491
  )
492
+ Player.colorChangedEvent = playerColorChangedEvent
450
493
  return ____exports
@@ -5,14 +5,16 @@ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
5
  local ____exports = {}
6
6
  local ____timer = require("core.types.timer")
7
7
  local Timer = ____timer.Timer
8
- local ____frame = require("core.types.frame")
9
- local FRAME_MAX_Y = ____frame.FRAME_MAX_Y
10
- local FRAME_MIN_Y = ____frame.FRAME_MIN_Y
11
- local getFrameMinXMaxX = ____frame.getFrameMinXMaxX
12
8
  local ____player_2Dlocal_2Dhandle = require("engine.internal.misc.player-local-handle")
13
9
  local PLAYER_LOCAL_HANDLE = ____player_2Dlocal_2Dhandle.PLAYER_LOCAL_HANDLE
14
10
  local ____preconditions = require("utility.preconditions")
15
11
  local check = ____preconditions.check
12
+ local ____frame_2Dcoordinates = require("engine.internal.misc.frame-coordinates")
13
+ local FRAME_MAX_Y = ____frame_2Dcoordinates.FRAME_MAX_Y
14
+ local FRAME_MIN_Y = ____frame_2Dcoordinates.FRAME_MIN_Y
15
+ local getFrameMinXMaxX = ____frame_2Dcoordinates.getFrameMinXMaxX
16
+ local ____get_2Dterrain_2Dz = require("engine.internal.misc.get-terrain-z")
17
+ local getTerrainZ = ____get_2Dterrain_2Dz.getTerrainZ
16
18
  local getHandleId = GetHandleId
17
19
  local setCameraField = SetCameraField
18
20
  local getCameraField = GetCameraField
@@ -26,6 +28,7 @@ local resetToGameCamera = ResetToGameCamera
26
28
  local cos = math.cos
27
29
  local deg = math.deg
28
30
  local sin = math.sin
31
+ local sqrt = math.sqrt
29
32
  local memoized = {}
30
33
  ____exports.PlayerCamera = __TS__Class()
31
34
  local PlayerCamera = ____exports.PlayerCamera
@@ -233,4 +236,45 @@ ____exports.worldCoordinatesToFrame = function(x, y, z)
233
236
  local frameY = 0.42625 - yCenterScreenShift + (cameraAngleOfAttackSinRotationCos * dx + cameraAngleOfAttackSinRotationSin * dy - cameraAngleOfAttackCos * dz) / xPrime
234
237
  return frameX, frameY, xPrime < 0 and frameX >= frameMinX and frameX <= frameMaxX and frameY >= FRAME_MIN_Y and frameY <= FRAME_MAX_Y
235
238
  end
239
+ ---
240
+ -- @internal For use by internal systems only.
241
+ ____exports.frameCoordinatesToWorld = function(x, y)
242
+ if not isCameraViewPrecalculated then
243
+ precalculateCameraView()
244
+ end
245
+ local a = (x - 0.4) * scaleFactor
246
+ local b = (0.42625 - yCenterScreenShift - y) * scaleFactor
247
+ local nx = 1 / sqrt(1 + a * a + b * b)
248
+ local ny = sqrt(1 - (1 + b * b) * nx * nx)
249
+ local nz = sqrt(1 - nx * nx - ny * ny)
250
+ if a > 0 then
251
+ ny = -ny
252
+ end
253
+ if b < 0 then
254
+ nz = -nz
255
+ end
256
+ local nxPrime = cameraAngleOfAttackCosRotationCos * nx - cameraRotationSin * ny + cameraAngleOfAttackSinRotationCos * nz
257
+ local nyPrime = cameraAngleOfAttackCosRotationSin * nx + cameraRotationCos * ny + cameraAngleOfAttackSinRotationSin * nz
258
+ local nzPrime = -cameraAngleOfAttackSin * nx + cameraAngleOfAttackCos * nz
259
+ local zGuess = getTerrainZ(cameraEyeX, cameraEyeY)
260
+ local xGuess = cameraEyeX + nxPrime * (cameraEyeZ - zGuess) / nzPrime
261
+ local yGuess = cameraEyeY + nyPrime * (cameraEyeZ - zGuess) / nzPrime
262
+ local zWorld = getTerrainZ(xGuess, yGuess)
263
+ local deltaZ = zWorld - zGuess
264
+ zGuess = zWorld
265
+ local zWorldOld = zWorld
266
+ local deltaZOld = deltaZ
267
+ local i = 0
268
+ while (deltaZ > 1 or deltaZ < -1) and i < 50 do
269
+ xGuess = cameraEyeX + nxPrime * (cameraEyeZ - zGuess) / nzPrime
270
+ yGuess = cameraEyeY + nyPrime * (cameraEyeZ - zGuess) / nzPrime
271
+ zWorld = getTerrainZ(xGuess, yGuess)
272
+ deltaZ = zWorld - zGuess
273
+ zGuess = (deltaZOld * zWorld - deltaZ * zWorldOld) / (deltaZOld - deltaZ)
274
+ zWorldOld = zWorld
275
+ deltaZOld = deltaZ
276
+ i = i + 1
277
+ end
278
+ return xGuess, yGuess, zWorld, i < 50
279
+ end
236
280
  return ____exports
@@ -1,10 +1,20 @@
1
1
  /** @noSelfInFile */
2
- export declare class TileCell implements Readonly<Vec2> {
2
+ import { AttributesHolder } from "../../attributes";
3
+ export declare class TileCell extends AttributesHolder implements Readonly<Vec2> {
3
4
  private readonly id;
4
5
  readonly x: number;
5
6
  readonly y: number;
6
7
  readonly z: undefined;
7
8
  protected constructor(id: number, x: number, y: number, z: undefined);
9
+ get up(): TileCell;
10
+ get down(): TileCell;
11
+ get left(): TileCell;
12
+ get right(): TileCell;
13
+ get terrainTypeId(): number;
14
+ set terrainTypeId(terrainTypeId: number);
15
+ get terrainVariance(): number;
16
+ set terrainVariance(terrainVariance: number);
17
+ randomizeTerrainVariance(): void;
8
18
  isInRangeOf(x: number, y: number, range: number): boolean;
9
19
  isInRangeOf(tileCell: TileCell, range: number): boolean;
10
20
  static getInRect(minX: number, minY: number, maxX: number, maxY: number): TileCell[];
@@ -1,7 +1,14 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
3
4
  local __TS__New = ____lualib.__TS__New
5
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
4
6
  local ____exports = {}
7
+ local ____attributes = require("attributes")
8
+ local AttributesHolder = ____attributes.AttributesHolder
9
+ local getTerrainType = GetTerrainType
10
+ local setTerrainType = SetTerrainType
11
+ local getTerrainVariance = GetTerrainVariance
5
12
  local abs = math.abs
6
13
  local ____type = math.type
7
14
  local ult = math.ult
@@ -9,13 +16,27 @@ local tileCellById = {}
9
16
  ____exports.TileCell = __TS__Class()
10
17
  local TileCell = ____exports.TileCell
11
18
  TileCell.name = "TileCell"
19
+ __TS__ClassExtends(TileCell, AttributesHolder)
12
20
  function TileCell.prototype.____constructor(self, id, x, y, z)
21
+ AttributesHolder.prototype.____constructor(self)
13
22
  self.id = id
14
23
  self.x = x
15
24
  self.y = y
16
25
  self.z = z
17
26
  tileCellById[id] = self
18
27
  end
28
+ function TileCell.prototype.randomizeTerrainVariance(self)
29
+ local x = self.x
30
+ local y = self.y
31
+ setTerrainType(
32
+ x,
33
+ y,
34
+ getTerrainType(x, y),
35
+ -1,
36
+ 1,
37
+ 1
38
+ )
39
+ end
19
40
  function TileCell.prototype.isInRangeOf(self, x, y, range)
20
41
  if range == nil then
21
42
  range = y
@@ -97,4 +118,80 @@ function TileCell.of(x, y)
97
118
  nil
98
119
  )
99
120
  end
121
+ __TS__SetDescriptor(
122
+ TileCell.prototype,
123
+ "up",
124
+ {get = function(self)
125
+ return ____exports.TileCell.of(self.x, self.y + 128)
126
+ end},
127
+ true
128
+ )
129
+ __TS__SetDescriptor(
130
+ TileCell.prototype,
131
+ "down",
132
+ {get = function(self)
133
+ return ____exports.TileCell.of(self.x, self.y - 128)
134
+ end},
135
+ true
136
+ )
137
+ __TS__SetDescriptor(
138
+ TileCell.prototype,
139
+ "left",
140
+ {get = function(self)
141
+ return ____exports.TileCell.of(self.x - 128, self.y)
142
+ end},
143
+ true
144
+ )
145
+ __TS__SetDescriptor(
146
+ TileCell.prototype,
147
+ "right",
148
+ {get = function(self)
149
+ return ____exports.TileCell.of(self.x + 128, self.y)
150
+ end},
151
+ true
152
+ )
153
+ __TS__SetDescriptor(
154
+ TileCell.prototype,
155
+ "terrainTypeId",
156
+ {
157
+ get = function(self)
158
+ return getTerrainType(self.x, self.y)
159
+ end,
160
+ set = function(self, terrainTypeId)
161
+ local x = self.x
162
+ local y = self.y
163
+ setTerrainType(
164
+ x,
165
+ y,
166
+ terrainTypeId,
167
+ getTerrainVariance(x, y),
168
+ 1,
169
+ 1
170
+ )
171
+ end
172
+ },
173
+ true
174
+ )
175
+ __TS__SetDescriptor(
176
+ TileCell.prototype,
177
+ "terrainVariance",
178
+ {
179
+ get = function(self)
180
+ return getTerrainVariance(self.x, self.y)
181
+ end,
182
+ set = function(self, terrainVariance)
183
+ local x = self.x
184
+ local y = self.y
185
+ setTerrainType(
186
+ x,
187
+ y,
188
+ getTerrainType(x, y),
189
+ terrainVariance,
190
+ 1,
191
+ 1
192
+ )
193
+ end
194
+ },
195
+ true
196
+ )
100
197
  return ____exports
@@ -1,6 +1,7 @@
1
1
  /** @noSelfInFile */
2
2
  import { Event } from "../../event";
3
3
  import { AbstractDestroyable, Destructor } from "../../destroyable";
4
+ import { CallbackId } from "../../utility/callback-array";
4
5
  declare const enum TimerPropertyKey {
5
6
  HANDLE = 0,
6
7
  DESTROY_ON_EXPIRATION = 1,
@@ -22,8 +23,8 @@ export declare class Timer extends AbstractDestroyable {
22
23
  pause(): void;
23
24
  resume(): void;
24
25
  static create(): Timer;
25
- static run<T, K extends KeysOfType<T, (this: T, ...args: any) => any>>(object: T, key: K, ...parameters: T[K] extends (this: T, ...args: any) => any ? Parameters<T[K]> : never): void;
26
- static run<Args extends any[]>(callback: (this: void, ...args: Args) => void, ...args: Args): void;
26
+ static run<T, K extends KeysOfType<T, (this: T, ...args: any) => any>>(object: T, key: K, ...parameters: T[K] extends (this: T, ...args: any) => any ? Parameters<T[K]> : never): CallbackId;
27
+ static run<Args extends any[]>(callback: (this: void, ...args: Args) => void, ...args: Args): CallbackId;
27
28
  static simple<Args extends any[]>(timeout: number, callback: (...args: Args) => void, ...args: Args): Timer;
28
29
  static periodic<Args extends any[]>(period: number, callback: (this: void, timer: Timer, ...args: Args) => void, ...args: Args): Timer;
29
30
  static counted(period: number, count: number, callback: (this: void, timer: Timer) => void): Timer;
@@ -12,6 +12,11 @@ local ____objectPool = require("util.objectPool")
12
12
  local ObjectPool = ____objectPool.ObjectPool
13
13
  local ____destroyable = require("destroyable")
14
14
  local AbstractDestroyable = ____destroyable.AbstractDestroyable
15
+ local ____callback_2Darray = require("utility.callback-array")
16
+ local addCallback = ____callback_2Darray.addCallback
17
+ local callbackArray = ____callback_2Darray.callbackArray
18
+ local consumeCallback = ____callback_2Darray.consumeCallback
19
+ local consumeCallbacks = ____callback_2Darray.consumeCallbacks
15
20
  local createTimer = CreateTimer
16
21
  local timerStart = TimerStart
17
22
  local pauseTimer = PauseTimer
@@ -49,6 +54,17 @@ local function timerSafeCall()
49
54
  end
50
55
  end
51
56
  end
57
+ local zeroTimerScheduled = false
58
+ local zeroTimerCallbacks = callbackArray()
59
+ ---
60
+ -- @internal For use by internal systems only.
61
+ ____exports.consumeZeroTimerCallback = function(id)
62
+ consumeCallback(zeroTimerCallbacks, id)
63
+ end
64
+ local function invokeZeroTimerCallbacks()
65
+ zeroTimerScheduled = false
66
+ consumeCallbacks(zeroTimerCallbacks)
67
+ end
52
68
  ____exports.Timer = __TS__Class()
53
69
  local Timer = ____exports.Timer
54
70
  Timer.name = "Timer"
@@ -83,10 +99,14 @@ function Timer.create(self)
83
99
  return __TS__New(____exports.Timer)
84
100
  end
85
101
  function Timer.run(self, objectOrCallback, keyOrFirstArg, ...)
102
+ if not zeroTimerScheduled then
103
+ zeroTimerScheduled = true
104
+ ____exports.Timer:simple(0, invokeZeroTimerCallbacks)
105
+ end
86
106
  if ____type(objectOrCallback) == "function" then
87
- ____exports.Timer:simple(0, objectOrCallback, keyOrFirstArg, ...)
107
+ return addCallback(zeroTimerCallbacks, objectOrCallback, keyOrFirstArg, ...)
88
108
  else
89
- ____exports.Timer:simple(0, objectOrCallback[keyOrFirstArg], objectOrCallback, ...)
109
+ return addCallback(zeroTimerCallbacks, objectOrCallback[keyOrFirstArg], objectOrCallback, ...)
90
110
  end
91
111
  end
92
112
  function Timer.simple(self, timeout, callback, ...)
package/decl/native.d.ts CHANGED
@@ -5259,8 +5259,8 @@ declare function BlzRemoveAbilityStringLevelArrayField(
5259
5259
  level: number,
5260
5260
  value: string,
5261
5261
  ): boolean
5262
- declare function BlzGetItemAbilityByIndex(whichItem: jitem, index: number): jability | null
5263
- declare function BlzGetItemAbility(whichItem: jitem, abilCode: number): jability | null
5262
+ declare function BlzGetItemAbilityByIndex(whichItem: jitem, index: number): jability | undefined
5263
+ declare function BlzGetItemAbility(whichItem: jitem, abilCode: number): jability | undefined
5264
5264
  declare function BlzItemAddAbility(whichItem: jitem, abilCode: number): boolean
5265
5265
  declare function BlzGetItemBooleanField(whichItem: jitem, whichField: jitembooleanfield): boolean
5266
5266
  declare function BlzGetItemIntegerField(whichItem: jitem, whichField: jitemintegerfield): number
package/destroyable.d.ts CHANGED
@@ -10,6 +10,7 @@ export interface Destroyable {
10
10
  destroy(): void;
11
11
  }
12
12
  export declare abstract class AbstractDestroyable implements Destroyable {
13
+ get isDestroyed(): boolean;
13
14
  /**
14
15
  * An overriding function should always call the super one at the end of it,
15
16
  * in the following manner: `return super.onDestroy()`.
package/destroyable.lua CHANGED
@@ -1,6 +1,7 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
3
  local __TS__New = ____lualib.__TS__New
4
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
4
5
  local ____exports = {}
5
6
  local ____exception = require("exception")
6
7
  local IllegalStateException = ____exception.IllegalStateException
@@ -28,4 +29,12 @@ function AbstractDestroyable.prototype.destroy(self)
28
29
  end
29
30
  return true
30
31
  end
32
+ __TS__SetDescriptor(
33
+ AbstractDestroyable.prototype,
34
+ "isDestroyed",
35
+ {get = function(self)
36
+ return stateByDestroyable[self] ~= nil
37
+ end},
38
+ true
39
+ )
31
40
  return ____exports