warscript 0.0.1-dev.90f1d49 → 0.0.1-dev.91a4dce

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 (93) hide show
  1. package/attributes.d.ts +1 -2
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +24 -21
  4. package/core/types/player.d.ts +15 -0
  5. package/core/types/player.lua +40 -7
  6. package/core/types/playerCamera.d.ts +2 -0
  7. package/core/types/playerCamera.lua +123 -5
  8. package/core/types/tileCell.d.ts +9 -0
  9. package/core/types/tileCell.lua +92 -0
  10. package/core/types/timer.d.ts +3 -1
  11. package/core/types/timer.lua +27 -2
  12. package/decl/native.d.ts +6 -4
  13. package/engine/behavior.d.ts +5 -0
  14. package/engine/behavior.lua +106 -27
  15. package/engine/behaviour/ability/apply-buff.lua +1 -1
  16. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  17. package/engine/behaviour/ability/emulate-impact.lua +11 -3
  18. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  19. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  20. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  21. package/engine/behaviour/ability/restore-mana.lua +6 -6
  22. package/engine/behaviour/ability.lua +8 -17
  23. package/engine/behaviour/unit/stun-immunity.d.ts +7 -3
  24. package/engine/behaviour/unit/stun-immunity.lua +52 -27
  25. package/engine/behaviour/unit.d.ts +33 -1
  26. package/engine/behaviour/unit.lua +190 -4
  27. package/engine/buff.d.ts +2 -4
  28. package/engine/buff.lua +68 -83
  29. package/engine/internal/ability.d.ts +7 -1
  30. package/engine/internal/ability.lua +49 -9
  31. package/engine/internal/item/ability.lua +63 -11
  32. package/engine/internal/item+owner.lua +12 -6
  33. package/engine/internal/item.d.ts +16 -16
  34. package/engine/internal/item.lua +135 -49
  35. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  36. package/engine/internal/misc/frame-coordinates.lua +21 -0
  37. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  38. package/engine/internal/misc/get-terrain-z.lua +11 -0
  39. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  40. package/engine/internal/misc/player-local-handle.lua +5 -0
  41. package/engine/internal/unit/ability.d.ts +35 -0
  42. package/engine/internal/unit/ability.lua +98 -9
  43. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  44. package/engine/internal/unit/allowed-targets.lua +9 -1
  45. package/engine/internal/unit/main-selected.lua +12 -27
  46. package/engine/internal/unit/order.d.ts +20 -0
  47. package/engine/internal/unit/order.lua +136 -0
  48. package/engine/internal/unit+ability.lua +10 -1
  49. package/engine/internal/unit-missile-launch.lua +42 -14
  50. package/engine/internal/unit.d.ts +16 -7
  51. package/engine/internal/unit.lua +182 -86
  52. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  53. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  54. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  55. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  56. package/engine/object-data/entry/ability-type.lua +5 -4
  57. package/engine/object-data/entry/unit-type.d.ts +11 -2
  58. package/engine/object-data/entry/unit-type.lua +59 -1
  59. package/engine/object-field/ability.d.ts +3 -3
  60. package/engine/object-field/ability.lua +7 -6
  61. package/engine/object-field/unit.d.ts +11 -0
  62. package/engine/object-field/unit.lua +34 -0
  63. package/engine/object-field.d.ts +8 -5
  64. package/engine/object-field.lua +90 -76
  65. package/engine/random.d.ts +9 -0
  66. package/engine/random.lua +13 -0
  67. package/engine/standard/fields/unit.d.ts +4 -0
  68. package/engine/standard/fields/unit.lua +7 -0
  69. package/engine/synchronization.d.ts +11 -0
  70. package/engine/synchronization.lua +77 -0
  71. package/engine/text-tag.d.ts +36 -2
  72. package/engine/text-tag.lua +249 -10
  73. package/engine/unit.d.ts +1 -0
  74. package/engine/unit.lua +1 -0
  75. package/net/socket.lua +1 -1
  76. package/objutil/buff.lua +1 -1
  77. package/package.json +2 -2
  78. package/patch-lualib.lua +1 -1
  79. package/utility/arrays.d.ts +1 -0
  80. package/utility/arrays.lua +8 -0
  81. package/utility/callback-array.d.ts +17 -0
  82. package/utility/callback-array.lua +61 -0
  83. package/utility/functions.d.ts +7 -0
  84. package/utility/functions.lua +12 -0
  85. package/utility/linked-set.d.ts +1 -0
  86. package/utility/linked-set.lua +19 -1
  87. package/utility/lua-maps.d.ts +12 -2
  88. package/utility/lua-maps.lua +37 -2
  89. package/utility/lua-sets.d.ts +1 -0
  90. package/utility/lua-sets.lua +4 -0
  91. package/utility/types.d.ts +3 -0
  92. package/core/types/order.d.ts +0 -25
  93. package/core/types/order.lua +0 -55
