warscript 0.0.1-dev.a73c979 → 0.0.1-dev.a856ae3

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 (153) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +71 -22
  4. package/core/types/item.d.ts +1 -0
  5. package/core/types/item.lua +1 -0
  6. package/core/types/player.d.ts +16 -0
  7. package/core/types/player.lua +60 -15
  8. package/core/types/playerCamera.d.ts +2 -0
  9. package/core/types/playerCamera.lua +123 -5
  10. package/core/types/sound.lua +1 -1
  11. package/core/types/tileCell.d.ts +11 -1
  12. package/core/types/tileCell.lua +97 -0
  13. package/core/types/timer.d.ts +3 -1
  14. package/core/types/timer.lua +27 -2
  15. package/decl/native.d.ts +6 -4
  16. package/destroyable.d.ts +1 -0
  17. package/destroyable.lua +9 -0
  18. package/engine/behavior.d.ts +12 -1
  19. package/engine/behavior.lua +199 -65
  20. package/engine/behaviour/ability/apply-buff.lua +4 -4
  21. package/engine/behaviour/ability/damage.d.ts +3 -0
  22. package/engine/behaviour/ability/damage.lua +8 -2
  23. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  24. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  25. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  26. package/engine/behaviour/ability/restore-mana.lua +6 -6
  27. package/engine/behaviour/ability.d.ts +11 -6
  28. package/engine/behaviour/ability.lua +31 -1
  29. package/engine/behaviour/unit/stun-immunity.d.ts +9 -5
  30. package/engine/behaviour/unit/stun-immunity.lua +17 -7
  31. package/engine/behaviour/unit.d.ts +15 -5
  32. package/engine/behaviour/unit.lua +126 -22
  33. package/engine/buff.d.ts +65 -21
  34. package/engine/buff.lua +362 -179
  35. package/engine/internal/ability.d.ts +3 -1
  36. package/engine/internal/ability.lua +26 -9
  37. package/engine/internal/item/fields.d.ts +12 -0
  38. package/engine/internal/item/fields.lua +33 -0
  39. package/engine/internal/item+owner.lua +12 -6
  40. package/engine/internal/item.d.ts +9 -15
  41. package/engine/internal/item.lua +46 -69
  42. package/engine/internal/mechanics/cast-ability.lua +6 -3
  43. package/engine/internal/misc/frame-coordinates.lua +21 -0
  44. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  45. package/engine/internal/misc/get-terrain-z.lua +11 -0
  46. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  47. package/engine/internal/misc/player-local-handle.lua +5 -0
  48. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  49. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  50. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  51. package/engine/internal/object-data/health-bonus.lua +16 -0
  52. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  53. package/engine/internal/object-data/mana-bonus.lua +16 -0
  54. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  55. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  56. package/engine/internal/unit/ability.d.ts +14 -14
  57. package/engine/internal/unit/ability.lua +72 -45
  58. package/engine/internal/unit/attributes.d.ts +17 -0
  59. package/engine/internal/unit/attributes.lua +46 -0
  60. package/engine/internal/unit/bonus.d.ts +6 -0
  61. package/engine/internal/unit/bonus.lua +33 -3
  62. package/engine/internal/unit/fly-height.d.ts +7 -0
  63. package/engine/internal/unit/fly-height.lua +20 -0
  64. package/engine/internal/unit/interrupts.d.ts +12 -0
  65. package/engine/internal/unit/interrupts.lua +28 -0
  66. package/engine/internal/unit/main-selected.lua +12 -27
  67. package/engine/internal/unit/range-event.d.ts +12 -0
  68. package/engine/internal/unit/range-event.lua +90 -0
  69. package/engine/internal/unit/scale.d.ts +7 -0
  70. package/engine/internal/unit/scale.lua +20 -0
  71. package/engine/internal/unit+ability.lua +10 -1
  72. package/engine/internal/unit+bonus.lua +3 -3
  73. package/engine/internal/unit-missile-launch.lua +52 -14
  74. package/engine/internal/unit.d.ts +19 -24
  75. package/engine/internal/unit.lua +179 -200
  76. package/engine/local-client.d.ts +7 -0
  77. package/engine/local-client.lua +86 -1
  78. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  79. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  80. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  81. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  82. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  83. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  84. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  85. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  86. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  87. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  88. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  89. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  90. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  91. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  92. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  93. package/engine/object-data/entry/ability-type.d.ts +2 -0
  94. package/engine/object-data/entry/ability-type.lua +89 -8
  95. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  96. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  97. package/engine/object-data/entry/destructible-type.lua +155 -0
  98. package/engine/object-data/entry/unit-type.d.ts +15 -2
  99. package/engine/object-data/entry/unit-type.lua +135 -33
  100. package/engine/object-field/ability.d.ts +3 -3
  101. package/engine/object-field/ability.lua +9 -8
  102. package/engine/object-field/item.d.ts +22 -0
  103. package/engine/object-field/item.lua +118 -0
  104. package/engine/object-field/unit.d.ts +20 -5
  105. package/engine/object-field/unit.lua +61 -0
  106. package/engine/object-field.d.ts +12 -4
  107. package/engine/object-field.lua +273 -126
  108. package/engine/random.d.ts +10 -0
  109. package/engine/random.lua +21 -0
  110. package/engine/standard/fields/ability.d.ts +2 -2
  111. package/engine/standard/fields/ability.lua +2 -2
  112. package/engine/standard/fields/item.d.ts +4 -0
  113. package/engine/standard/fields/item.lua +6 -0
  114. package/engine/standard/fields/unit.d.ts +11 -3
  115. package/engine/standard/fields/unit.lua +15 -2
  116. package/engine/synchronization.d.ts +11 -0
  117. package/engine/synchronization.lua +77 -0
  118. package/engine/text-tag.d.ts +1 -1
  119. package/engine/text-tag.lua +92 -17
  120. package/engine/unit.d.ts +5 -0
  121. package/engine/unit.lua +5 -0
  122. package/lualib_bundle.lua +1 -1
  123. package/math.d.ts +2 -0
  124. package/math.lua +14 -0
  125. package/net/socket.lua +1 -1
  126. package/objutil/buff.lua +10 -8
  127. package/objutil/object.lua +1 -1
  128. package/operation.lua +1 -4
  129. package/package.json +5 -5
  130. package/patch-lua.lua +15 -0
  131. package/patch-lualib.lua +1 -1
  132. package/utility/arrays.d.ts +1 -0
  133. package/utility/arrays.lua +8 -0
  134. package/utility/callback-array.d.ts +17 -0
  135. package/utility/callback-array.lua +61 -0
  136. package/utility/functions.d.ts +2 -0
  137. package/utility/functions.lua +7 -0
  138. package/utility/linked-map.d.ts +35 -0
  139. package/utility/linked-map.lua +107 -0
  140. package/utility/linked-set.d.ts +4 -1
  141. package/utility/linked-set.lua +46 -1
  142. package/utility/lua-maps.d.ts +11 -2
  143. package/utility/lua-maps.lua +33 -2
  144. package/utility/lua-sets.d.ts +1 -0
  145. package/utility/lua-sets.lua +4 -0
  146. package/utility/records.lua +20 -1
  147. package/utility/types.d.ts +3 -0
  148. package/utility/unordered-map.d.ts +27 -0
  149. package/utility/unordered-map.lua +99 -0
  150. /package/engine/internal/{object-data/armor-increase.d.ts → misc/frame-coordinates.d.ts} +0 -0
  151. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  152. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  153. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -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,13 +15,32 @@ 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
