warscript 0.0.1-dev.6745db1 → 0.0.1-dev.685e1bc

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 (136) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +61 -10
  4. package/core/types/item.d.ts +1 -0
  5. package/core/types/item.lua +1 -0
  6. package/core/types/player.d.ts +17 -1
  7. package/core/types/player.lua +67 -23
  8. package/core/types/playerCamera.lua +44 -0
  9. package/core/types/sound.lua +1 -1
  10. package/core/types/tileCell.d.ts +11 -1
  11. package/core/types/tileCell.lua +97 -0
  12. package/core/types/timer.d.ts +3 -2
  13. package/core/types/timer.lua +22 -2
  14. package/decl/native.d.ts +2 -2
  15. package/destroyable.d.ts +1 -0
  16. package/destroyable.lua +9 -0
  17. package/engine/behavior.d.ts +12 -1
  18. package/engine/behavior.lua +199 -65
  19. package/engine/behaviour/ability/apply-buff.lua +4 -4
  20. package/engine/behaviour/ability/damage.d.ts +3 -0
  21. package/engine/behaviour/ability/damage.lua +8 -2
  22. package/engine/behaviour/ability/emulate-impact.lua +5 -4
  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.d.ts +11 -6
  26. package/engine/behaviour/ability.lua +31 -1
  27. package/engine/behaviour/unit/stun-immunity.d.ts +9 -5
  28. package/engine/behaviour/unit/stun-immunity.lua +17 -7
  29. package/engine/behaviour/unit.d.ts +15 -5
  30. package/engine/behaviour/unit.lua +126 -22
  31. package/engine/buff.d.ts +65 -21
  32. package/engine/buff.lua +362 -179
  33. package/engine/internal/ability.d.ts +3 -1
  34. package/engine/internal/ability.lua +41 -24
  35. package/engine/internal/item/fields.d.ts +12 -0
  36. package/engine/internal/item/fields.lua +33 -0
  37. package/engine/internal/item.d.ts +11 -14
  38. package/engine/internal/item.lua +76 -70
  39. package/engine/internal/mechanics/cast-ability.lua +6 -3
  40. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  41. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  42. package/engine/internal/object-data/health-bonus.lua +16 -0
  43. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  44. package/engine/internal/object-data/mana-bonus.lua +16 -0
  45. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  46. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  47. package/engine/internal/unit/ability.d.ts +14 -14
  48. package/engine/internal/unit/ability.lua +72 -45
  49. package/engine/internal/unit/attributes.d.ts +17 -0
  50. package/engine/internal/unit/attributes.lua +46 -0
  51. package/engine/internal/unit/bonus.d.ts +6 -0
  52. package/engine/internal/unit/bonus.lua +33 -3
  53. package/engine/internal/unit/fly-height.d.ts +7 -0
  54. package/engine/internal/unit/fly-height.lua +20 -0
  55. package/engine/internal/unit/interrupts.d.ts +12 -0
  56. package/engine/internal/unit/interrupts.lua +28 -0
  57. package/engine/internal/unit/main-selected.lua +12 -27
  58. package/engine/internal/unit/range-event.d.ts +12 -0
  59. package/engine/internal/unit/range-event.lua +90 -0
  60. package/engine/internal/unit/scale.d.ts +7 -0
  61. package/engine/internal/unit/scale.lua +20 -0
  62. package/engine/internal/unit+bonus.lua +3 -3
  63. package/engine/internal/unit-missile-launch.lua +51 -20
  64. package/engine/internal/unit.d.ts +17 -21
  65. package/engine/internal/unit.lua +170 -195
  66. package/engine/local-client.d.ts +7 -0
  67. package/engine/local-client.lua +86 -1
  68. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  69. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  70. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  71. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  72. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  73. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  74. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  75. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  76. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  77. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  78. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  79. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  80. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  81. package/engine/object-data/entry/ability-type.d.ts +2 -0
  82. package/engine/object-data/entry/ability-type.lua +88 -5
  83. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  84. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  85. package/engine/object-data/entry/destructible-type.lua +155 -0
  86. package/engine/object-data/entry/unit-type.d.ts +4 -0
  87. package/engine/object-data/entry/unit-type.lua +76 -32
  88. package/engine/object-field/ability.d.ts +3 -3
  89. package/engine/object-field/ability.lua +9 -8
  90. package/engine/object-field/item.d.ts +22 -0
  91. package/engine/object-field/item.lua +118 -0
  92. package/engine/object-field/unit.d.ts +20 -5
  93. package/engine/object-field/unit.lua +61 -0
  94. package/engine/object-field.d.ts +12 -4
  95. package/engine/object-field.lua +273 -126
  96. package/engine/random.d.ts +10 -0
  97. package/engine/random.lua +21 -0
  98. package/engine/standard/fields/ability.d.ts +2 -2
  99. package/engine/standard/fields/ability.lua +2 -2
  100. package/engine/standard/fields/item.d.ts +4 -0
  101. package/engine/standard/fields/item.lua +6 -0
  102. package/engine/standard/fields/unit.d.ts +11 -3
  103. package/engine/standard/fields/unit.lua +15 -2
  104. package/engine/synchronization.d.ts +11 -0
  105. package/engine/synchronization.lua +77 -0
  106. package/engine/text-tag.lua +3 -2
  107. package/engine/unit.d.ts +5 -0
  108. package/engine/unit.lua +5 -0
  109. package/lualib_bundle.lua +1 -1
  110. package/math.d.ts +2 -0
  111. package/math.lua +14 -0
  112. package/net/socket.lua +1 -1
  113. package/objutil/buff.lua +10 -8
  114. package/objutil/object.lua +1 -1
  115. package/operation.lua +1 -4
  116. package/package.json +5 -5
  117. package/patch-lua.lua +15 -0
  118. package/patch-lualib.lua +1 -1
  119. package/utility/arrays.d.ts +1 -0
  120. package/utility/arrays.lua +8 -0
  121. package/utility/callback-array.d.ts +17 -0
  122. package/utility/callback-array.lua +61 -0
  123. package/utility/linked-map.d.ts +35 -0
  124. package/utility/linked-map.lua +107 -0
  125. package/utility/linked-set.d.ts +4 -1
  126. package/utility/linked-set.lua +46 -1
  127. package/utility/lua-maps.d.ts +11 -2
  128. package/utility/lua-maps.lua +33 -2
  129. package/utility/records.lua +20 -1
  130. package/utility/types.d.ts +3 -0
  131. package/utility/unordered-map.d.ts +27 -0
  132. package/utility/unordered-map.lua +99 -0
  133. /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.d.ts} +0 -0
  134. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  135. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  136. /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