package/attributes.d.ts CHANGED
@@ -7,13 +7,12 @@ export type Attribute<T> = {
7
7
  } & symbol;
8
8
  export declare const attribute: <T>() => Attribute<T>;
9
9
  export declare const isAttribute: (value: unknown) => value is Attribute<unknown>;
10
- export declare const getAttribute: (<T>(object: AttributesHolder, attribute: Attribute<T>) => T | undefined) & LuaExtension<"TableGet">;
11
- export declare const setAttribute: (<T>(object: AttributesHolder, attribute: Attribute<T>, value: T | undefined) => void) & LuaExtension<"TableSet">;
12
10
  export declare namespace Attribute {
13
11
  const create: <T>() => Attribute<T>;
14
12
  }
15
13
  export declare class AttributesHolder {
16
14
  readonly get: (<T>(attribute: Attribute<T>) => T | undefined) & LuaExtension<"TableGetMethod">;
17
15
  readonly set: (<T>(attribute: Attribute<T>, value: T | undefined) => void) & LuaExtension<"TableSetMethod">;
16
+ getOrPut<T>(attribute: Attribute<T>, defaultValue: () => T): T;
18
17
  }
19
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,13 +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 getCameraTargetPositionX = GetCameraTargetPositionX
24
- local getCameraTargetPositionY = GetCameraTargetPositionY
25
32
  local ____rawget = _G.rawget
26
33
  local rawset = _G.rawset
27
34
  local invoke = Event.invoke
@@ -344,27 +351,21 @@ __TS__ObjectDefineProperty(
344
351
  Frame,
345
352
  "minX",
346
353
  {get = function(self)
347
- local w = BlzGetLocalClientWidth()
348
- local h = BlzGetLocalClientHeight()
349
- local width4by3 = (w - h / 600 * 800) / 2
350
- local pxtodpi = 0.6 / h
351
- return -width4by3 * pxtodpi
354
+ local minX = getFrameMinXMaxX()
355
+ return minX
352
356
  end}
353
357
  )
354
358
  __TS__ObjectDefineProperty(
355
359
  Frame,
356
360
  "maxX",
357
361
  {get = function(self)
358
- local w = BlzGetLocalClientWidth()
359
- local h = BlzGetLocalClientHeight()
360
- local width4by3 = (w - h / 600 * 800) / 2
361
- local pxtodpi = 0.6 / h
362
- return (-width4by3 + w) * pxtodpi
362
+ local ____, maxX = getFrameMinXMaxX()
363
+ return maxX
363
364
  end}
364
365
  )
365
366
  Frame.centerX = 0.4
366
- Frame.minY = 0
367
- Frame.maxY = 0.6
367
+ Frame.minY = FRAME_MIN_Y
368
+ Frame.maxY = FRAME_MAX_Y
368
369
  Frame.centerY = 0.3
