warscript 0.0.1-dev.d1328b7 → 0.0.1-dev.d14d3d7

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 (205) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/types/effect.d.ts +14 -6
  6. package/core/types/effect.lua +131 -35
  7. package/core/types/frame.d.ts +3 -0
  8. package/core/types/frame.lua +83 -21
  9. package/core/types/player.d.ts +15 -0
  10. package/core/types/player.lua +56 -14
  11. package/core/types/playerCamera.d.ts +2 -0
  12. package/core/types/playerCamera.lua +123 -5
  13. package/core/types/sound.d.ts +17 -24
  14. package/core/types/sound.lua +99 -24
  15. package/core/types/tileCell.d.ts +11 -1
  16. package/core/types/tileCell.lua +97 -0
  17. package/core/types/timer.d.ts +9 -8
  18. package/core/types/timer.lua +45 -23
  19. package/core/util.d.ts +1 -1
  20. package/core/util.lua +12 -1
  21. package/decl/native.d.ts +846 -790
  22. package/engine/behavior.d.ts +5 -0
  23. package/engine/behavior.lua +106 -27
  24. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  25. package/engine/behaviour/ability/always-enabled.lua +31 -0
  26. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  27. package/engine/behaviour/ability/apply-buff.lua +32 -0
  28. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  29. package/engine/behaviour/ability/damage.d.ts +9 -3
  30. package/engine/behaviour/ability/damage.lua +26 -38
  31. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  32. package/engine/behaviour/ability/emulate-impact.lua +43 -0
  33. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  34. package/engine/behaviour/ability/instant-impact.lua +4 -19
  35. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  36. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  37. package/engine/behaviour/ability/remove-buffs.d.ts +25 -0
  38. package/engine/behaviour/ability/remove-buffs.lua +49 -0
  39. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  40. package/engine/behaviour/ability/restore-mana.lua +6 -6
  41. package/engine/behaviour/ability.d.ts +20 -4
  42. package/engine/behaviour/ability.lua +111 -47
  43. package/engine/behaviour/unit/stun-immunity.d.ts +7 -3
  44. package/engine/behaviour/unit/stun-immunity.lua +52 -27
  45. package/engine/behaviour/unit.d.ts +34 -0
  46. package/engine/behaviour/unit.lua +190 -4
  47. package/engine/buff.d.ts +72 -45
  48. package/engine/buff.lua +357 -241
  49. package/engine/internal/ability.d.ts +20 -3
  50. package/engine/internal/ability.lua +126 -13
  51. package/engine/internal/item/ability.lua +162 -4
  52. package/engine/internal/item+owner.lua +12 -6
  53. package/engine/internal/item.d.ts +20 -19
  54. package/engine/internal/item.lua +191 -74
  55. package/engine/internal/mechanics/ability-duration.lua +1 -1
  56. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  57. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  58. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  59. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  60. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  61. package/engine/internal/misc/frame-coordinates.lua +21 -0
  62. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  63. package/engine/internal/misc/get-terrain-z.lua +11 -0
  64. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  65. package/engine/internal/misc/player-local-handle.lua +5 -0
  66. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  67. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  68. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  69. package/engine/internal/object-data/evasion-probability.lua +16 -0
  70. package/engine/internal/unit/ability.d.ts +45 -1
  71. package/engine/internal/unit/ability.lua +128 -17
  72. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  73. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  74. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  75. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  76. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  77. package/engine/internal/unit/allowed-targets.lua +9 -1
  78. package/engine/internal/unit/bonus.d.ts +2 -0
  79. package/engine/internal/unit/bonus.lua +17 -0
  80. package/engine/internal/unit/fly-height.d.ts +7 -0
  81. package/engine/internal/unit/fly-height.lua +20 -0
  82. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  83. package/engine/internal/unit/ignore-events-items.lua +5 -0
  84. package/engine/internal/unit/item.d.ts +1 -0
  85. package/engine/internal/unit/item.lua +8 -4
  86. package/engine/internal/unit/main-selected.d.ts +6 -0
  87. package/engine/internal/unit/main-selected.lua +18 -22
  88. package/engine/internal/unit/order.d.ts +20 -0
  89. package/engine/internal/unit/order.lua +136 -0
  90. package/engine/internal/unit+ability.lua +10 -1
  91. package/engine/internal/unit+damage.d.ts +2 -11
  92. package/engine/internal/unit+damage.lua +10 -14
  93. package/engine/internal/unit+spellSteal.lua +1 -2
  94. package/engine/internal/unit-missile-launch.lua +45 -14
  95. package/engine/internal/unit.d.ts +50 -15
  96. package/engine/internal/unit.lua +413 -170
  97. package/engine/internal/utility.lua +12 -0
  98. package/engine/lightning.d.ts +12 -5
  99. package/engine/lightning.lua +48 -14
  100. package/engine/local-client.d.ts +2 -0
  101. package/engine/local-client.lua +30 -0
  102. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  103. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  104. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  105. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  106. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  107. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  108. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  109. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  110. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  111. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  112. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  113. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  114. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  115. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  116. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  117. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  118. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  119. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  120. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  121. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  122. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  123. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  124. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  125. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  126. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  127. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  128. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  129. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  130. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  131. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  132. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  133. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  134. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  135. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  136. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  137. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  138. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  139. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  140. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  141. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  142. package/engine/object-data/entry/ability-type/web.lua +52 -0
  143. package/engine/object-data/entry/ability-type.d.ts +19 -17
  144. package/engine/object-data/entry/ability-type.lua +93 -36
  145. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  146. package/engine/object-data/entry/buff-type.d.ts +6 -12
  147. package/engine/object-data/entry/buff-type.lua +13 -29
  148. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  149. package/engine/object-data/entry/item-type.d.ts +3 -1
  150. package/engine/object-data/entry/item-type.lua +15 -2
  151. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  152. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  153. package/engine/object-data/entry/sound-preset.lua +140 -0
  154. package/engine/object-data/entry/unit-type.d.ts +21 -5
  155. package/engine/object-data/entry/unit-type.lua +214 -93
  156. package/engine/object-data/entry/upgrade.d.ts +1 -1
  157. package/engine/object-data/entry/upgrade.lua +4 -4
  158. package/engine/object-data/entry.d.ts +16 -14
  159. package/engine/object-data/entry.lua +60 -32
  160. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  161. package/engine/object-field/ability.d.ts +12 -6
  162. package/engine/object-field/ability.lua +8 -4
  163. package/engine/object-field/unit.d.ts +57 -3
  164. package/engine/object-field/unit.lua +207 -7
  165. package/engine/object-field.d.ts +23 -6
  166. package/engine/object-field.lua +303 -114
  167. package/engine/random.d.ts +9 -0
  168. package/engine/random.lua +13 -0
  169. package/engine/standard/entries/buff-type.d.ts +3 -0
  170. package/engine/standard/entries/buff-type.lua +3 -0
  171. package/engine/standard/entries/sound-preset.d.ts +10 -0
  172. package/engine/standard/entries/sound-preset.lua +10 -0
  173. package/engine/standard/fields/ability.d.ts +2 -0
  174. package/engine/standard/fields/ability.lua +2 -0
  175. package/engine/standard/fields/unit.d.ts +5 -0
  176. package/engine/standard/fields/unit.lua +9 -0
  177. package/engine/synchronization.d.ts +11 -0
  178. package/engine/synchronization.lua +77 -0
  179. package/engine/text-tag.d.ts +36 -2
  180. package/engine/text-tag.lua +250 -10
  181. package/engine/unit.d.ts +3 -0
  182. package/engine/unit.lua +3 -0
  183. package/net/socket.lua +1 -1
  184. package/objutil/buff.lua +2 -3
  185. package/objutil/unit.lua +8 -0
  186. package/package.json +2 -2
  187. package/patch-lualib.lua +1 -1
  188. package/utility/arrays.d.ts +10 -1
  189. package/utility/arrays.lua +45 -3
  190. package/utility/callback-array.d.ts +17 -0
  191. package/utility/callback-array.lua +61 -0
  192. package/utility/functions.d.ts +8 -0
  193. package/utility/functions.lua +13 -0
  194. package/utility/lazy.d.ts +2 -0
  195. package/utility/lazy.lua +14 -0
  196. package/utility/linked-set.d.ts +2 -0
  197. package/utility/linked-set.lua +22 -1
  198. package/utility/lua-maps.d.ts +15 -2
  199. package/utility/lua-maps.lua +53 -2
  200. package/utility/lua-sets.d.ts +2 -0
  201. package/utility/lua-sets.lua +7 -0
  202. package/utility/reflection.lua +11 -7
  203. package/utility/types.d.ts +3 -0
  204. package/core/types/order.d.ts +0 -25
  205. package/core/types/order.lua +0 -55