27
+ local ____lua_2Dsets = require("utility.lua-sets")
28
+ local mutableLuaSet = ____lua_2Dsets.mutableLuaSet
29
+ local ____socket = require("net.socket")
30
+ local Socket = ____socket.Socket
31
+ local ____lua_2Dmaps = require("utility.lua-maps")
32
+ local getOrPut = ____lua_2Dmaps.getOrPut
33
+ local luaMapInvert = ____lua_2Dmaps.luaMapInvert
34
+ local luaMapOf = ____lua_2Dmaps.luaMapOf
35
+ local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
18
36
  local frameClick = BlzFrameClick
19
37
  local frameGetEnable = BlzFrameGetEnable
20
38
  local frameIsVisible = BlzFrameIsVisible
21
39
  local frameSetEnable = BlzFrameSetEnable
22
40
  local frameSetScale = BlzFrameSetScale
23
- local getCameraTargetPositionX = GetCameraTargetPositionX
24
- local getCameraTargetPositionY = GetCameraTargetPositionY
41
+ local getHandleId = GetHandleId
42
+ local getOriginFrame = BlzGetOriginFrame
43
+ local location = Location
25
44
  local ____rawget = _G.rawget
26
45
  local rawset = _G.rawset
27
46
  local invoke = Event.invoke