@@ -19,13 +19,28 @@ local ____frame_2Dcoordinates = require("engine.internal.misc.frame-coordinates"
19
19
  local FRAME_MAX_Y = ____frame_2Dcoordinates.FRAME_MAX_Y
20
20
  local FRAME_MIN_Y = ____frame_2Dcoordinates.FRAME_MIN_Y
21
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
22
36
  local frameClick = BlzFrameClick
23
37
  local frameGetEnable = BlzFrameGetEnable
24
38
  local frameIsVisible = BlzFrameIsVisible
25
39
  local frameSetEnable = BlzFrameSetEnable
26
40
  local frameSetScale = BlzFrameSetScale
27
- local getCameraTargetPositionX = GetCameraTargetPositionX
28
- local getCameraTargetPositionY = GetCameraTargetPositionY
41
+ local getHandleId = GetHandleId
42
+ local getOriginFrame = BlzGetOriginFrame
43
+ local location = Location
29
44
  local ____rawget = _G.rawget
30
45
  local rawset = _G.rawset
31
46
  local invoke = Event.invoke
@@ -127,6 +142,30 @@ do
127
142
  FramePoint.BOTTOM_RIGHT = FRAMEPOINT_BOTTOMRIGHT
128
143
  end
129
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
130
169
  ____exports.Frame = __TS__Class()
131
170
  local Frame = ____exports.Frame
132
171
  Frame.name = "Frame"
@@ -305,7 +344,17 @@ function Frame.byOrigin(self, frameType, index)
305
344
  if index == nil then
306
345
  index = 0
307
346
  end
308
- 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)
309
358
  end