@@ -21,14 +21,34 @@ 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 ____lazy = require("utility.lazy")
27
+ local lazyRecord = ____lazy.lazyRecord
28
+ local getPlayerAlliance = GetPlayerAlliance
24
29
  local getPlayerColor = GetPlayerColor
25
30
  local getPlayerName = GetPlayerName
26
31
  local getPlayerTechCount = GetPlayerTechCount
27
32
  local getPlayerTechMaxAllowed = GetPlayerTechMaxAllowed
33
+ local getTriggerPlayer = GetTriggerPlayer
34
+ local setPlayerAlliance = SetPlayerAlliance
28
35
  local setPlayerTechMaxAllowed = SetPlayerTechMaxAllowed
29
36
  local setPlayerTechResearched = SetPlayerTechResearched
30
37
  local setPlayerAbilityAvailable = SetPlayerAbilityAvailable
38
+ local triggerRegisterPlayerAllianceChange = TriggerRegisterPlayerAllianceChange
31
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
+ }
32
52
  ____exports.Player = __TS__Class()
33
53
  local Player = ____exports.Player
34
54
  Player.name = "Player"
@@ -83,6 +103,12 @@ end
83
103
  function Player.prototype.isEnemyOf(self, other)
84
104
  return IsPlayerEnemy(self.handle, other.handle)