@@ -123,6 +142,30 @@ do
123
142
  FramePoint.BOTTOM_RIGHT = FRAMEPOINT_BOTTOMRIGHT
124
143
  end
125
144
  local tooltipByFrame = setmetatable({}, {__mode = "k"})
145
+ local keyByAsyncInitOriginFrameType = luaMapOf(ORIGIN_FRAME_PORTRAIT_HP_TEXT, "hp", ORIGIN_FRAME_PORTRAIT_MANA_TEXT, "mana")
146
+ local asyncInitOriginFrameTypeByKey = luaMapInvert(keyByAsyncInitOriginFrameType)
147
+ local seenAsyncInitOriginFrameTypes = mutableLuaSet()
148
+ local seenAsyncInitOriginFrameTypesSocket = __TS__New(Socket)
149
+ local seenPlayersByAsyncInitOriginFrameType = mutableLuaMap()
150
+ seenAsyncInitOriginFrameTypesSocket.onMessage:addListener(function(player, key)
151
+ local asyncInitOriginFrameType = asyncInitOriginFrameTypeByKey[key]
152
+ if asyncInitOriginFrameType ~= nil then
153
+ getOrPut(seenPlayersByAsyncInitOriginFrameType, asyncInitOriginFrameType, mutableLuaSet)[player] = true
154
+ end
155
+ end)
156
+ local function haveAllPlayersSeenAsyncInitOriginFrameType(frame)
157
+ local players = seenPlayersByAsyncInitOriginFrameType[frame]
158
+ if players == nil then
159
+ return false
160
+ end
161
+ for ____, player in ipairs(Player.all) do
162
+ if player.isUser and player.isPlaying and not (players[player] ~= nil) then
163
+ return false
164
+ end
165
+ end
166
+ keyByAsyncInitOriginFrameType[frame] = nil
167
+ return true
168
+ end
126
169
  ____exports.Frame = __TS__Class()
127
170
  local Frame = ____exports.Frame
128
171
  Frame.name = "Frame"
@@ -301,7 +344,17 @@ function Frame.byOrigin(self, frameType, index)
301
344
  if index == nil then
302
345
  index = 0
303
346
  end
304
- return self:of(BlzGetOriginFrame(frameType, index))
347
+ local frame = getOriginFrame(frameType, index)
348
+ local asyncInitOriginFrameTypeKey = keyByAsyncInitOriginFrameType[frameType]
349
+ if index == 0 and asyncInitOriginFrameTypeKey ~= nil and not haveAllPlayersSeenAsyncInitOriginFrameType(frameType) then
350
+ if getHandleId(frame) == 0 or seenAsyncInitOriginFrameTypes[frameType] ~= nil then
351
+ location(0, 0)
352
+ else
353
+ seenAsyncInitOriginFrameTypes[frameType] = true
354
+ seenAsyncInitOriginFrameTypesSocket:send(asyncInitOriginFrameTypeKey)
355
+ end
356
+ end
357
+ return self:of(frame)
305
358
  end
306
359
  Frame.GAME_UI = ____exports.Frame:byOrigin(ORIGIN_FRAME_GAME_UI)
307
360
  Frame.CONSOLE_UI = ____exports.Frame:byOrigin(ORIGIN_FRAME_SIMPLE_UI_PARENT)
@@ -344,27 +397,21 @@ __TS__ObjectDefineProperty(
344
397
  Frame,
345
398
  "minX",
346
399
  {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
400
+ local minX = getFrameMinXMaxX()
401
+ return minX
352
402
  end}
353
403
  )
354
404
  __TS__ObjectDefineProperty(
355
405
  Frame,
356
406
  "maxX",
357
407
  {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
408
+ local ____, maxX = getFrameMinXMaxX()
409
+ return maxX
363
410
  end}
364
411
  )