369
370
  __TS__SetDescriptor(
370
371
  Frame.prototype,
@@ -938,16 +939,19 @@ __TS__ObjectDefineProperty(
938
939
  local event = __TS__New(Event)
939
940
  local syncX = 0
940
941
  local syncY = 0
941
- local syncCamX = getCameraTargetPositionX()
942
- local syncCamY = getCameraTargetPositionY()
942
+ local syncFrameX = 0
943
+ local syncFrameY = 0
943
944
  local lastX = syncX
944
945
  local lastY = syncY
945
946
  self.onMouseMove:addListener(function(player, x, y)
946
947
  if player.isLocal then
947
948
  syncX = x
948
949
  syncY = y
949
- syncCamX = getCameraTargetPositionX()
950
- syncCamY = getCameraTargetPositionY()
950
+ syncFrameX, syncFrameY = worldCoordinatesToFrame(
951
+ x,
952
+ y,
953
+ getTerrainZ(x, y)
954
+ )
951
955
  lastX = x
952
956
  lastY = y
953
957
  invoke(event, x, y)
@@ -957,9 +961,8 @@ __TS__ObjectDefineProperty(
957
961
  if syncX == 0 and syncY == 0 then
958
962
  return
959
963
  end
960
- local x = syncX + (getCameraTargetPositionX() - syncCamX)
961
- local y = syncY + (getCameraTargetPositionY() - syncCamY)
962
- 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
963
966
  lastX = x
964
967
  lastY = y
965
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(): 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]>;
@@ -21,14 +21,31 @@ local ____exception = require("exception")
21
21
  local IllegalStateException = ____exception.IllegalStateException
22
22
  local ____math = require("math")
23
23
  local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
24
+ local ____player_2Dlocal_2Dhandle = require("engine.internal.misc.player-local-handle")
25
+ local PLAYER_LOCAL_HANDLE = ____player_2Dlocal_2Dhandle.PLAYER_LOCAL_HANDLE
26
+ local getPlayerAlliance = GetPlayerAlliance
24
27
  local getPlayerColor = GetPlayerColor
25
28
  local getPlayerName = GetPlayerName
26
29
  local getPlayerTechCount = GetPlayerTechCount
27
30
  local getPlayerTechMaxAllowed = GetPlayerTechMaxAllowed
31
+ local getTriggerPlayer = GetTriggerPlayer
32
+ local setPlayerAlliance = SetPlayerAlliance
28
33
  local setPlayerTechMaxAllowed = SetPlayerTechMaxAllowed
29
34
  local setPlayerTechResearched = SetPlayerTechResearched
30
35
  local setPlayerAbilityAvailable = SetPlayerAbilityAvailable
31
36
  local playerNative = _G.Player
37
+ local nativeByPlayerAllianceType = {
38
+ [0] = ALLIANCE_PASSIVE,
39
+ [1] = ALLIANCE_RESCUABLE,
40
+ [2] = ALLIANCE_HELP_REQUEST,
41
+ [3] = ALLIANCE_HELP_RESPONSE,
42
+ [4] = ALLIANCE_SHARED_XP,
43
+ [5] = ALLIANCE_SHARED_SPELLS,
44
+ [6] = ALLIANCE_SHARED_VISION,
45
+ [7] = ALLIANCE_SHARED_VISION_FORCED,
46
+ [8] = ALLIANCE_SHARED_CONTROL,
47
+ [9] = ALLIANCE_SHARED_ADVANCED_CONTROL
48
+ }
32
49
  ____exports.Player = __TS__Class()
33
50
  local Player = ____exports.Player
34
51
  Player.name = "Player"
@@ -83,6 +100,12 @@ end
83
100
  function Player.prototype.isEnemyOf(self, other)
84
101
  return IsPlayerEnemy(self.handle, other.handle)
85
102
  end
103
+ function Player.prototype.setAlliance(self, other, ____type, value)
104
+ setPlayerAlliance(self.handle, other.handle, nativeByPlayerAllianceType[____type], value)
105
+ end
106
+ function Player.prototype.getAlliance(self, other, ____type)
107
+ return getPlayerAlliance(self.handle, other.handle, nativeByPlayerAllianceType[____type])
108
+ end
86
109
  function Player.prototype.setAbilityAvailable(self, abilityId, available)
87
110
  setPlayerAbilityAvailable(self.handle, abilityId, available)
88
111
  end
@@ -178,7 +201,7 @@ function Player.getKeyEvent(self, isDown)
178
201
  TriggerAddCondition(
179
202
  trigger,
180
203
  Condition(function()
181
- local player = ____exports.Player:of(GetTriggerPlayer())
204
+ local player = ____exports.Player:of(getTriggerPlayer())
182
205
  local key = BlzGetTriggerPlayerKey()
183
206
  local metaKey = BlzGetTriggerPlayerMetaKey()
184
207
  Event.invoke(event, player, key, metaKey)
@@ -249,7 +272,7 @@ Player.all = (function()
249
272
  end
250
273
  return all
251
274
  end)()
252
- Player["local"] = ____exports.Player:of(GetLocalPlayer())
275
+ Player["local"] = ____exports.Player:of(PLAYER_LOCAL_HANDLE)
253
276
  Player.neutralPassive = ____exports.Player.all[PLAYER_NEUTRAL_PASSIVE + 1]
254
277
  Player.neutralAggressive = ____exports.Player.all[PLAYER_NEUTRAL_AGGRESSIVE + 1]
255
278
  Player.neutralVictim = ____exports.Player.all[bj_PLAYER_NEUTRAL_VICTIM + 1]
@@ -367,13 +390,23 @@ __TS__SetDescriptor(
367
390
  end},
368
391
  true
369
392
  )
393
+ __TS__ObjectDefineProperty(
394
+ Player,
395
+ "allianceChangedEvent",
396
+ {get = function(self)
397
+ return ____exports.Player:getEvent(
398
+ EVENT_PLAYER_ALLIANCE_CHANGED,
399
+ function() return ____exports.Player:of(getTriggerPlayer()) end
400
+ )
401
+ end}
402
+ )
370
403
  __TS__ObjectDefineProperty(
371
404
  Player,
372
405
  "onLeave",
373
406
  {get = function(self)
374
407
  return ____exports.Player:getEvent(
375
408
  EVENT_PLAYER_LEAVE,
376
- function() return ____exports.Player:of(GetTriggerPlayer()) end
409
+ function() return ____exports.Player:of(getTriggerPlayer()) end
377
410
  )
378
411
  end}
379
412
  )
@@ -383,7 +416,7 @@ __TS__ObjectDefineProperty(
383
416
  {get = function(self)
384
417
  return ____exports.Player:getMouseEvent(
385
418
  EVENT_PLAYER_MOUSE_DOWN,
386
- function() return ____exports.Player:of(GetTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
419
+ function() return ____exports.Player:of(getTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
387
420
  )
388
421
  end}
389
422
  )
@@ -393,7 +426,7 @@ __TS__ObjectDefineProperty(
393
426
  {get = function(self)
394
427
  return ____exports.Player:getMouseEvent(
395
428
  EVENT_PLAYER_MOUSE_UP,
396
- function() return ____exports.Player:of(GetTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
429
+ function() return ____exports.Player:of(getTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
397
430
  )
398
431
  end}
399
432
  )
@@ -403,7 +436,7 @@ __TS__ObjectDefineProperty(
403
436
  {get = function(self)
404
437
  return ____exports.Player:getMouseEvent(
405
438
  EVENT_PLAYER_MOUSE_MOVE,
406
- function() return ____exports.Player:of(GetTriggerPlayer()), vec2(
439
+ function() return ____exports.Player:of(getTriggerPlayer()), vec2(
407
440
  BlzGetTriggerPlayerMouseX(),
408
441
  BlzGetTriggerPlayerMouseY()
409
442
  ) end
@@ -439,7 +472,7 @@ __TS__ObjectDefineProperty(
439
472
  TriggerRegisterPlayerChatEvent(trigger, player.handle, "", false)
440
473
  end
441
474
  end,
442
- function() return ____exports.Player:of(GetTriggerPlayer()), GetEventPlayerChatString() end
475
+ function() return ____exports.Player:of(getTriggerPlayer()), GetEventPlayerChatString() end
443
476
  )
444
477
  rawset(self, "onChat", event)
445
478
  return event
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
+ import type { Unit } from "../../engine/internal/unit";
2
3
  export declare class PlayerCamera {
3
4
  private readonly player;
4
5
  private readonly isLocal;
@@ -28,5 +29,6 @@ export declare class PlayerCamera {
28
29
  get roll(): number;
29
30
  set roll(v: number);
30
31
  reset(): void;
32
+ static isUnitInView(unit: Unit): boolean;
31
33
  static of(player: jplayer): PlayerCamera;
32
34
  }
@@ -3,33 +3,52 @@ local __TS__Class = ____lualib.__TS__Class
3
3
  local __TS__New = ____lualib.__TS__New
4
4
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
5
  local ____exports = {}
6
+ local ____timer = require("core.types.timer")
7
+ local Timer = ____timer.Timer
8
+ local ____player_2Dlocal_2Dhandle = require("engine.internal.misc.player-local-handle")
9
+ local PLAYER_LOCAL_HANDLE = ____player_2Dlocal_2Dhandle.PLAYER_LOCAL_HANDLE
10
+ local ____preconditions = require("utility.preconditions")
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
6
18
  local getHandleId = GetHandleId
7
19
  local setCameraField = SetCameraField
8
20
  local getCameraField = GetCameraField
9
21
  local setCameraPosition = SetCameraPosition
22
+ local getCameraEyePositionX = GetCameraEyePositionX
23
+ local getCameraEyePositionY = GetCameraEyePositionY
24
+ local getCameraEyePositionZ = GetCameraEyePositionZ
10
25
  local getCameraTargetPositionX = GetCameraTargetPositionX
11
26
  local getCameraTargetPositionY = GetCameraTargetPositionY
12
27
  local resetToGameCamera = ResetToGameCamera
28
+ local cos = math.cos
13
29
  local deg = math.deg
14
- local localPlayer = GetLocalPlayer()
30
+ local sin = math.sin
31
+ local sqrt = math.sqrt
15
32
  local memoized = {}
16
33
  ____exports.PlayerCamera = __TS__Class()
17
34
  local PlayerCamera = ____exports.PlayerCamera
18
35
  PlayerCamera.name = "PlayerCamera"
19
36
  function PlayerCamera.prototype.____constructor(self, player)
20
37
  local id = getHandleId(player)
21
- if memoized[id] then
22
- error("Double-constructor run player camera!")
23
- end
38
+ check(memoized[id] == nil)
24
39
  memoized[id] = self
25
40
  self.player = player
26
- self.isLocal = player == localPlayer
41
+ self.isLocal = player == PLAYER_LOCAL_HANDLE
27
42
  end
28
43
  function PlayerCamera.prototype.reset(self)
29
44
  if self.isLocal then
30
45
  resetToGameCamera(0)
31
46
  end
32
47
  end
48
+ function PlayerCamera.isUnitInView(self, unit)
49
+ local ____, ____, isInView = ____exports.worldCoordinatesToFrame(unit.x, unit.y, unit.z)
50
+ return isInView
51
+ end
33
52
  function PlayerCamera.of(self, player)
34
53
  return memoized[getHandleId(player)] or __TS__New(____exports.PlayerCamera, player)
35
54
  end
@@ -159,4 +178,103 @@ __TS__SetDescriptor(
159
178
  },
160
179
  true
161
180
  )
181
+ local cameraEyeX = 0
182
+ local cameraEyeY = 0
183
+ local cameraEyeZ = 0
184
+ local cameraAngleOfAttack = 0
185
+ local cameraAngleOfAttackCos = 0
186
+ local cameraAngleOfAttackSin = 0
187
+ local cameraRotation = 0
188
+ local cameraRotationCos = 0
189
+ local cameraRotationSin = 0
190
+ local cameraAngleOfAttackCosRotationCos = 0
191
+ local cameraAngleOfAttackCosRotationSin = 0
192
+ local cameraAngleOfAttackSinRotationCos = 0
193
+ local cameraAngleOfAttackSinRotationSin = 0
194
+ local yCenterScreenShift = 0
195
+ local scaleFactor = 0
196
+ local frameMinX = 0
197
+ local frameMaxX = 0
198
+ local isCameraViewPrecalculated = false
199
+ local function precalculateCameraView()
200
+ cameraEyeX = getCameraEyePositionX()
201
+ cameraEyeY = getCameraEyePositionY()
202
+ cameraEyeZ = getCameraEyePositionZ()
203
+ cameraAngleOfAttack = getCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK)
204
+ cameraAngleOfAttackCos = cos(cameraAngleOfAttack)
205
+ cameraAngleOfAttackSin = sin(cameraAngleOfAttack)
206
+ cameraRotation = getCameraField(CAMERA_FIELD_ROTATION)
207
+ cameraRotationCos = cos(cameraRotation)
208
+ cameraRotationSin = sin(cameraRotation)
209
+ cameraAngleOfAttackCosRotationCos = cameraAngleOfAttackCos * cameraRotationCos
210
+ cameraAngleOfAttackCosRotationSin = cameraAngleOfAttackCos * cameraRotationSin
211
+ cameraAngleOfAttackSinRotationCos = cameraAngleOfAttackSin * cameraRotationCos
212
+ cameraAngleOfAttackSinRotationSin = cameraAngleOfAttackSin * cameraRotationSin
213
+ yCenterScreenShift = 0.1284 * cameraAngleOfAttackCos
214
+ local cameraFieldOfView = getCameraField(CAMERA_FIELD_FIELD_OF_VIEW)
215
+ scaleFactor = 0.0524 * cameraFieldOfView ^ 3 - 0.0283 * cameraFieldOfView ^ 2 + 1.061 * cameraFieldOfView
216
+ frameMinX, frameMaxX = getFrameMinXMaxX()
217
+ isCameraViewPrecalculated = true
218
+ end
219
+ Timer.onPeriod[1 / 64]:addListener(
220
+ 4,
221
+ function()
222
+ isCameraViewPrecalculated = false
223
+ end
224
+ )
225
+ ---
226
+ -- @internal For use by internal systems only.
227
+ ____exports.worldCoordinatesToFrame = function(x, y, z)
228
+ if not isCameraViewPrecalculated then
229
+ precalculateCameraView()
230
+ end
231
+ local dx = x - cameraEyeX
232
+ local dy = y - cameraEyeY
233
+ local dz = z - cameraEyeZ
234
+ local xPrime = scaleFactor * (-cameraAngleOfAttackCosRotationCos * dx - cameraAngleOfAttackCosRotationSin * dy - cameraAngleOfAttackSin * dz)
235
+ local frameX = 0.4 + (cameraRotationCos * dy - cameraRotationSin * dx) / xPrime
236
+ local frameY = 0.42625 - yCenterScreenShift + (cameraAngleOfAttackSinRotationCos * dx + cameraAngleOfAttackSinRotationSin * dy - cameraAngleOfAttackCos * dz) / xPrime
237
+ return frameX, frameY, xPrime < 0 and frameX >= frameMinX and frameX <= frameMaxX and frameY >= FRAME_MIN_Y and frameY <= FRAME_MAX_Y
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
162
280
  return ____exports
@@ -5,6 +5,15 @@ export declare class TileCell implements Readonly<Vec2> {
5
5
  readonly y: number;
6
6
  readonly z: undefined;
7
7
  protected constructor(id: number, x: number, y: number, z: undefined);
8
+ get up(): TileCell;
9
+ get down(): TileCell;
10
+ get left(): TileCell;
11
+ get right(): TileCell;
12
+ get terrainTypeId(): number;
13
+ set terrainTypeId(terrainTypeId: number);
14
+ get terrainVariance(): number;
15
+ set terrainVariance(terrainVariance: number);
16
+ randomizeTerrainVariance(): void;
8
17
  isInRangeOf(x: number, y: number, range: number): boolean;
9
18
  isInRangeOf(tileCell: TileCell, range: number): boolean;
10
19
  static getInRect(minX: number, minY: number, maxX: number, maxY: number): TileCell[];
@@ -1,7 +1,11 @@
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 = {}
6
+ local getTerrainType = GetTerrainType
7
+ local setTerrainType = SetTerrainType
8
+ local getTerrainVariance = GetTerrainVariance
5
9
  local abs = math.abs
6
10
  local ____type = math.type
7
11
  local ult = math.ult
@@ -16,6 +20,18 @@ function TileCell.prototype.____constructor(self, id, x, y, z)
16
20
  self.z = z
17
21
  tileCellById[id] = self
18
22
  end
23
+ function TileCell.prototype.randomizeTerrainVariance(self)
24
+ local x = self.x
25
+ local y = self.y
26
+ setTerrainType(
27
+ x,
28
+ y,
29
+ getTerrainType(x, y),
30
+ -1,
31
+ 1,
32
+ 1
33
+ )
34
+ end
19
35
  function TileCell.prototype.isInRangeOf(self, x, y, range)
20
36
  if range == nil then
21
37
  range = y
@@ -97,4 +113,80 @@ function TileCell.of(x, y)
97
113
  nil
98
114
  )
99
115
  end
116
+ __TS__SetDescriptor(
117
+ TileCell.prototype,
118
+ "up",
119
+ {get = function(self)
120
+ return ____exports.TileCell.of(self.x, self.y + 128)
121
+ end},
122
+ true
123
+ )
124
+ __TS__SetDescriptor(
125
+ TileCell.prototype,
126
+ "down",
127
+ {get = function(self)
128
+ return ____exports.TileCell.of(self.x, self.y - 128)
129
+ end},
130
+ true
131
+ )
132
+ __TS__SetDescriptor(
133
+ TileCell.prototype,
134
+ "left",
135
+ {get = function(self)
136
+ return ____exports.TileCell.of(self.x - 128, self.y)
137
+ end},
138
+ true
139
+ )
140
+ __TS__SetDescriptor(
141
+ TileCell.prototype,
142
+ "right",
143
+ {get = function(self)
144
+ return ____exports.TileCell.of(self.x + 128, self.y)
145
+ end},
146
+ true
147
+ )
148
+ __TS__SetDescriptor(
149
+ TileCell.prototype,
150
+ "terrainTypeId",
151
+ {
152
+ get = function(self)
153
+ return getTerrainType(self.x, self.y)
154
+ end,
155
+ set = function(self, terrainTypeId)
156
+ local x = self.x
157
+ local y = self.y
158
+ setTerrainType(
159
+ x,
160
+ y,
161
+ terrainTypeId,
162
+ getTerrainVariance(x, y),
163
+ 1,
164
+ 1
165
+ )
166
+ end
167
+ },
168
+ true
169
+ )
170
+ __TS__SetDescriptor(
171
+ TileCell.prototype,
172
+ "terrainVariance",
173
+ {
174
+ get = function(self)
175
+ return getTerrainVariance(self.x, self.y)
176
+ end,
177
+ set = function(self, terrainVariance)
178
+ local x = self.x
179
+ local y = self.y
180
+ setTerrainType(
181
+ x,
182
+ y,
183
+ getTerrainType(x, y),
184
+ terrainVariance,
185
+ 1,
186
+ 1
187
+ )
188
+ end
189
+ },
190
+ true
191
+ )
100
192
  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,7 +23,8 @@ export declare class Timer extends AbstractDestroyable {
22
23
  pause(): void;
23
24
  resume(): void;
24
25
  static create(): Timer;
25
- static run<Args extends any[]>(callback: (...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;
26
28
  static simple<Args extends any[]>(timeout: number, callback: (...args: Args) => void, ...args: Args): Timer;
27
29
  static periodic<Args extends any[]>(period: number, callback: (this: void, timer: Timer, ...args: Args) => void, ...args: Args): Timer;
28
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
@@ -24,6 +29,7 @@ local getHandleId = GetHandleId
24
29
  local ____pcall = _G.pcall
25
30
  local ____print = _G.print
26
31
  local select = _G.select
32
+ local ____type = _G.type
27
33
  local safeCall = warpack.safeCall
28
34
  local corunning = coroutine.running
29
35
  local coresume = coroutine.resume
@@ -48,6 +54,17 @@ local function timerSafeCall()
48
54
  end
49
55
  end
50
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
51
68
  ____exports.Timer = __TS__Class()
52
69
  local Timer = ____exports.Timer
53
70
  Timer.name = "Timer"
@@ -81,8 +98,16 @@ end
81
98
  function Timer.create(self)
82
99
  return __TS__New(____exports.Timer)
83
100
  end
84
- function Timer.run(self, callback, ...)
85
- ____exports.Timer:simple(0, callback, ...)
101
+ function Timer.run(self, objectOrCallback, keyOrFirstArg, ...)
102
+ if not zeroTimerScheduled then
103
+ zeroTimerScheduled = true
104
+ ____exports.Timer:simple(0, invokeZeroTimerCallbacks)
105
+ end
106
+ if ____type(objectOrCallback) == "function" then
107
+ return addCallback(zeroTimerCallbacks, objectOrCallback, keyOrFirstArg, ...)
108
+ else
109
+ return addCallback(zeroTimerCallbacks, objectOrCallback[keyOrFirstArg], objectOrCallback, ...)
110
+ end
86
111
  end
87
112
  function Timer.simple(self, timeout, callback, ...)
88
113
  local timer = __TS__New(____exports.Timer)