85
105
  end
106
+ function Player.prototype.setAlliance(self, other, ____type, value)
107
+ setPlayerAlliance(self.handle, other.handle, nativeByPlayerAllianceType[____type], value)
108
+ end
109
+ function Player.prototype.getAlliance(self, other, ____type)
110
+ return getPlayerAlliance(self.handle, other.handle, nativeByPlayerAllianceType[____type])
111
+ end
86
112
  function Player.prototype.setAbilityAvailable(self, abilityId, available)
87
113
  setPlayerAbilityAvailable(self.handle, abilityId, available)
88
114
  end
@@ -122,14 +148,11 @@ function Player.getMouseEvent(self, event, collector)
122
148
  self.events[eventId] = __TS__New(
123
149
  TriggerEvent,
124
150
  function(trigger)
125
- Timer:simple(
126
- 0,
127
- function()
128
- for ____, player in ipairs(____exports.Player.all) do
129
- TriggerRegisterPlayerEvent(trigger, player.handle, event)
130
- end
151
+ Timer:run(function()
152
+ for ____, player in ipairs(____exports.Player.all) do
153
+ TriggerRegisterPlayerEvent(trigger, player.handle, event)
131
154
  end
132
- )
155
+ end)
133
156
  end,
134
157
  collector or (function() return {} end)
135
158
  )
@@ -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,32 @@ __TS__SetDescriptor(
367
390
  end},
368
391
  true
369
392
  )
393
+ __TS__ObjectDefineProperty(
394
+ Player,
395
+ "allianceChangedEvent",
396
+ {get = function(self)
397
+ local event = lazyRecord(function(____type)
398
+ return __TS__New(
399
+ TriggerEvent,
400
+ function(trigger)
401
+ for ____, player in ipairs(____exports.Player.all) do
402
+ triggerRegisterPlayerAllianceChange(trigger, player.handle, nativeByPlayerAllianceType[____type])
403
+ end
404
+ end,
405
+ function() return ____exports.Player:of(getTriggerPlayer()) end
406
+ )
407
+ end)
408
+ rawset(self, "allianceChangedEvent", event)
409
+ return event
410
+ end}
411
+ )
370
412
  __TS__ObjectDefineProperty(
371
413
  Player,
372
414
  "onLeave",
373
415
  {get = function(self)
374
416
  return ____exports.Player:getEvent(
375
417
  EVENT_PLAYER_LEAVE,
376
- function() return ____exports.Player:of(GetTriggerPlayer()) end
418
+ function() return ____exports.Player:of(getTriggerPlayer()) end
377
419
  )
378
420
  end}
379
421
  )