365
412
  Frame.centerX = 0.4
366
- Frame.minY = 0
367
- Frame.maxY = 0.6
413
+ Frame.minY = FRAME_MIN_Y
414
+ Frame.maxY = FRAME_MAX_Y
368
415
  Frame.centerY = 0.3
369
416
  __TS__SetDescriptor(
370
417
  Frame.prototype,
@@ -938,16 +985,19 @@ __TS__ObjectDefineProperty(
938
985
  local event = __TS__New(Event)
939
986
  local syncX = 0
940
987
  local syncY = 0
941
- local syncCamX = getCameraTargetPositionX()
942
- local syncCamY = getCameraTargetPositionY()
988
+ local syncFrameX = 0
989
+ local syncFrameY = 0
943
990
  local lastX = syncX
944
991
  local lastY = syncY
945
992
  self.onMouseMove:addListener(function(player, x, y)
946
993
  if player.isLocal then
947
994
  syncX = x
948
995
  syncY = y
949
- syncCamX = getCameraTargetPositionX()
950
- syncCamY = getCameraTargetPositionY()
996
+ syncFrameX, syncFrameY = worldCoordinatesToFrame(
997
+ x,
998
+ y,
999
+ getTerrainZ(x, y)
1000
+ )
951
1001
  lastX = x
952
1002
  lastY = y
953
1003
  invoke(event, x, y)
@@ -957,9 +1007,8 @@ __TS__ObjectDefineProperty(
957
1007
  if syncX == 0 and syncY == 0 then
958
1008
  return
959
1009
  end
960
- local x = syncX + (getCameraTargetPositionX() - syncCamX)
961
- local y = syncY + (getCameraTargetPositionY() - syncCamY)
962
- if x ~= lastX or y ~= lastY then
1010
+ local x, y, ____, isDefinite = frameCoordinatesToWorld(syncFrameX, syncFrameY)
1011
+ if isDefinite and (x ~= lastX or y ~= lastY) then
963
1012
  lastX = x
964
1013
  lastY = y
965
1014
  invoke(event, x, y)
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
2
  import { Item } from "../../engine/internal/item";
3
3
  import "../../engine/internal/item+owner";
4
+ import "../../engine/internal/item/fields";
4
5
  export { Item };
@@ -2,5 +2,6 @@ local ____exports = {}
2
2
  local ____item = require("engine.internal.item")
3
3
  local Item = ____item.Item
4
4
  require("engine.internal.item+owner")
5
+ require("engine.internal.item.fields")
5
6
  ____exports.Item = Item
6
7
  return ____exports
@@ -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 = {}
@@ -21,14 +21,35 @@ 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
+ }
52
+ local playerColorChangedEvent = __TS__New(Event)
32
53
  ____exports.Player = __TS__Class()
33
54
  local Player = ____exports.Player
34
55
  Player.name = "Player"
@@ -83,6 +104,12 @@ end
83
104
  function Player.prototype.isEnemyOf(self, other)
84
105
  return IsPlayerEnemy(self.handle, other.handle)
85
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
86
113
  function Player.prototype.setAbilityAvailable(self, abilityId, available)
87
114
  setPlayerAbilityAvailable(self.handle, abilityId, available)
88
115
  end
@@ -122,14 +149,11 @@ function Player.getMouseEvent(self, event, collector)
122
149
  self.events[eventId] = __TS__New(
123
150
  TriggerEvent,
124
151
  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
152
+ Timer:run(function()
153
+ for ____, player in ipairs(____exports.Player.all) do
154
+ TriggerRegisterPlayerEvent(trigger, player.handle, event)
131
155
  end
132
- )
156
+ end)
133
157
  end,
134
158
  collector or (function() return {} end)
135
159
  )
@@ -178,7 +202,7 @@ function Player.getKeyEvent(self, isDown)
178
202
  TriggerAddCondition(
179
203
  trigger,
180
204
  Condition(function()
181
- local player = ____exports.Player:of(GetTriggerPlayer())
205
+ local player = ____exports.Player:of(getTriggerPlayer())
182
206
  local key = BlzGetTriggerPlayerKey()
183
207
  local metaKey = BlzGetTriggerPlayerMetaKey()
184
208
  Event.invoke(event, player, key, metaKey)
@@ -249,7 +273,7 @@ Player.all = (function()
249
273
  end
250
274
  return all
251
275
  end)()
252
- Player["local"] = ____exports.Player:of(GetLocalPlayer())
276
+ Player["local"] = ____exports.Player:of(PLAYER_LOCAL_HANDLE)
253
277
  Player.neutralPassive = ____exports.Player.all[PLAYER_NEUTRAL_PASSIVE + 1]
254
278
  Player.neutralAggressive = ____exports.Player.all[PLAYER_NEUTRAL_AGGRESSIVE + 1]
255
279
  Player.neutralVictim = ____exports.Player.all[bj_PLAYER_NEUTRAL_VICTIM + 1]
@@ -277,6 +301,7 @@ __TS__SetDescriptor(
277
301
  end,
278
302
  set = function(self, color)
279
303
  SetPlayerColor(self.handle, color.handle)
304
+ Event.invoke(playerColorChangedEvent, self)
280
305
  end
281
306
  },
282
307
  true
@@ -367,13 +392,32 @@ __TS__SetDescriptor(
367
392
  end},
368
393
  true
369
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
+ )
370
414
  __TS__ObjectDefineProperty(
371
415
  Player,
372
416
  "onLeave",
373
417
  {get = function(self)
374
418
  return ____exports.Player:getEvent(
375
419
  EVENT_PLAYER_LEAVE,
376
- function() return ____exports.Player:of(GetTriggerPlayer()) end
420
+ function() return ____exports.Player:of(getTriggerPlayer()) end
377
421
  )
378
422
  end}
379
423
  )
@@ -383,7 +427,7 @@ __TS__ObjectDefineProperty(
383
427
  {get = function(self)
384
428
  return ____exports.Player:getMouseEvent(
385
429
  EVENT_PLAYER_MOUSE_DOWN,
386
- function() return ____exports.Player:of(GetTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
430
+ function() return ____exports.Player:of(getTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
387
431
  )
388
432
  end}
389
433
  )
@@ -393,7 +437,7 @@ __TS__ObjectDefineProperty(
393
437
  {get = function(self)
394
438
  return ____exports.Player:getMouseEvent(
395
439
  EVENT_PLAYER_MOUSE_UP,
396
- function() return ____exports.Player:of(GetTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
440
+ function() return ____exports.Player:of(getTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
397
441
  )
398
442
  end}
399
443
  )
@@ -403,7 +447,7 @@ __TS__ObjectDefineProperty(
403
447
  {get = function(self)
404
448
  return ____exports.Player:getMouseEvent(
405
449
  EVENT_PLAYER_MOUSE_MOVE,
406
- function() return ____exports.Player:of(GetTriggerPlayer()), vec2(
450
+ function() return ____exports.Player:of(getTriggerPlayer()), vec2(
407
451
  BlzGetTriggerPlayerMouseX(),
408
452
  BlzGetTriggerPlayerMouseY()
409
453
  ) end
@@ -439,10 +483,11 @@ __TS__ObjectDefineProperty(
439
483
  TriggerRegisterPlayerChatEvent(trigger, player.handle, "", false)
440
484
  end
441
485
  end,
442
- function() return ____exports.Player:of(GetTriggerPlayer()), GetEventPlayerChatString() end
486
+ function() return ____exports.Player:of(getTriggerPlayer()), GetEventPlayerChatString() end
443
487
  )
444
488
  rawset(self, "onChat", event)
445
489
  return event
446
490
  end}
447
491
  )
492
+ Player.colorChangedEvent = playerColorChangedEvent
448
493
  return ____exports
@@ -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
@@ -22,7 +22,7 @@ local setSoundPlayPosition = SetSoundPlayPosition
22
22
  local stopSound = StopSound
23
23
  local attachSoundToUnit = AttachSoundToUnit
24
24
  local killSoundWhenDone = KillSoundWhenDone
25
- ____exports.SoundChannel = SoundChannel or ({})
25
+ ____exports.SoundChannel = ____exports.SoundChannel or ({})
26
26
  ____exports.SoundChannel.General = 0
27
27
  ____exports.SoundChannel[____exports.SoundChannel.General] = "General"
28
28
  ____exports.SoundChannel.UnitSelection = 1
@@ -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[];