310
359
  Frame.GAME_UI = ____exports.Frame:byOrigin(ORIGIN_FRAME_GAME_UI)
311
360
  Frame.CONSOLE_UI = ____exports.Frame:byOrigin(ORIGIN_FRAME_SIMPLE_UI_PARENT)
@@ -936,16 +985,19 @@ __TS__ObjectDefineProperty(
936
985
  local event = __TS__New(Event)
937
986
  local syncX = 0
938
987
  local syncY = 0
939
- local syncCamX = getCameraTargetPositionX()
940
- local syncCamY = getCameraTargetPositionY()
988
+ local syncFrameX = 0
989
+ local syncFrameY = 0
941
990
  local lastX = syncX
942
991
  local lastY = syncY
943
992
  self.onMouseMove:addListener(function(player, x, y)
944
993
  if player.isLocal then
945
994
  syncX = x
946
995
  syncY = y
947
- syncCamX = getCameraTargetPositionX()
948
- syncCamY = getCameraTargetPositionY()
996
+ syncFrameX, syncFrameY = worldCoordinatesToFrame(
997
+ x,
998
+ y,
999
+ getTerrainZ(x, y)
1000
+ )
949
1001
  lastX = x
950
1002
  lastY = y
951
1003
  invoke(event, x, y)
@@ -955,9 +1007,8 @@ __TS__ObjectDefineProperty(
955
1007
  if syncX == 0 and syncY == 0 then
956
1008
  return
957
1009
  end
958
- local x = syncX + (getCameraTargetPositionX() - syncCamX)
959
- local y = syncY + (getCameraTargetPositionY() - syncCamY)
960
- 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
961
1012
  lastX = x
962
1013
  lastY = y
963
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;
@@ -16,6 +28,7 @@ export declare class Player extends Handle<jplayer> {
16
28
  static readonly neutralExtra: Player;
17
29
  private static events;
18
30
  readonly id: number;
31
+ readonly slotState: jplayerslotstate;
19
32
  constructor(handle: jplayer);
20
33
  onDestroy(): HandleDestructor;
21
34
  toString(): string;
@@ -33,7 +46,6 @@ export declare class Player extends Handle<jplayer> {
33
46
  get isUser(): boolean;
34
47
  get isPlaying(): boolean;
35
48
  get controller(): jmapcontrol;
36
- get slotState(): jplayerslotstate;
37
49
  clearSelection(): void;
38
50
  selectSingle(unit: Unit): void;
39
51
  select(unit: Unit): void;
@@ -42,6 +54,8 @@ export declare class Player extends Handle<jplayer> {
42
54
  forceUICancel(): void;
43
55
  isAllyOf(other: Player): boolean;
44
56
  isEnemyOf(other: Player): boolean;
57
+ setAlliance(other: Player, type: PlayerAllianceType, value: boolean): void;
58
+ getAlliance(other: Player, type: PlayerAllianceType): boolean;
45
59
  setAbilityAvailable(abilityId: number, available: boolean): void;
46
60
  getMaximumUpgradeLevel(upgradeId: UpgradeId): number;
47
61
  setMaximumUpgradeLevel(upgradeId: UpgradeId, maximumLevel: number): void;
@@ -50,6 +64,7 @@ export declare class Player extends Handle<jplayer> {
50
64
  setUpgradeLevel(upgradeId: UpgradeId, level: number): void;
51
65
  private static getEvent;
52
66
  private static getMouseEvent;
67
+ static get allianceChangedEvent(): Readonly<Record<PlayerAllianceType, Event<[Player]>>>;
53
68
  static get onLeave(): Event<[Player]>;
54
69
  static get onMouseDown(): Event<[Player, jmousebuttontype]>;
55
70
  static get onMouseUp(): Event<[Player, jmousebuttontype]>;
@@ -66,6 +81,7 @@ export declare class Player extends Handle<jplayer> {
66
81
  };
67
82
  };
68
83
  static get onChat(): Event<[player: Player, message: string]>;
84
+ static readonly colorChangedEvent: Event<[Player]>;
69
85
  static byId(id: number): Player | undefined;
70
86
  }
71
87
  export {};
@@ -1,7 +1,7 @@
1
1
  local ____lualib = require("lualib_bundle")
2
+ local __TS__New = ____lualib.__TS__New
2
3
  local __TS__Class = ____lualib.__TS__Class
3
4
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
- local __TS__New = ____lualib.__TS__New
5
5
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
6
6
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
7
7
  local ____exports = {}
@@ -23,20 +23,40 @@ local ____math = require("math")
23
23
  local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
24
24
  local ____player_2Dlocal_2Dhandle = require("engine.internal.misc.player-local-handle")
25
25
  local PLAYER_LOCAL_HANDLE = ____player_2Dlocal_2Dhandle.PLAYER_LOCAL_HANDLE
26
+ local ____lazy = require("utility.lazy")
27
+ local lazyRecord = ____lazy.lazyRecord
28
+ local getPlayerAlliance = GetPlayerAlliance
26
29
  local getPlayerColor = GetPlayerColor
27
30
  local getPlayerName = GetPlayerName
28
31
  local getPlayerTechCount = GetPlayerTechCount
29
32
  local getPlayerTechMaxAllowed = GetPlayerTechMaxAllowed
33
+ local getTriggerPlayer = GetTriggerPlayer
34
+ local setPlayerAlliance = SetPlayerAlliance
30
35
  local setPlayerTechMaxAllowed = SetPlayerTechMaxAllowed
31
36
  local setPlayerTechResearched = SetPlayerTechResearched
32
37
  local setPlayerAbilityAvailable = SetPlayerAbilityAvailable
38
+ local triggerRegisterPlayerAllianceChange = TriggerRegisterPlayerAllianceChange
33
39
  local playerNative = _G.Player
40
+ local nativeByPlayerAllianceType = {
41
+ [0] = ALLIANCE_PASSIVE,
42
+ [1] = ALLIANCE_RESCUABLE,
43
+ [2] = ALLIANCE_HELP_REQUEST,
44
+ [3] = ALLIANCE_HELP_RESPONSE,
45
+ [4] = ALLIANCE_SHARED_XP,
46
+ [5] = ALLIANCE_SHARED_SPELLS,
47
+ [6] = ALLIANCE_SHARED_VISION,
48
+ [7] = ALLIANCE_SHARED_VISION_FORCED,
49
+ [8] = ALLIANCE_SHARED_CONTROL,
50
+ [9] = ALLIANCE_SHARED_ADVANCED_CONTROL
51
+ }
52
+ local playerColorChangedEvent = __TS__New(Event)
34
53
  ____exports.Player = __TS__Class()
35
54
  local Player = ____exports.Player
36
55
  Player.name = "Player"
37
56
  __TS__ClassExtends(Player, Handle)
38
57
  function Player.prototype.____constructor(self, handle)
39
58
  Handle.prototype.____constructor(self, handle)
59
+ self.slotState = GetPlayerSlotState(self.handle)
40
60
  self.id = GetPlayerId(handle)
41
61
  end
42
62
  function Player.prototype.onDestroy(self)
@@ -85,6 +105,12 @@ end
85
105
  function Player.prototype.isEnemyOf(self, other)
86
106
  return IsPlayerEnemy(self.handle, other.handle)
87
107
  end
108
+ function Player.prototype.setAlliance(self, other, ____type, value)
109
+ setPlayerAlliance(self.handle, other.handle, nativeByPlayerAllianceType[____type], value)
110
+ end
111
+ function Player.prototype.getAlliance(self, other, ____type)
112
+ return getPlayerAlliance(self.handle, other.handle, nativeByPlayerAllianceType[____type])
113
+ end
88
114
  function Player.prototype.setAbilityAvailable(self, abilityId, available)
89
115
  setPlayerAbilityAvailable(self.handle, abilityId, available)
90
116
  end
@@ -124,14 +150,11 @@ function Player.getMouseEvent(self, event, collector)
124
150
  self.events[eventId] = __TS__New(
125
151
  TriggerEvent,
126
152
  function(trigger)
127
- Timer:simple(
128
- 0,
129
- function()
130
- for ____, player in ipairs(____exports.Player.all) do
131
- TriggerRegisterPlayerEvent(trigger, player.handle, event)
132
- end
153
+ Timer:run(function()
154
+ for ____, player in ipairs(____exports.Player.all) do
155
+ TriggerRegisterPlayerEvent(trigger, player.handle, event)
133
156
  end
134
- )
157
+ end)
135
158
  end,
136
159
  collector or (function() return {} end)
137
160
  )
@@ -180,7 +203,7 @@ function Player.getKeyEvent(self, isDown)
180
203
  TriggerAddCondition(
181
204
  trigger,
182
205
  Condition(function()
183
- local player = ____exports.Player:of(GetTriggerPlayer())
206
+ local player = ____exports.Player:of(getTriggerPlayer())
184
207
  local key = BlzGetTriggerPlayerKey()
185
208
  local metaKey = BlzGetTriggerPlayerMetaKey()
186
209
  Event.invoke(event, player, key, metaKey)
@@ -279,6 +302,7 @@ __TS__SetDescriptor(
279
302
  end,
280
303
  set = function(self, color)
281
304
  SetPlayerColor(self.handle, color.handle)
305
+ Event.invoke(playerColorChangedEvent, self)
282
306
  end
283
307
  },
284
308
  true
@@ -341,7 +365,7 @@ __TS__SetDescriptor(
341
365
  Player.prototype,
342
366
  "isUser",
343
367
  {get = function(self)
344
- return GetPlayerController(self.handle) == MAP_CONTROL_USER
368
+ return self.controller == MAP_CONTROL_USER
345
369
  end},
346
370
  true
347
371
  )
@@ -349,7 +373,7 @@ __TS__SetDescriptor(
349
373
  Player.prototype,
350
374
  "isPlaying",
351
375
  {get = function(self)
352
- return GetPlayerSlotState(self.handle) == PLAYER_SLOT_STATE_PLAYING
376
+ return self.slotState == PLAYER_SLOT_STATE_PLAYING
353
377
  end},
354
378
  true
355
379
  )
@@ -357,17 +381,30 @@ __TS__SetDescriptor(
357
381
  Player.prototype,
358
382
  "controller",
359
383
  {get = function(self)
360
- return GetPlayerController(self.handle)
384
+ local controller = GetPlayerController(self.handle)
385
+ rawset(self, "controller", controller)
386
+ return controller
361
387
  end},
362
388
  true
363
389
  )
364
- __TS__SetDescriptor(
365
- Player.prototype,
366
- "slotState",
390
+ __TS__ObjectDefineProperty(
391
+ Player,
392
+ "allianceChangedEvent",
367
393
  {get = function(self)
368
- return GetPlayerSlotState(self.handle)
369
- end},
370
- true
394
+ local event = lazyRecord(function(____type)
395
+ return __TS__New(
396
+ TriggerEvent,
397
+ function(trigger)
398
+ for ____, player in ipairs(____exports.Player.all) do
399
+ triggerRegisterPlayerAllianceChange(trigger, player.handle, nativeByPlayerAllianceType[____type])
400
+ end
401
+ end,
402
+ function() return ____exports.Player:of(getTriggerPlayer()) end
403
+ )
404
+ end)
405
+ rawset(self, "allianceChangedEvent", event)
406
+ return event
407
+ end}
371
408
  )
372
409
  __TS__ObjectDefineProperty(
373
410
  Player,
@@ -375,7 +412,7 @@ __TS__ObjectDefineProperty(
375
412
  {get = function(self)
376
413
  return ____exports.Player:getEvent(
377
414
  EVENT_PLAYER_LEAVE,
378
- function() return ____exports.Player:of(GetTriggerPlayer()) end
415
+ function() return ____exports.Player:of(getTriggerPlayer()) end
379
416
  )
380
417
  end}
381
418
  )
@@ -385,7 +422,7 @@ __TS__ObjectDefineProperty(
385
422
  {get = function(self)
386
423
  return ____exports.Player:getMouseEvent(
387
424
  EVENT_PLAYER_MOUSE_DOWN,
388
- function() return ____exports.Player:of(GetTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
425
+ function() return ____exports.Player:of(getTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
389
426
  )
390
427
  end}
391
428
  )
@@ -395,7 +432,7 @@ __TS__ObjectDefineProperty(
395
432
  {get = function(self)
396
433
  return ____exports.Player:getMouseEvent(
397
434
  EVENT_PLAYER_MOUSE_UP,
398
- function() return ____exports.Player:of(GetTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
435
+ function() return ____exports.Player:of(getTriggerPlayer()), BlzGetTriggerPlayerMouseButton() end
399
436
  )
400
437
  end}
401
438
  )
@@ -405,7 +442,7 @@ __TS__ObjectDefineProperty(
405
442
  {get = function(self)
406
443
  return ____exports.Player:getMouseEvent(
407
444
  EVENT_PLAYER_MOUSE_MOVE,
408
- function() return ____exports.Player:of(GetTriggerPlayer()), vec2(
445
+ function() return ____exports.Player:of(getTriggerPlayer()), vec2(
409
446
  BlzGetTriggerPlayerMouseX(),
410
447
  BlzGetTriggerPlayerMouseY()
411
448
  ) end
@@ -441,10 +478,17 @@ __TS__ObjectDefineProperty(
441
478
  TriggerRegisterPlayerChatEvent(trigger, player.handle, "", false)
442
479
  end
443
480
  end,
444
- function() return ____exports.Player:of(GetTriggerPlayer()), GetEventPlayerChatString() end
481
+ function() return ____exports.Player:of(getTriggerPlayer()), GetEventPlayerChatString() end
445
482
  )
446
483
  rawset(self, "onChat", event)
447
484
  return event
448
485
  end}
449
486
  )
487
+ Player.colorChangedEvent = playerColorChangedEvent
488
+ ____exports.Player.onLeave:addListener(
489
+ 999999,
490
+ function(player)
491
+ rawset(player, "slotState", PLAYER_SLOT_STATE_LEFT)
492
+ end
493
+ )
450
494
  return ____exports
@@ -13,6 +13,8 @@ local ____frame_2Dcoordinates = require("engine.internal.misc.frame-coordinates"
13
13
  local FRAME_MAX_Y = ____frame_2Dcoordinates.FRAME_MAX_Y
14
14
  local FRAME_MIN_Y = ____frame_2Dcoordinates.FRAME_MIN_Y
15
15
  local getFrameMinXMaxX = ____frame_2Dcoordinates.getFrameMinXMaxX
16
+ local ____get_2Dterrain_2Dz = require("engine.internal.misc.get-terrain-z")
17
+ local getTerrainZ = ____get_2Dterrain_2Dz.getTerrainZ
16
18
  local getHandleId = GetHandleId
17
19
  local setCameraField = SetCameraField
18
20
  local getCameraField = GetCameraField
@@ -26,6 +28,7 @@ local resetToGameCamera = ResetToGameCamera
26
28
  local cos = math.cos
27
29
  local deg = math.deg
28
30
  local sin = math.sin
31
+ local sqrt = math.sqrt
29
32
  local memoized = {}
30
33
  ____exports.PlayerCamera = __TS__Class()
31
34
  local PlayerCamera = ____exports.PlayerCamera
@@ -233,4 +236,45 @@ ____exports.worldCoordinatesToFrame = function(x, y, z)
233
236
  local frameY = 0.42625 - yCenterScreenShift + (cameraAngleOfAttackSinRotationCos * dx + cameraAngleOfAttackSinRotationSin * dy - cameraAngleOfAttackCos * dz) / xPrime
234
237
  return frameX, frameY, xPrime < 0 and frameX >= frameMinX and frameX <= frameMaxX and frameY >= FRAME_MIN_Y and frameY <= FRAME_MAX_Y
235
238
  end
239
+ ---
240
+ -- @internal For use by internal systems only.
241
+ ____exports.frameCoordinatesToWorld = function(x, y)
242
+ if not isCameraViewPrecalculated then
243
+ precalculateCameraView()
244
+ end
245
+ local a = (x - 0.4) * scaleFactor
246
+ local b = (0.42625 - yCenterScreenShift - y) * scaleFactor
247
+ local nx = 1 / sqrt(1 + a * a + b * b)
248
+ local ny = sqrt(1 - (1 + b * b) * nx * nx)
249
+ local nz = sqrt(1 - nx * nx - ny * ny)
250
+ if a > 0 then
251
+ ny = -ny
252
+ end
253
+ if b < 0 then
254
+ nz = -nz
255
+ end
256
+ local nxPrime = cameraAngleOfAttackCosRotationCos * nx - cameraRotationSin * ny + cameraAngleOfAttackSinRotationCos * nz
257
+ local nyPrime = cameraAngleOfAttackCosRotationSin * nx + cameraRotationCos * ny + cameraAngleOfAttackSinRotationSin * nz
258
+ local nzPrime = -cameraAngleOfAttackSin * nx + cameraAngleOfAttackCos * nz
259
+ local zGuess = getTerrainZ(cameraEyeX, cameraEyeY)
260
+ local xGuess = cameraEyeX + nxPrime * (cameraEyeZ - zGuess) / nzPrime
261
+ local yGuess = cameraEyeY + nyPrime * (cameraEyeZ - zGuess) / nzPrime
262
+ local zWorld = getTerrainZ(xGuess, yGuess)
263
+ local deltaZ = zWorld - zGuess
264
+ zGuess = zWorld
265
+ local zWorldOld = zWorld
266
+ local deltaZOld = deltaZ
267
+ local i = 0
268
+ while (deltaZ > 1 or deltaZ < -1) and i < 50 do
269
+ xGuess = cameraEyeX + nxPrime * (cameraEyeZ - zGuess) / nzPrime
270
+ yGuess = cameraEyeY + nyPrime * (cameraEyeZ - zGuess) / nzPrime
271
+ zWorld = getTerrainZ(xGuess, yGuess)
272
+ deltaZ = zWorld - zGuess
273
+ zGuess = (deltaZOld * zWorld - deltaZ * zWorldOld) / (deltaZOld - deltaZ)
274
+ zWorldOld = zWorld
275
+ deltaZOld = deltaZ
276
+ i = i + 1
277
+ end
278
+ return xGuess, yGuess, zWorld, i < 50
279
+ end
236
280
  return ____exports
@@ -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[];
@@ -1,7 +1,14 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
3
4
  local __TS__New = ____lualib.__TS__New
5
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
4
6
  local ____exports = {}
7
+ local ____attributes = require("attributes")
8
+ local AttributesHolder = ____attributes.AttributesHolder
9
+ local getTerrainType = GetTerrainType
10
+ local setTerrainType = SetTerrainType
11
+ local getTerrainVariance = GetTerrainVariance
5
12
  local abs = math.abs
6
13
  local ____type = math.type
7
14
  local ult = math.ult
@@ -9,13 +16,27 @@ local tileCellById = {}
9
16
  ____exports.TileCell = __TS__Class()
10
17
  local TileCell = ____exports.TileCell
11
18
  TileCell.name = "TileCell"
19
+ __TS__ClassExtends(TileCell, AttributesHolder)
12
20
  function TileCell.prototype.____constructor(self, id, x, y, z)
21
+ AttributesHolder.prototype.____constructor(self)
13
22
  self.id = id
14
23
  self.x = x
15
24
  self.y = y
16
25
  self.z = z
17
26
  tileCellById[id] = self
18
27
  end
28
+ function TileCell.prototype.randomizeTerrainVariance(self)
29
+ local x = self.x
30
+ local y = self.y
31
+ setTerrainType(
32
+ x,
33
+ y,
34
+ getTerrainType(x, y),
35
+ -1,
36
+ 1,
37
+ 1
38
+ )
39
+ end
19
40
  function TileCell.prototype.isInRangeOf(self, x, y, range)
20
41
  if range == nil then
21
42
  range = y
@@ -97,4 +118,80 @@ function TileCell.of(x, y)
97
118
  nil
98
119
  )
99
120
  end
121
+ __TS__SetDescriptor(
122
+ TileCell.prototype,
123
+ "up",
124
+ {get = function(self)
125
+ return ____exports.TileCell.of(self.x, self.y + 128)
126
+ end},
127
+ true
128
+ )
129
+ __TS__SetDescriptor(
130
+ TileCell.prototype,
131
+ "down",
132
+ {get = function(self)
133
+ return ____exports.TileCell.of(self.x, self.y - 128)
134
+ end},
135
+ true
136
+ )
137
+ __TS__SetDescriptor(
138
+ TileCell.prototype,
139
+ "left",
140
+ {get = function(self)
141
+ return ____exports.TileCell.of(self.x - 128, self.y)
142
+ end},
143
+ true
144
+ )
145
+ __TS__SetDescriptor(
146
+ TileCell.prototype,
147
+ "right",
148
+ {get = function(self)
149
+ return ____exports.TileCell.of(self.x + 128, self.y)
150
+ end},
151
+ true
152
+ )
153
+ __TS__SetDescriptor(
154
+ TileCell.prototype,
155
+ "terrainTypeId",
156
+ {
157
+ get = function(self)
158
+ return getTerrainType(self.x, self.y)
159
+ end,
160
+ set = function(self, terrainTypeId)
161
+ local x = self.x
162
+ local y = self.y
163
+ setTerrainType(
164
+ x,
165
+ y,
166
+ terrainTypeId,
167
+ getTerrainVariance(x, y),
168
+ 1,
169
+ 1
170
+ )
171
+ end
172
+ },
173
+ true
174
+ )
175
+ __TS__SetDescriptor(
176
+ TileCell.prototype,
177
+ "terrainVariance",
178
+ {
179
+ get = function(self)
180
+ return getTerrainVariance(self.x, self.y)
181
+ end,
182
+ set = function(self, terrainVariance)
183
+ local x = self.x
184
+ local y = self.y
185
+ setTerrainType(
186
+ x,
187
+ y,
188
+ getTerrainType(x, y),
189
+ terrainVariance,
190
+ 1,
191
+ 1
192
+ )
193
+ end
194
+ },
195
+ true
196
+ )
100
197
  return ____exports
@@ -1,6 +1,7 @@
1
1
  /** @noSelfInFile */
2
2
  import { Event } from "../../event";
3
3
  import { AbstractDestroyable, Destructor } from "../../destroyable";
4
+ import { CallbackId } from "../../utility/callback-array";
4
5
  declare const enum TimerPropertyKey {
5
6
  HANDLE = 0,
6
7
  DESTROY_ON_EXPIRATION = 1,
@@ -22,8 +23,8 @@ export declare class Timer extends AbstractDestroyable {
22
23
  pause(): void;
23
24
  resume(): void;
24
25
  static create(): Timer;
25
- static run<T, K extends KeysOfType<T, (this: T, ...args: any) => any>>(object: T, key: K, ...parameters: T[K] extends (this: T, ...args: any) => any ? Parameters<T[K]> : never): void;
26
- static run<Args extends any[]>(callback: (this: void, ...args: Args) => void, ...args: Args): void;
26
+ static run<T, K extends KeysOfType<T, (this: T, ...args: any) => any>>(object: T, key: K, ...parameters: T[K] extends (this: T, ...args: any) => any ? Parameters<T[K]> : never): CallbackId;
27
+ static run<Args extends any[]>(callback: (this: void, ...args: Args) => void, ...args: Args): CallbackId;
27
28
  static simple<Args extends any[]>(timeout: number, callback: (...args: Args) => void, ...args: Args): Timer;
28
29
  static periodic<Args extends any[]>(period: number, callback: (this: void, timer: Timer, ...args: Args) => void, ...args: Args): Timer;
29
30
  static counted(period: number, count: number, callback: (this: void, timer: Timer) => void): Timer;