@@ -383,7 +425,7 @@ __TS__ObjectDefineProperty(
383
425
  {get = function(self)
384
426
  return ____exports.Player:getMouseEvent(
385
427
  EVENT_PLAYER_MOUSE_DOWN,
386
- function() return ____exports.Player:of(GetTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
428
+ function() return ____exports.Player:of(getTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
387
429
  )
388
430
  end}
389
431
  )
@@ -393,7 +435,7 @@ __TS__ObjectDefineProperty(
393
435
  {get = function(self)
394
436
  return ____exports.Player:getMouseEvent(
395
437
  EVENT_PLAYER_MOUSE_UP,
396
- function() return ____exports.Player:of(GetTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
438
+ function() return ____exports.Player:of(getTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
397
439
  )
398
440
  end}
399
441
  )
@@ -403,7 +445,7 @@ __TS__ObjectDefineProperty(
403
445
  {get = function(self)
404
446
  return ____exports.Player:getMouseEvent(
405
447
  EVENT_PLAYER_MOUSE_MOVE,
406
- function() return ____exports.Player:of(GetTriggerPlayer()), vec2(
448
+ function() return ____exports.Player:of(getTriggerPlayer()), vec2(
407
449
  BlzGetTriggerPlayerMouseX(),
408
450
  BlzGetTriggerPlayerMouseY()
409
451
  ) end
@@ -439,7 +481,7 @@ __TS__ObjectDefineProperty(
439
481
  TriggerRegisterPlayerChatEvent(trigger, player.handle, "", false)
440
482
  end
441
483
  end,
442
- function() return ____exports.Player:of(GetTriggerPlayer()), GetEventPlayerChatString() end
484
+ function() return ____exports.Player:of(getTriggerPlayer()), GetEventPlayerChatString() end
443
485
  )
444
486
  rawset(self, "onChat", event)
445
487
  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
@@ -1,6 +1,7 @@
1
1
  /** @noSelfInFile */
2
2
  import { Handle, HandleDestructor } from "./handle";
3
3
  import { Unit } from "./unit";
4
+ import { SoundEax } from "../../engine/object-data/auxiliary/sound-eax";
4
5
  export declare enum SoundChannel {
5
6
  General = 0,
6
7
  UnitSelection = 1,
@@ -18,16 +19,7 @@ export declare enum SoundChannel {
18
19
  Birth = 13,
19
20
  Fire = 14
20
21
  }
21
- export declare enum SoundEax {
22
- Default = "DefaultEAXON",
23
- Acknowledgements = "HeroAcksEAX",
24
- Environment = "DoodadsEAX",
25
- Drums = "KotoDrumsEAX",
26
- Attacks = "CombatSoundsEAX",
27
- Abilities = "SpellsEAX",
28
- Missiles = "MissilesEAX"
29
- }
30
- export type SoundPreset = Readonly<{
22
+ export type SoundSettings = Readonly<{
31
23
  channel?: SoundChannel;
32
24
  eax?: SoundEax;
33
25
  fadeInRate?: number;
@@ -36,19 +28,19 @@ export type SoundPreset = Readonly<{
36
28
  volume?: number;
37
29
  pitch?: number;
38
30
  }>;
39
- export type Sound3DPreset = SoundPreset & Readonly<{
31
+ export type Sound3DSettings = SoundSettings & Readonly<{
40
32
  stopWhenOutOfRange?: boolean;
41
33
  minDistance?: number;
42
34
  maxDistance?: number;
43
35
  distanceCutoff?: number;
44
36
  }>;
45
- export declare namespace SoundPreset {
46
- const UI: SoundPreset;
47
- const Music: SoundPreset;
48
- const Attack: Sound3DPreset;
49
- const Ability: Sound3DPreset;
50
- const AbilityLooping: Sound3DPreset;
51
- const Missile: Sound3DPreset;
37
+ export declare namespace SoundSettings {
38
+ const UI: SoundSettings;
39
+ const Music: SoundSettings;
40
+ const Attack: Sound3DSettings;
41
+ const Ability: Sound3DSettings;
42
+ const AbilityLooping: Sound3DSettings;
43
+ const Missile: Sound3DSettings;
52
44
  }
53
45
  export declare class Sound extends Handle<jsound, [fadeOut?: boolean]> {
54
46
  private _volume?;
@@ -58,12 +50,13 @@ export declare class Sound extends Handle<jsound, [fadeOut?: boolean]> {
58
50
  start(milliseconds?: number): void;
59
51
  stop(fadeOut?: boolean): void;
60
52
  restart(milliseconds?: number): void;
61
- static play(fileName: string, preset: SoundPreset): void;
62
- static create(fileName: string, preset: SoundPreset): Sound;
53
+ static play(fileName: string, preset: SoundSettings): void;
54
+ static create(fileName: string, preset: SoundSettings): Sound;
63
55
  }
64
56
  export declare class Sound3D extends Sound {
65
- static playAtPosition(fileName: string, preset: Sound3DPreset, x?: number, y?: number, z?: number): void;
66
- static playOnUnit(fileName: string, preset: Sound3DPreset, unit: Unit): void;
67
- static createAtPosition(fileName: string, preset: Sound3DPreset, x?: number, y?: number, z?: number): Sound3D;
68
- static createOnUnit(fileName: string, preset: Sound3DPreset, unit: Unit): Sound3D;
57
+ static playAtPosition(fileName: string, preset: Sound3DSettings, x?: number, y?: number, z?: number): void;
58
+ static playOnUnit(fileName: string, preset: Sound3DSettings, unit: Unit): void;
59
+ static playFromLabel(label: string, preset: Sound3DSettings, ...positionOrUnit: [Unit] | [number, number, number?]): void;
60
+ static createAtPosition(fileName: string, preset: Sound3DSettings, x?: number, y?: number, z?: number): Sound3D;
61
+ static createOnUnit(fileName: string, preset: Sound3DSettings, unit: Unit): Sound3D;
69
62
  }
@@ -5,15 +5,18 @@ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
5
  local ____exports = {}
6
6
  local ____handle = require("core.types.handle")
7
7
  local Handle = ____handle.Handle
8
+ local ____sound_2Dpreset = require("engine.object-data.entry.sound-preset")
9
+ local SoundPreset = ____sound_2Dpreset.SoundPreset
10
+ local ____random = require("engine.random")
11
+ local randomInteger = ____random.randomInteger
8
12
  local createSound = CreateSound
13
+ local createSoundFromLabel = CreateSoundFromLabel
9
14
  local setSoundPitch = SetSoundPitch
10
15
  local setSoundChannel = SetSoundChannel
11
16
  local setSoundPosition = SetSoundPosition
12
17
  local setSoundVolume = SetSoundVolume
13
18
  local setSoundDistances = SetSoundDistances
14
19
  local setSoundDistanceCutoff = SetSoundDistanceCutoff
15
- local setSoundConeAngles = SetSoundConeAngles
16
- local setSoundConeOrientation = SetSoundConeOrientation
17
20
  local startSound = StartSound
18
21
  local setSoundPlayPosition = SetSoundPlayPosition
19
22
  local stopSound = StopSound
@@ -50,29 +53,21 @@ ____exports.SoundChannel.Birth = 13
50
53
  ____exports.SoundChannel[____exports.SoundChannel.Birth] = "Birth"
51
54
  ____exports.SoundChannel.Fire = 14
52
55
  ____exports.SoundChannel[____exports.SoundChannel.Fire] = "Fire"
53
- ____exports.SoundEax = SoundEax or ({})
54
- ____exports.SoundEax.Default = "DefaultEAXON"
55
- ____exports.SoundEax.Acknowledgements = "HeroAcksEAX"
56
- ____exports.SoundEax.Environment = "DoodadsEAX"
57
- ____exports.SoundEax.Drums = "KotoDrumsEAX"
58
- ____exports.SoundEax.Attacks = "CombatSoundsEAX"
59
- ____exports.SoundEax.Abilities = "SpellsEAX"
60
- ____exports.SoundEax.Missiles = "MissilesEAX"
61
- ____exports.SoundPreset = {}
62
- local SoundPreset = ____exports.SoundPreset
56
+ ____exports.SoundSettings = {}
57
+ local SoundSettings = ____exports.SoundSettings
63
58
  do
64
- SoundPreset.UI = {channel = ____exports.SoundChannel.UI, eax = ____exports.SoundEax.Default, fadeInRate = 12700, fadeOutRate = 12700}
65
- SoundPreset.Music = {
59
+ SoundSettings.UI = {channel = ____exports.SoundChannel.UI, eax = "DefaultEAXON", fadeInRate = 12700, fadeOutRate = 12700}
60
+ SoundSettings.Music = {
66
61
  channel = ____exports.SoundChannel.Music,
67
- eax = ____exports.SoundEax.Default,
62
+ eax = "DefaultEAXON",
68
63
  fadeInRate = 12700,
69
64
  fadeOutRate = 12700,
70
65
  looping = true
71
66
  }
72
- SoundPreset.Attack = {channel = ____exports.SoundChannel.Combat, eax = ____exports.SoundEax.Attacks, fadeInRate = 10, fadeOutRate = 10}
73
- SoundPreset.Ability = {
67
+ SoundSettings.Attack = {channel = ____exports.SoundChannel.Combat, eax = "CombatSoundsEAX", fadeInRate = 10, fadeOutRate = 10}
68
+ SoundSettings.Ability = {
74
69
  channel = ____exports.SoundChannel.Animations,
75
- eax = ____exports.SoundEax.Abilities,
70
+ eax = "SpellsEAX",
76
71
  stopWhenOutOfRange = true,
77
72
  volume = 127,
78
73
  fadeInRate = 1,
@@ -82,9 +77,9 @@ do
82
77
  maxDistance = 3500,
83
78
  distanceCutoff = 3000
84
79
  }
85
- SoundPreset.AbilityLooping = {
80
+ SoundSettings.AbilityLooping = {
86
81
  channel = ____exports.SoundChannel.Birth,
87
- eax = ____exports.SoundEax.Abilities,
82
+ eax = "SpellsEAX",
88
83
  looping = true,
89
84
  stopWhenOutOfRange = true,
90
85
  volume = 127,
@@ -95,9 +90,9 @@ do
95
90
  maxDistance = 3000,
96
91
  distanceCutoff = 3000
97
92
  }
98
- SoundPreset.Missile = {
93
+ SoundSettings.Missile = {
99
94
  channel = ____exports.SoundChannel.Animations,
100
- eax = ____exports.SoundEax.Missiles,
95
+ eax = "MissilesEAX",
101
96
  stopWhenOutOfRange = true,
102
97
  volume = 127,
103
98
  fadeInRate = 1,
@@ -108,6 +103,29 @@ do
108
103
  distanceCutoff = 3000
109
104
  }
110
105
  end
106
+ local customSoundPresetDataByLabel = postcompile(function()
107
+ local customSoundPresetDataByLabel = {}
108
+ for ____, soundPreset in ipairs(SoundPreset:getAll()) do
109
+ if soundPreset.isCustom then
110
+ customSoundPresetDataByLabel[soundPreset.id] = {
111
+ filePaths = soundPreset.filePaths,
112
+ volume = soundPreset.volume,
113
+ pitch = soundPreset.pitch,
114
+ channel = soundPreset.channel,
115
+ minimumDistance = soundPreset.minimumDistance,
116
+ maximumDistance = soundPreset.maximumDistance,
117
+ distanceCutoff = soundPreset.distanceCutoff,
118
+ eax = soundPreset.eax
119
+ }
120
+ end
121
+ end
122
+ return customSoundPresetDataByLabel
123
+ end)
124
+ ---
125
+ -- @internal For use by internal systems only.
126
+ ____exports.isSoundLabelCustom = function(label)
127
+ return customSoundPresetDataByLabel[label] ~= nil
128
+ end
111
129
  local function createPresetSound(fileName, preset)
112
130
  local ____fileName_1 = fileName
113
131
  local ____preset_looping_0 = preset.looping
@@ -121,7 +139,7 @@ local function createPresetSound(fileName, preset)
121
139
  true,
122
140
  preset.fadeInRate or 12700,
123
141
  preset.fadeOutRate or 12700,
124
- preset.eax or ____exports.SoundEax.Default
142
+ preset.eax or "DefaultEAXON"
125
143
  )
126
144
  setSoundChannel(sound, preset.channel or ____exports.SoundChannel.General)
127
145
  setSoundVolume(sound, preset.volume or 127)
@@ -144,7 +162,7 @@ local function createPreset3DSound(fileName, preset)
144
162
  ____preset_stopWhenOutOfRange_3,
145
163
  preset.fadeInRate or 12700,
146
164
  preset.fadeOutRate or 12700,
147
- preset.eax or ____exports.SoundEax.Default
165
+ preset.eax or "DefaultEAXON"
148
166
  )
149
167
  setSoundChannel(sound, preset.channel or ____exports.SoundChannel.General)
150
168
  setSoundVolume(sound, preset.volume or 127)
@@ -153,6 +171,53 @@ local function createPreset3DSound(fileName, preset)
153
171
  setSoundDistanceCutoff(sound, preset.distanceCutoff or 1500)
154
172
  return sound
155
173
  end
174
+ local function createPreset3DSoundFromLabel(label, preset)
175
+ local customSoundPresetData = customSoundPresetDataByLabel[label]
176
+ if customSoundPresetData == nil then
177
+ local ____label_7 = label
178
+ local ____preset_looping_5 = preset.looping
179
+ if ____preset_looping_5 == nil then
180
+ ____preset_looping_5 = false
181
+ end
182
+ local ____preset_stopWhenOutOfRange_6 = preset.stopWhenOutOfRange
183
+ if ____preset_stopWhenOutOfRange_6 == nil then
184
+ ____preset_stopWhenOutOfRange_6 = true
185
+ end
186
+ return createSoundFromLabel(
187
+ ____label_7,
188
+ ____preset_looping_5,
189
+ true,
190
+ ____preset_stopWhenOutOfRange_6,
191
+ preset.fadeInRate or 12700,
192
+ preset.fadeOutRate or 12700
193
+ )
194
+ else
195
+ local ____customSoundPresetData_filePaths_index_10 = customSoundPresetData.filePaths[randomInteger(#customSoundPresetData.filePaths - 1) + 1]
196
+ local ____preset_looping_8 = preset.looping
197
+ if ____preset_looping_8 == nil then
198
+ ____preset_looping_8 = false
199
+ end
200
+ local ____preset_stopWhenOutOfRange_9 = preset.stopWhenOutOfRange
201
+ if ____preset_stopWhenOutOfRange_9 == nil then
202
+ ____preset_stopWhenOutOfRange_9 = true
203
+ end
204
+ local sound = createSound(
205
+ ____customSoundPresetData_filePaths_index_10,
206
+ ____preset_looping_8,
207
+ true,
208
+ ____preset_stopWhenOutOfRange_9,
209
+ preset.fadeInRate or 12700,
210
+ preset.fadeOutRate or 12700,
211
+ customSoundPresetData.eax
212
+ )
213
+ setSoundChannel(sound, customSoundPresetData.channel)
214
+ setSoundVolume(sound, customSoundPresetData.volume)
215
+ setSoundPitch(sound, customSoundPresetData.pitch)
216
+ setSoundDistances(sound, customSoundPresetData.minimumDistance, customSoundPresetData.maximumDistance)
217
+ setSoundDistanceCutoff(sound, customSoundPresetData.distanceCutoff)
218
+ return sound
219
+ end
220
+ end
156
221
  ____exports.Sound = __TS__Class()
157
222
  local Sound = ____exports.Sound
158
223
  Sound.name = "Sound"
@@ -225,6 +290,16 @@ function Sound3D.playOnUnit(self, fileName, preset, unit)
225
290
  startSound(sound)
226
291
  killSoundWhenDone(sound)
227
292
  end
293
+ function Sound3D.playFromLabel(self, label, preset, unitOrX, y, z)
294
+ local sound = createPreset3DSoundFromLabel(label, preset)
295
+ if type(unitOrX) ~= "number" then
296
+ attachSoundToUnit(sound, unitOrX.handle)
297
+ else
298
+ setSoundPosition(sound, unitOrX, y or 0, z or 0)
299
+ end
300
+ startSound(sound)
301
+ killSoundWhenDone(sound)
302
+ end
228
303
  function Sound3D.createAtPosition(self, fileName, preset, x, y, z)
229
304
  if x == nil then
230
305
  x = 0
@@ -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[];