warscript 0.0.1-dev.48e5280 → 0.0.1-dev.4b6e45a
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.
- package/core/dummy.lua +4 -2
- package/core/types/effect.d.ts +11 -1
- package/core/types/effect.lua +43 -77
- package/core/types/frame.d.ts +21 -2
- package/core/types/frame.lua +153 -78
- package/core/types/handle.lua +9 -9
- package/core/types/item.d.ts +1 -0
- package/core/types/item.lua +1 -0
- package/core/types/missile.lua +8 -7
- package/core/types/player.d.ts +2 -1
- package/core/types/player.lua +18 -13
- package/core/types/playerCamera.lua +1 -1
- package/core/types/playerColor.lua +4 -3
- package/core/types/sound.d.ts +1 -1
- package/core/types/sound.lua +14 -9
- package/core/types/tileCell.d.ts +7 -2
- package/core/types/tileCell.lua +11 -0
- package/core/types/unit.d.ts +5 -0
- package/core/types/unit.lua +5 -0
- package/core/util.d.ts +3 -1
- package/core/util.lua +109 -3
- package/decl/native.d.ts +706 -7
- package/engine/ability-type-extended-tooltip.d.ts +8 -0
- package/engine/ability-type-extended-tooltip.lua +44 -0
- package/engine/behaviour/ability/apply-unit-behavior.lua +5 -0
- package/engine/behaviour/ability/damage.d.ts +4 -0
- package/engine/behaviour/ability/damage.lua +19 -15
- package/engine/behaviour/ability/emulate-impact.d.ts +14 -0
- package/engine/behaviour/ability/emulate-impact.lua +79 -5
- package/engine/behaviour/ability/instant-impact.d.ts +12 -1
- package/engine/behaviour/ability/instant-impact.lua +17 -2
- package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
- package/engine/behaviour/ability/on-command-impact.lua +1 -0
- package/engine/behaviour/ability.d.ts +8 -0
- package/engine/behaviour/ability.lua +89 -8
- package/engine/behaviour/unit.d.ts +1 -0
- package/engine/behaviour/unit.lua +1 -0
- package/engine/buff.d.ts +79 -55
- package/engine/buff.lua +376 -246
- package/engine/index.d.ts +2 -1
- package/engine/internal/ability.d.ts +7 -0
- package/engine/internal/ability.lua +65 -36
- package/engine/internal/item/fields.d.ts +12 -0
- package/engine/internal/item/fields.lua +33 -0
- package/engine/internal/item/owner-cache.d.ts +5 -0
- package/engine/internal/item/owner-cache.lua +4 -0
- package/engine/internal/item+owner.d.ts +2 -0
- package/engine/internal/item+owner.lua +27 -4
- package/engine/internal/item.d.ts +20 -5
- package/engine/internal/item.lua +146 -57
- package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
- package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
- package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
- package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
- package/engine/internal/object-data/returned-melee-damage-factor.d.ts +2 -0
- package/engine/internal/object-data/returned-melee-damage-factor.lua +21 -0
- package/engine/internal/unit/ability.lua +16 -0
- package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
- package/engine/internal/unit/add-item-to-slot.lua +53 -12
- package/engine/internal/unit/appearance.d.ts +15 -0
- package/engine/internal/unit/appearance.lua +85 -0
- package/engine/internal/unit/bonus.d.ts +11 -0
- package/engine/internal/unit/bonus.lua +80 -5
- package/engine/internal/unit/buff.d.ts +2 -2
- package/engine/internal/unit/buff.lua +34 -19
- package/engine/internal/unit/equipment-inventory.d.ts +44 -0
- package/engine/internal/unit/equipment-inventory.lua +233 -0
- package/engine/internal/unit/expiration-timer.lua +1 -1
- package/engine/internal/unit/extended-inventory.d.ts +25 -0
- package/engine/internal/unit/extended-inventory.lua +99 -0
- package/engine/internal/unit/ignore-events-items.lua +10 -1
- package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
- package/engine/internal/unit/inventory.lua +87 -0
- package/engine/internal/unit/item-container.d.ts +25 -0
- package/engine/internal/unit/item-container.lua +11 -0
- package/engine/internal/unit/item-order-events.d.ts +17 -0
- package/engine/internal/unit/item-order-events.lua +67 -0
- package/engine/internal/unit/item-slot.d.ts +27 -0
- package/engine/internal/unit/item-slot.lua +92 -0
- package/engine/internal/unit/order.d.ts +3 -3
- package/engine/internal/unit/order.lua +10 -10
- package/engine/internal/unit/shared-vision-counter.d.ts +18 -0
- package/engine/internal/unit/shared-vision-counter.lua +31 -0
- package/engine/internal/unit+ability.d.ts +2 -1
- package/engine/internal/unit+ability.lua +73 -2
- package/engine/internal/unit+damage.d.ts +9 -0
- package/engine/internal/unit+damage.lua +33 -0
- package/engine/internal/unit+rally.lua +9 -31
- package/engine/internal/unit-missile-data.lua +96 -68
- package/engine/internal/unit-missile-launch.lua +13 -13
- package/engine/internal/unit.d.ts +5 -10
- package/engine/internal/unit.lua +67 -101
- package/engine/lightning.lua +4 -4
- package/engine/local-client.d.ts +26 -0
- package/engine/local-client.lua +294 -54
- package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -0
- package/engine/object-data/auxiliary/attachment-preset.lua +7 -0
- package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
- package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
- package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
- package/engine/object-data/auxiliary/equipment-type.lua +26 -0
- package/engine/object-data/auxiliary/item-class.d.ts +11 -0
- package/engine/object-data/auxiliary/item-class.lua +2 -0
- package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
- package/engine/object-data/auxiliary/item-tag.lua +2 -0
- package/engine/object-data/auxiliary/order-type.d.ts +939 -0
- package/engine/object-data/auxiliary/order-type.lua +2 -0
- package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
- package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
- package/engine/object-data/auxiliary/unit-weapon-type.d.ts +21 -0
- package/engine/object-data/auxiliary/unit-weapon-type.lua +2 -0
- package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
- package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
- package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
- package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
- package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
- package/engine/object-data/entry/ability-type/banshee.lua +13 -0
- package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
- package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
- package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
- package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
- package/engine/object-data/entry/ability-type/barrage.d.ts +12 -0
- package/engine/object-data/entry/ability-type/barrage.lua +52 -0
- package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
- package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
- package/engine/object-data/entry/ability-type/blank-configurable.lua +2 -2
- package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
- package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
- package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
- package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
- package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
- package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
- package/engine/object-data/entry/ability-type/channel.d.ts +2 -2
- package/engine/object-data/entry/ability-type/channel.lua +3 -3
- package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
- package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
- package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
- package/engine/object-data/entry/ability-type/consecration.lua +52 -0
- package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
- package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
- package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
- package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
- package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
- package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
- package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
- package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
- package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
- package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
- package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
- package/engine/object-data/entry/ability-type/equipment.lua +27 -0
- package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
- package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
- package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
- package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
- package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
- package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
- package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
- package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
- package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
- package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
- package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
- package/engine/object-data/entry/ability-type/grit.lua +65 -0
- package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
- package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
- package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
- package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
- package/engine/object-data/entry/ability-type/healing-modifier.d.ts +9 -0
- package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
- package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
- package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
- package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
- package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
- package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
- package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
- package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
- package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
- package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
- package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
- package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
- package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
- package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
- package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
- package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
- package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
- package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
- package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
- package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
- package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
- package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
- package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
- package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
- package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
- package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
- package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
- package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
- package/engine/object-data/entry/ability-type/provoke.lua +66 -0
- package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
- package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
- package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
- package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
- package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
- package/engine/object-data/entry/ability-type/resolve.lua +39 -0
- package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
- package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
- package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
- package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
- package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
- package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
- package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
- package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
- package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
- package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
- package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
- package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
- package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
- package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
- package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
- package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
- package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
- package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
- package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
- package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
- package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
- package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
- package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
- package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
- package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
- package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
- package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
- package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
- package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
- package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
- package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
- package/engine/object-data/entry/ability-type/talents.lua +27 -0
- package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
- package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
- package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
- package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
- package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
- package/engine/object-data/entry/ability-type/warcry.lua +26 -0
- package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
- package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
- package/engine/object-data/entry/ability-type.d.ts +33 -8
- package/engine/object-data/entry/ability-type.lua +256 -48
- package/engine/object-data/entry/buff-type/applicable.lua +122 -111
- package/engine/object-data/entry/buff-type.d.ts +6 -2
- package/engine/object-data/entry/buff-type.lua +26 -0
- package/engine/object-data/entry/destructible-type.d.ts +6 -2
- package/engine/object-data/entry/destructible-type.lua +26 -0
- package/engine/object-data/entry/item-type.d.ts +18 -3
- package/engine/object-data/entry/item-type.lua +84 -0
- package/engine/object-data/entry/lightning-type.d.ts +6 -8
- package/engine/object-data/entry/lightning-type.lua +1 -1
- package/engine/object-data/entry/sound-preset.d.ts +2 -2
- package/engine/object-data/entry/unit-type.d.ts +57 -2
- package/engine/object-data/entry/unit-type.lua +412 -64
- package/engine/object-data/entry/upgrade.d.ts +2 -2
- package/engine/object-data/entry.d.ts +6 -1
- package/engine/object-data/entry.lua +8 -0
- package/engine/object-field/ability.lua +2 -2
- package/engine/object-field/item.d.ts +22 -0
- package/engine/object-field/item.lua +118 -0
- package/engine/object-field.d.ts +1 -1
- package/engine/object-field.lua +9 -7
- package/engine/random.lua +1 -1
- package/engine/standard/entries/ability-type.d.ts +3102 -7
- package/engine/standard/entries/ability-type.lua +0 -6
- package/engine/standard/entries/buff-type.d.ts +45 -0
- package/engine/standard/entries/buff-type.lua +43 -0
- package/engine/standard/entries/item-type.d.ts +1299 -0
- package/engine/standard/entries/item-type.lua +2 -0
- package/engine/standard/entries/lightning-type.d.ts +42 -15
- package/engine/standard/entries/lightning-type.lua +0 -14
- package/engine/standard/entries/unit-type.d.ts +5 -0
- package/engine/standard/entries/unit-type.lua +5 -0
- package/engine/standard/fields/ability.d.ts +2 -2
- package/engine/standard/fields/ability.lua +2 -2
- package/engine/standard/fields/item.d.ts +4 -0
- package/engine/standard/fields/item.lua +6 -0
- package/engine/text-tag.d.ts +13 -1
- package/engine/text-tag.lua +79 -42
- package/engine/unit.d.ts +6 -1
- package/engine/unit.lua +6 -1
- package/event.d.ts +1 -1
- package/lualib_bundle.lua +1 -1
- package/math.d.ts +2 -0
- package/math.lua +14 -0
- package/network.lua +25 -1
- package/objutil/buff.lua +1 -1
- package/objutil/object.lua +1 -1
- package/operation.d.ts +8 -1
- package/operation.lua +38 -18
- package/package.json +3 -23
- package/utility/arrays.d.ts +7 -1
- package/utility/arrays.lua +17 -0
- package/utility/linked-map.d.ts +2 -1
- package/utility/linked-map.lua +6 -0
- package/utility/linked-set.d.ts +1 -0
- package/utility/linked-set.lua +6 -0
- package/utility/random.d.ts +102 -0
- package/utility/random.lua +273 -0
- package/utility/unordered-map.d.ts +27 -0
- package/utility/unordered-map.lua +99 -0
- package/engine/internal/unit/item.lua +0 -78
package/operation.lua
CHANGED
|
@@ -22,10 +22,7 @@ OperationMonitor.name = "OperationMonitor"
|
|
|
22
22
|
__TS__ClassExtends(OperationMonitor, __TS__Promise)
|
|
23
23
|
function OperationMonitor.prototype.____constructor(self, operation, ...)
|
|
24
24
|
local args = {...}
|
|
25
|
-
__TS__Promise.prototype.____constructor(
|
|
26
|
-
self,
|
|
27
|
-
table.unpack(args)
|
|
28
|
-
)
|
|
25
|
+
__TS__Promise.prototype.____constructor(self, ...)
|
|
29
26
|
self.o = operation
|
|
30
27
|
end
|
|
31
28
|
function OperationMonitor.prototype.cancel(self)
|
|
@@ -38,9 +35,10 @@ local Operation = ____exports.Operation
|
|
|
38
35
|
Operation.name = "Operation"
|
|
39
36
|
function Operation.prototype.____constructor(self)
|
|
40
37
|
self.started = false
|
|
38
|
+
self.settled = false
|
|
39
|
+
self.canceled = false
|
|
41
40
|
self.progress = 0
|
|
42
41
|
self.maximum = 0
|
|
43
|
-
self.isCanceled = false
|
|
44
42
|
end
|
|
45
43
|
function Operation.prototype.execute(self)
|
|
46
44
|
if self.started then
|
|
@@ -58,6 +56,12 @@ function Operation.prototype.execute(self)
|
|
|
58
56
|
local result
|
|
59
57
|
local progress = self.progress
|
|
60
58
|
local ____try = __TS__AsyncAwaiter(function()
|
|
59
|
+
if self.canceled then
|
|
60
|
+
error(
|
|
61
|
+
__TS__New(CancellationException),
|
|
62
|
+
0
|
|
63
|
+
)
|
|
64
|
+
end
|
|
61
65
|
local maximum = __TS__Await(self:estimate())
|
|
62
66
|
self.maximum = maximum
|
|
63
67
|
if maximum ~= 0 then
|
|
@@ -68,20 +72,19 @@ function Operation.prototype.execute(self)
|
|
|
68
72
|
end
|
|
69
73
|
repeat
|
|
70
74
|
do
|
|
71
|
-
if self.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
Event.invoke(onFailure, self, reason)
|
|
77
|
-
end
|
|
78
|
-
local onComplete = ____rawget(self, "onComplete")
|
|
79
|
-
if onComplete ~= nil then
|
|
80
|
-
Event.invoke(onComplete, self, false, reason)
|
|
81
|
-
end
|
|
82
|
-
return ____awaiter_resolve(nil)
|
|
75
|
+
if self.canceled then
|
|
76
|
+
error(
|
|
77
|
+
__TS__New(CancellationException),
|
|
78
|
+
0
|
|
79
|
+
)
|
|
83
80
|
end
|
|
84
81
|
result = __TS__Await(self:work())
|
|
82
|
+
if self.canceled then
|
|
83
|
+
error(
|
|
84
|
+
__TS__New(CancellationException),
|
|
85
|
+
0
|
|
86
|
+
)
|
|
87
|
+
end
|
|
85
88
|
if self.progress ~= progress or self.maximum ~= maximum then
|
|
86
89
|
progress = self.progress
|
|
87
90
|
maximum = self.maximum
|
|
@@ -96,6 +99,7 @@ function Operation.prototype.execute(self)
|
|
|
96
99
|
__TS__Await(____try.catch(
|
|
97
100
|
____try,
|
|
98
101
|
function(____, reason)
|
|
102
|
+
self.settled = true
|
|
99
103
|
reject(nil, reason)
|
|
100
104
|
local onFailure = ____rawget(self, "onFailure")
|
|
101
105
|
if onFailure ~= nil then
|
|
@@ -108,6 +112,7 @@ function Operation.prototype.execute(self)
|
|
|
108
112
|
return ____awaiter_resolve(nil)
|
|
109
113
|
end
|
|
110
114
|
))
|
|
115
|
+
self.settled = true
|
|
111
116
|
resolve(nil, result)
|
|
112
117
|
local onSuccess = ____rawget(self, "onSuccess")
|
|
113
118
|
if onSuccess ~= nil then
|
|
@@ -122,12 +127,27 @@ function Operation.prototype.execute(self)
|
|
|
122
127
|
)
|
|
123
128
|
end
|
|
124
129
|
function Operation.prototype.cancel(self)
|
|
130
|
+
if self.canceled then
|
|
131
|
+
return true
|
|
132
|
+
end
|
|
133
|
+
if self.settled then
|
|
134
|
+
return false
|
|
135
|
+
end
|
|
136
|
+
self.canceled = true
|
|
125
137
|
if self:doCancel() then
|
|
126
|
-
self.isCanceled = true
|
|
127
138
|
return true
|
|
128
139
|
end
|
|
140
|
+
self.canceled = false
|
|
129
141
|
return false
|
|
130
142
|
end
|
|
143
|
+
__TS__SetDescriptor(
|
|
144
|
+
Operation.prototype,
|
|
145
|
+
"isCanceled",
|
|
146
|
+
{get = function(self)
|
|
147
|
+
return self.canceled
|
|
148
|
+
end},
|
|
149
|
+
true
|
|
150
|
+
)
|
|
131
151
|
__TS__SetDescriptor(
|
|
132
152
|
Operation.prototype,
|
|
133
153
|
"isStarted",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package",
|
|
3
3
|
"name": "warscript",
|
|
4
|
-
"version": "0.0.1-dev.
|
|
4
|
+
"version": "0.0.1-dev.4b6e45a",
|
|
5
5
|
"description": "A typescript library for Warcraft III using Warpack.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"warcraft",
|
|
@@ -13,31 +13,11 @@
|
|
|
13
13
|
"type": "git",
|
|
14
14
|
"url": "git+https://github.com/rhazarian/warscript.git"
|
|
15
15
|
},
|
|
16
|
-
"scripts": {
|
|
17
|
-
"clean": "rimraf dist",
|
|
18
|
-
"prebuild": "npm run clean",
|
|
19
|
-
"build": "tstl && copyfiles -u 1 \"src/**/*.d.ts\" \"src/**/*.lua\" dist && copyfiles LICENSE package.json dist",
|
|
20
|
-
"prepublishOnly": "echo You should run 'npm run publish' instead. && exit 1",
|
|
21
|
-
"publish": "npm run build && npm publish ./dist --ignore-scripts"
|
|
22
|
-
},
|
|
23
16
|
"peerDependencies": {
|
|
24
17
|
"@warscript/language-extensions": "^0.0.1",
|
|
25
|
-
"@warscript/tstl-plugin": "^0.0.
|
|
18
|
+
"@warscript/tstl-plugin": "^0.0.6",
|
|
26
19
|
"lua-types": "^2.13.1",
|
|
27
|
-
"warpack": "0.0.1-dev.
|
|
28
|
-
},
|
|
29
|
-
"devDependencies": {
|
|
30
|
-
"@typescript-eslint/eslint-plugin": "^8.13.0",
|
|
31
|
-
"@typescript-eslint/parser": "^8.13.0",
|
|
32
|
-
"async": "^3.2.6",
|
|
33
|
-
"copyfiles": "^2.4.1",
|
|
34
|
-
"eslint": "^9.14.0",
|
|
35
|
-
"eslint-config-prettier": "^9.1.0",
|
|
36
|
-
"eslint-plugin-prettier": "^5.2.1",
|
|
37
|
-
"prettier": "^3.3.3",
|
|
38
|
-
"rimraf": "^6.0.1",
|
|
39
|
-
"ts-node": "^10.9.2",
|
|
40
|
-
"tsc-watch": "^6.2.0"
|
|
20
|
+
"warpack": "0.0.1-dev.eb3e92a"
|
|
41
21
|
},
|
|
42
22
|
"publishConfig": {
|
|
43
23
|
"access": "public",
|
package/utility/arrays.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
|
-
import { TupleOf } from "./types";
|
|
2
|
+
import { NonEmptyArray, ReadonlyNonEmptyArray, TupleOf } from "./types";
|
|
3
3
|
export declare const emptyArray: <T>() => readonly T[];
|
|
4
|
+
/** Checks for any element with `next` instead of computing the length. */
|
|
5
|
+
export declare const isNonEmptyArray: {
|
|
6
|
+
<T>(array: T[]): array is NonEmptyArray<T>;
|
|
7
|
+
<T>(array: readonly T[]): array is ReadonlyNonEmptyArray<T>;
|
|
8
|
+
};
|
|
4
9
|
export declare const joinToString: <T>(array: readonly T[], separator: string, transform?: (element: T) => string) => string;
|
|
5
10
|
export declare const arrayOfNotNull: <T>(...elements: readonly (T | undefined | null)[]) => T[];
|
|
6
11
|
export declare const array: <T, N extends number>(length: N, initialize: (index: number) => T) => TupleOf<T, N>;
|
|
@@ -42,6 +47,7 @@ export declare const associateByIndexed: <K extends AnyNotNil, V>(array: readonl
|
|
|
42
47
|
export declare const associateWith: <K extends AnyNotNil, V>(array: readonly K[], valueSelector: (value: K) => V) => LuaMap<K, V>;
|
|
43
48
|
export declare const associateWithIndexed: <K extends AnyNotNil, V>(array: readonly K[], valueSelector: (index: number, value: K) => V) => LuaMap<K, V>;
|
|
44
49
|
export declare const filter: <T>(array: readonly T[], predicate: (value: T) => boolean) => T[];
|
|
50
|
+
export declare const filterNot: <T>(array: readonly T[], predicate: (value: T) => boolean) => T[];
|
|
45
51
|
export declare const average: (array: readonly number[]) => number;
|
|
46
52
|
export declare const sum: (array: readonly number[]) => number;
|
|
47
53
|
export declare const product: (array: readonly number[]) => number;
|
package/utility/arrays.lua
CHANGED
|
@@ -7,6 +7,7 @@ local ____functions = require("utility.functions")
|
|
|
7
7
|
local identity = ____functions.identity
|
|
8
8
|
local mathMax = math.max
|
|
9
9
|
local mathMin = math.min
|
|
10
|
+
local next = _G.next
|
|
10
11
|
local select = _G.select
|
|
11
12
|
local tableConcat = table.concat
|
|
12
13
|
local tableSort = table.sort
|
|
@@ -14,6 +15,10 @@ local EMPTY_ARRAY = {}
|
|
|
14
15
|
____exports.emptyArray = function()
|
|
15
16
|
return EMPTY_ARRAY
|
|
16
17
|
end
|
|
18
|
+
--- Checks for any element with `next` instead of computing the length.
|
|
19
|
+
____exports.isNonEmptyArray = function(array)
|
|
20
|
+
return (next(array)) ~= nil
|
|
21
|
+
end
|
|
17
22
|
____exports.joinToString = function(array, separator, transform)
|
|
18
23
|
if transform == nil then
|
|
19
24
|
transform = tostring
|
|
@@ -238,6 +243,18 @@ ____exports.filter = function(array, predicate)
|
|
|
238
243
|
end
|
|
239
244
|
return result
|
|
240
245
|
end
|
|
246
|
+
____exports.filterNot = function(array, predicate)
|
|
247
|
+
local result = {}
|
|
248
|
+
local j = 1
|
|
249
|
+
for i = 1, #array do
|
|
250
|
+
local value = array[i]
|
|
251
|
+
if not predicate(value) then
|
|
252
|
+
result[j] = value
|
|
253
|
+
j = j + 1
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
return result
|
|
257
|
+
end
|
|
241
258
|
____exports.average = function(array)
|
|
242
259
|
local sum = 0
|
|
243
260
|
local count = #array
|
package/utility/linked-map.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export interface ReadonlyLinkedMap<K extends AnyNotNil, V> extends LuaPairsItera
|
|
|
15
15
|
readonly size: number;
|
|
16
16
|
}
|
|
17
17
|
export interface LinkedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
|
|
18
|
-
readonly
|
|
18
|
+
readonly __linkedMap: unique symbol;
|
|
19
19
|
}
|
|
20
20
|
export declare class LinkedMap<K extends AnyNotNil, V> implements ReadonlyLinkedMap<K, V> {
|
|
21
21
|
private k;
|
|
@@ -27,6 +27,7 @@ export declare class LinkedMap<K extends AnyNotNil, V> implements ReadonlyLinked
|
|
|
27
27
|
remove(key: K): boolean;
|
|
28
28
|
contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
|
|
29
29
|
get size(): number;
|
|
30
|
+
protected __len(): number;
|
|
30
31
|
protected __pairs(this: LinkedMap<K, V>): LuaIterator<LuaMultiReturn<[K | undefined, V | undefined]>, IteratorState<K, V>>;
|
|
31
32
|
}
|
|
32
33
|
export declare const emptyLinkedMap: <K extends AnyNotNil, V>() => ReadonlyLinkedMap<K, V>;
|
package/utility/linked-map.lua
CHANGED
|
@@ -47,6 +47,9 @@ end
|
|
|
47
47
|
function LinkedMap.prototype.contains(self, key)
|
|
48
48
|
return self.keys:contains(key)
|
|
49
49
|
end
|
|
50
|
+
function LinkedMap.prototype.__len(self)
|
|
51
|
+
return self.keys.size
|
|
52
|
+
end
|
|
50
53
|
function LinkedMap.prototype.__pairs(self)
|
|
51
54
|
return linkedMapNext, {n = self.k.f, t = self.k.n, v = self.v}, nil
|
|
52
55
|
end
|
|
@@ -88,6 +91,9 @@ function EmptyLinkedMap.prototype.remove(self)
|
|
|
88
91
|
0
|
|
89
92
|
)
|
|
90
93
|
end
|
|
94
|
+
function EmptyLinkedMap.prototype.__len(self)
|
|
95
|
+
return 0
|
|
96
|
+
end
|
|
91
97
|
function EmptyLinkedMap.prototype.__pairs(self)
|
|
92
98
|
return linkedMapNext, emptyIteratorState, nil
|
|
93
99
|
end
|
package/utility/linked-set.d.ts
CHANGED
|
@@ -49,6 +49,7 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
|
|
|
49
49
|
toArray(): T[];
|
|
50
50
|
sumOf(selector: ((value: T) => number) | KeysOfType<T, number>): number;
|
|
51
51
|
sortBy<R>(selector: ((value: T) => R) | KeysOfType<T, R>): void;
|
|
52
|
+
protected __len(): number;
|
|
52
53
|
protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
|
|
53
54
|
}
|
|
54
55
|
export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
|
package/utility/linked-set.lua
CHANGED
|
@@ -188,6 +188,9 @@ function LinkedSet.prototype.sortBy(self, selector)
|
|
|
188
188
|
self.f = array[1]
|
|
189
189
|
self.l = array[s]
|
|
190
190
|
end
|
|
191
|
+
function LinkedSet.prototype.__len(self)
|
|
192
|
+
return self.s
|
|
193
|
+
end
|
|
191
194
|
function LinkedSet.prototype.__pairs(self)
|
|
192
195
|
return linkedSetNext, {t = self.n, n = self.f}, nil
|
|
193
196
|
end
|
|
@@ -209,6 +212,9 @@ function EmptyLinkedSet.prototype.add(self)
|
|
|
209
212
|
0
|
|
210
213
|
)
|
|
211
214
|
end
|
|
215
|
+
function EmptyLinkedSet.prototype.__len(self)
|
|
216
|
+
return 0
|
|
217
|
+
end
|
|
212
218
|
function EmptyLinkedSet.prototype.__pairs(self)
|
|
213
219
|
return linkedSetNext, emptyIteratorState, nil
|
|
214
220
|
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
import { ReadonlyNonEmptyArray } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* A client-local pseudorandom generator that is safe to advance inside a local block.
|
|
5
|
+
*
|
|
6
|
+
* Instances are independent of each other and of the game's synchronous randomness.
|
|
7
|
+
*/
|
|
8
|
+
export declare class AsyncRandom {
|
|
9
|
+
private a;
|
|
10
|
+
private b;
|
|
11
|
+
private c;
|
|
12
|
+
private d;
|
|
13
|
+
/**
|
|
14
|
+
* Creates a generator seeded with the given `seed`,
|
|
15
|
+
* or with client-local entropy if no seed is given.
|
|
16
|
+
*/
|
|
17
|
+
constructor(seed?: number);
|
|
18
|
+
/** Resets the generator to the state defined by the given `seed`. */
|
|
19
|
+
setSeed(seed: number): void;
|
|
20
|
+
/**
|
|
21
|
+
* Folds freshly gathered client-local entropy, optionally together with the given `value`,
|
|
22
|
+
* into the current state.
|
|
23
|
+
*
|
|
24
|
+
* Useful to make streams of different clients diverge even further, e.g. by mixing in values
|
|
25
|
+
* that are local by definition, such as the local player's id or the local mouse position.
|
|
26
|
+
*/
|
|
27
|
+
addEntropy(value?: number | string): void;
|
|
28
|
+
/** Advances the state and returns the next 32-bit word. */
|
|
29
|
+
private next;
|
|
30
|
+
/** Returns a uniformly distributed value in `[0, bound)`, where `bound` is in `[1, 2^32]`. */
|
|
31
|
+
private nextBounded;
|
|
32
|
+
/** Returns the given amount (`0` to `32`) of random bits as a non-negative integer. */
|
|
33
|
+
nextBits(bitCount: number): number;
|
|
34
|
+
/**
|
|
35
|
+
* Returns a uniformly distributed integer, both bounds being inclusive:
|
|
36
|
+
* in `[0, upperBound]` when called with a single bound, in `[lowerBound, upperBound]` otherwise.
|
|
37
|
+
*/
|
|
38
|
+
nextInteger(upperBound?: number): number;
|
|
39
|
+
nextInteger(lowerBound: number, upperBound: number): number;
|
|
40
|
+
/**
|
|
41
|
+
* Returns a uniformly distributed float with 53 bits of precision, the upper bound being
|
|
42
|
+
* exclusive: in `[0, upperBound)` when called with a single bound,
|
|
43
|
+
* in `[lowerBound, upperBound)` otherwise.
|
|
44
|
+
*/
|
|
45
|
+
nextFloat(upperBound?: number): number;
|
|
46
|
+
nextFloat(lowerBound: number, upperBound: number): number;
|
|
47
|
+
/** Returns `true` with the given `probability`, or with a probability of one half by default. */
|
|
48
|
+
nextBoolean(probability?: number): boolean;
|
|
49
|
+
/** Returns a uniformly distributed angle in degrees, in `[0, 360)`. */
|
|
50
|
+
nextAngle(): number;
|
|
51
|
+
/** Returns a uniformly distributed point within `range` of the given center. */
|
|
52
|
+
nextXY(centerX: number, centerY: number, range: number): LuaMultiReturn<[x: number, y: number]>;
|
|
53
|
+
/** Returns a uniformly distributed element of the given `array`. */
|
|
54
|
+
nextElement<T>(array: ReadonlyNonEmptyArray<T>): T;
|
|
55
|
+
nextElement<T>(array: ReadonlyArray<T>): T | undefined;
|
|
56
|
+
/** Returns a uniformly distributed one of the given `elements`. */
|
|
57
|
+
nextOf<T>(element: T, ...elements: T[]): T;
|
|
58
|
+
nextOf<T>(...elements: T[]): T | undefined;
|
|
59
|
+
/** Shuffles the given `array` in place, each permutation being equally likely. */
|
|
60
|
+
shuffle(array: unknown[]): void;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Folds freshly gathered client-local entropy, optionally together with the given `value`,
|
|
64
|
+
* into the state of the generator backing the `asyncRandom*` functions.
|
|
65
|
+
*/
|
|
66
|
+
export declare const addAsyncRandomEntropy: (value?: number | string) => void;
|
|
67
|
+
/** Returns the given amount (`0` to `32`) of random bits as a non-negative integer. */
|
|
68
|
+
export declare const asyncRandomBits: (bitCount: number) => number;
|
|
69
|
+
/**
|
|
70
|
+
* Returns a uniformly distributed integer, both bounds being inclusive:
|
|
71
|
+
* in `[0, upperBound]` when called with a single bound, in `[lowerBound, upperBound]` otherwise.
|
|
72
|
+
*/
|
|
73
|
+
export declare const asyncRandomInteger: {
|
|
74
|
+
(upperBound?: number): number;
|
|
75
|
+
(lowerBound: number, upperBound: number): number;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Returns a uniformly distributed float with 53 bits of precision, the upper bound being exclusive:
|
|
79
|
+
* in `[0, upperBound)` when called with a single bound, in `[lowerBound, upperBound)` otherwise.
|
|
80
|
+
*/
|
|
81
|
+
export declare const asyncRandomFloat: {
|
|
82
|
+
(upperBound?: number): number;
|
|
83
|
+
(lowerBound: number, upperBound: number): number;
|
|
84
|
+
};
|
|
85
|
+
/** Returns `true` with the given `probability`, or with a probability of one half by default. */
|
|
86
|
+
export declare const asyncRandomBoolean: (probability?: number) => boolean;
|
|
87
|
+
/** Returns a uniformly distributed angle in degrees, in `[0, 360)`. */
|
|
88
|
+
export declare const asyncRandomAngle: () => number;
|
|
89
|
+
/** Returns a uniformly distributed point within `range` of the given center. */
|
|
90
|
+
export declare const asyncRandomXY: (centerX: number, centerY: number, range: number) => LuaMultiReturn<[x: number, y: number]>;
|
|
91
|
+
/** Returns a uniformly distributed element of the given `array`. */
|
|
92
|
+
export declare const asyncRandomElement: {
|
|
93
|
+
<T>(array: ReadonlyNonEmptyArray<T>): T;
|
|
94
|
+
<T>(array: ReadonlyArray<T>): T | undefined;
|
|
95
|
+
};
|
|
96
|
+
/** Returns a uniformly distributed one of the given `elements`. */
|
|
97
|
+
export declare const asyncRandom: {
|
|
98
|
+
<T>(element: T, ...elements: T[]): T;
|
|
99
|
+
<T>(...elements: T[]): T | undefined;
|
|
100
|
+
};
|
|
101
|
+
/** Shuffles the given `array` in place, each permutation being equally likely. */
|
|
102
|
+
export declare const asyncShuffle: (array: unknown[]) => void;
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__Class = ____lualib.__TS__Class
|
|
3
|
+
local __TS__New = ____lualib.__TS__New
|
|
4
|
+
local ____exports = {}
|
|
5
|
+
local ____exception = require("exception")
|
|
6
|
+
local IllegalArgumentException = ____exception.IllegalArgumentException
|
|
7
|
+
local ____math = require("math")
|
|
8
|
+
local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
|
|
9
|
+
local PI = ____math.PI
|
|
10
|
+
local cos = ____math.cos
|
|
11
|
+
local sin = ____math.sin
|
|
12
|
+
local sqrt = ____math.sqrt
|
|
13
|
+
local clock = os.clock
|
|
14
|
+
local time = os.time
|
|
15
|
+
local byte = string.byte
|
|
16
|
+
local pack = string.pack
|
|
17
|
+
local ____unpack = string.unpack
|
|
18
|
+
local select = _G.select
|
|
19
|
+
local toString = _G.tostring
|
|
20
|
+
local globals = _G
|
|
21
|
+
local UINT32_MASK = 4294967295
|
|
22
|
+
local POW_2_32 = 4294967296
|
|
23
|
+
--- 2^26, used to join two draws into a 53-bit mantissa.
|
|
24
|
+
local POW_2_26 = 67108864
|
|
25
|
+
--- 2^53, the amount of representable values of a 53-bit mantissa.
|
|
26
|
+
local POW_2_53 = 9007199254740992
|
|
27
|
+
local GOLDEN_RATIO_32 = 2654435769
|
|
28
|
+
local FNV_PRIME_32 = 16777619
|
|
29
|
+
--- The SplitMix32 finalizer: avalanches a 32-bit value.
|
|
30
|
+
local function mix(value)
|
|
31
|
+
local z = value & UINT32_MASK
|
|
32
|
+
z = (z ~ z >> 16) * 569420461 & UINT32_MASK
|
|
33
|
+
z = (z ~ z >> 15) * 1935289751 & UINT32_MASK
|
|
34
|
+
return (z ~ z >> 15) & UINT32_MASK
|
|
35
|
+
end
|
|
36
|
+
--- Folds the bytes of `value` into `hash` (FNV-1a).
|
|
37
|
+
local function hashString(hash, value)
|
|
38
|
+
for i = 1, #value do
|
|
39
|
+
hash = (hash ~ byte(value, i)) * FNV_PRIME_32 & UINT32_MASK
|
|
40
|
+
end
|
|
41
|
+
return hash
|
|
42
|
+
end
|
|
43
|
+
--- Folds the exact bit pattern of `value` into `hash`, without assuming it is an integer.
|
|
44
|
+
local function hashNumber(hash, value)
|
|
45
|
+
local low, high = ____unpack(
|
|
46
|
+
"<i4i4",
|
|
47
|
+
pack("<d", value)
|
|
48
|
+
)
|
|
49
|
+
return mix(mix(hash ~ low & UINT32_MASK) ~ high & UINT32_MASK)
|
|
50
|
+
end
|
|
51
|
+
local entropyCounter = 0
|
|
52
|
+
--- Gathers 32 bits of client-local entropy.
|
|
53
|
+
--
|
|
54
|
+
-- Every source is local by nature: the wall clock and the process CPU time drift apart between
|
|
55
|
+
-- machines, and the heap addresses of freshly allocated tables and of loaded code differ between
|
|
56
|
+
-- processes. The CPU time is read once more at the end, so that the time the gathering itself took
|
|
57
|
+
-- contributes as well.
|
|
58
|
+
local function collectEntropy()
|
|
59
|
+
entropyCounter = entropyCounter + 1
|
|
60
|
+
local entropy = mix(GOLDEN_RATIO_32 ~ entropyCounter)
|
|
61
|
+
entropy = mix(entropy ~ time() & UINT32_MASK)
|
|
62
|
+
entropy = hashNumber(
|
|
63
|
+
entropy,
|
|
64
|
+
clock()
|
|
65
|
+
)
|
|
66
|
+
entropy = mix(hashString(
|
|
67
|
+
entropy,
|
|
68
|
+
toString({})
|
|
69
|
+
))
|
|
70
|
+
entropy = mix(hashString(
|
|
71
|
+
entropy,
|
|
72
|
+
toString({})
|
|
73
|
+
))
|
|
74
|
+
entropy = mix(hashString(
|
|
75
|
+
entropy,
|
|
76
|
+
toString(globals)
|
|
77
|
+
))
|
|
78
|
+
entropy = mix(hashString(
|
|
79
|
+
entropy,
|
|
80
|
+
toString(mix)
|
|
81
|
+
))
|
|
82
|
+
return hashNumber(
|
|
83
|
+
entropy,
|
|
84
|
+
clock()
|
|
85
|
+
)
|
|
86
|
+
end
|
|
87
|
+
--- A client-local pseudorandom generator that is safe to advance inside a local block.
|
|
88
|
+
--
|
|
89
|
+
-- Instances are independent of each other and of the game's synchronous randomness.
|
|
90
|
+
____exports.AsyncRandom = __TS__Class()
|
|
91
|
+
local AsyncRandom = ____exports.AsyncRandom
|
|
92
|
+
AsyncRandom.name = "AsyncRandom"
|
|
93
|
+
function AsyncRandom.prototype.____constructor(self, seed)
|
|
94
|
+
self.a = 0
|
|
95
|
+
self.b = 0
|
|
96
|
+
self.c = 0
|
|
97
|
+
self.d = 0
|
|
98
|
+
self:setSeed(seed or collectEntropy())
|
|
99
|
+
end
|
|
100
|
+
function AsyncRandom.prototype.setSeed(self, seed)
|
|
101
|
+
local z = hashNumber(GOLDEN_RATIO_32, seed)
|
|
102
|
+
z = z + GOLDEN_RATIO_32 & UINT32_MASK
|
|
103
|
+
local a = mix(z)
|
|
104
|
+
z = z + GOLDEN_RATIO_32 & UINT32_MASK
|
|
105
|
+
local b = mix(z)
|
|
106
|
+
z = z + GOLDEN_RATIO_32 & UINT32_MASK
|
|
107
|
+
local c = mix(z)
|
|
108
|
+
z = z + GOLDEN_RATIO_32 & UINT32_MASK
|
|
109
|
+
local d = mix(z)
|
|
110
|
+
self.a = a
|
|
111
|
+
self.b = b
|
|
112
|
+
self.c = c
|
|
113
|
+
self.d = a | b | c | d ~= 0 and d or GOLDEN_RATIO_32
|
|
114
|
+
end
|
|
115
|
+
function AsyncRandom.prototype.addEntropy(self, value)
|
|
116
|
+
local entropy = collectEntropy()
|
|
117
|
+
if type(value) == "number" then
|
|
118
|
+
entropy = hashNumber(entropy, value)
|
|
119
|
+
elseif value ~= nil then
|
|
120
|
+
entropy = hashString(entropy, value)
|
|
121
|
+
end
|
|
122
|
+
local a = self.a ~ mix(entropy)
|
|
123
|
+
local b = self.b ~ mix(a)
|
|
124
|
+
local c = self.c ~ mix(b)
|
|
125
|
+
local d = self.d ~ mix(c)
|
|
126
|
+
self.a = a
|
|
127
|
+
self.b = b
|
|
128
|
+
self.c = c
|
|
129
|
+
self.d = a | b | c | d ~= 0 and d or GOLDEN_RATIO_32
|
|
130
|
+
self:next()
|
|
131
|
+
end
|
|
132
|
+
function AsyncRandom.prototype.next(self)
|
|
133
|
+
local a = self.a
|
|
134
|
+
local b = self.b
|
|
135
|
+
local result = b * 5 & UINT32_MASK
|
|
136
|
+
result = (result << 7 | result >> 25) & UINT32_MASK
|
|
137
|
+
result = result * 9 & UINT32_MASK
|
|
138
|
+
local t = b << 9 & UINT32_MASK
|
|
139
|
+
local c = self.c ~ a
|
|
140
|
+
local d = self.d ~ b
|
|
141
|
+
self.a = a ~ d
|
|
142
|
+
self.b = b ~ c
|
|
143
|
+
self.c = c ~ t
|
|
144
|
+
self.d = (d << 11 | d >> 21) & UINT32_MASK
|
|
145
|
+
return result
|
|
146
|
+
end
|
|
147
|
+
function AsyncRandom.prototype.nextBounded(self, bound)
|
|
148
|
+
if bound <= 1 then
|
|
149
|
+
return 0
|
|
150
|
+
end
|
|
151
|
+
local limit = POW_2_32 - POW_2_32 % bound
|
|
152
|
+
local value = self:next()
|
|
153
|
+
while value >= limit do
|
|
154
|
+
value = self:next()
|
|
155
|
+
end
|
|
156
|
+
return value % bound
|
|
157
|
+
end
|
|
158
|
+
function AsyncRandom.prototype.nextBits(self, bitCount)
|
|
159
|
+
return self:next() >> 32 - bitCount
|
|
160
|
+
end
|
|
161
|
+
function AsyncRandom.prototype.nextInteger(self, m, n)
|
|
162
|
+
local lowerBound = n ~= nil and m or 0
|
|
163
|
+
local upperBound = n ~= nil and n or (m or MAXIMUM_INTEGER)
|
|
164
|
+
if upperBound < lowerBound then
|
|
165
|
+
error(
|
|
166
|
+
__TS__New(
|
|
167
|
+
IllegalArgumentException,
|
|
168
|
+
((("Upper bound (" .. tostring(upperBound)) .. ") is less than lower bound (") .. tostring(lowerBound)) .. ")."
|
|
169
|
+
),
|
|
170
|
+
0
|
|
171
|
+
)
|
|
172
|
+
end
|
|
173
|
+
return lowerBound + self:nextBounded(upperBound - lowerBound + 1)
|
|
174
|
+
end
|
|
175
|
+
function AsyncRandom.prototype.nextFloat(self, m, n)
|
|
176
|
+
local high = self:next() >> 5
|
|
177
|
+
local low = self:next() >> 6
|
|
178
|
+
local value = (high * POW_2_26 + low) / POW_2_53
|
|
179
|
+
return n ~= nil and m + value * (n - m) or value * (m or MAXIMUM_INTEGER)
|
|
180
|
+
end
|
|
181
|
+
function AsyncRandom.prototype.nextBoolean(self, probability)
|
|
182
|
+
local ____temp_0
|
|
183
|
+
if probability == nil then
|
|
184
|
+
____temp_0 = self:next() >> 31 ~= 0
|
|
185
|
+
else
|
|
186
|
+
____temp_0 = self:nextFloat() < probability
|
|
187
|
+
end
|
|
188
|
+
return ____temp_0
|
|
189
|
+
end
|
|
190
|
+
function AsyncRandom.prototype.nextAngle(self)
|
|
191
|
+
return self:nextFloat() * 360
|
|
192
|
+
end
|
|
193
|
+
function AsyncRandom.prototype.nextXY(self, centerX, centerY, range)
|
|
194
|
+
local r = range * sqrt(self:nextFloat())
|
|
195
|
+
local t = self:nextFloat() * 2 * PI
|
|
196
|
+
return centerX + r * cos(t), centerY + r * sin(t)
|
|
197
|
+
end
|
|
198
|
+
function AsyncRandom.prototype.nextElement(self, array)
|
|
199
|
+
local length = #array
|
|
200
|
+
local ____temp_1
|
|
201
|
+
if length ~= 0 then
|
|
202
|
+
____temp_1 = array[self:nextBounded(length) + 1]
|
|
203
|
+
else
|
|
204
|
+
____temp_1 = nil
|
|
205
|
+
end
|
|
206
|
+
return ____temp_1
|
|
207
|
+
end
|
|
208
|
+
function AsyncRandom.prototype.nextOf(self, ...)
|
|
209
|
+
local count = select("#", ...)
|
|
210
|
+
local ____temp_2
|
|
211
|
+
if count ~= 0 then
|
|
212
|
+
____temp_2 = (select(
|
|
213
|
+
self:nextBounded(count) + 1,
|
|
214
|
+
...
|
|
215
|
+
))
|
|
216
|
+
else
|
|
217
|
+
____temp_2 = nil
|
|
218
|
+
end
|
|
219
|
+
return ____temp_2
|
|
220
|
+
end
|
|
221
|
+
function AsyncRandom.prototype.shuffle(self, array)
|
|
222
|
+
for i = #array - 1, 1, -1 do
|
|
223
|
+
local j = self:nextBounded(i + 1)
|
|
224
|
+
local value = array[i + 1]
|
|
225
|
+
array[i + 1] = array[j + 1]
|
|
226
|
+
array[j + 1] = value
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
local defaultAsyncRandom
|
|
230
|
+
local function getDefaultAsyncRandom()
|
|
231
|
+
defaultAsyncRandom = defaultAsyncRandom or __TS__New(____exports.AsyncRandom)
|
|
232
|
+
return defaultAsyncRandom
|
|
233
|
+
end
|
|
234
|
+
--- Folds freshly gathered client-local entropy, optionally together with the given `value`,
|
|
235
|
+
-- into the state of the generator backing the `asyncRandom*` functions.
|
|
236
|
+
____exports.addAsyncRandomEntropy = function(value)
|
|
237
|
+
getDefaultAsyncRandom():addEntropy(value)
|
|
238
|
+
end
|
|
239
|
+
--- Returns the given amount (`0` to `32`) of random bits as a non-negative integer.
|
|
240
|
+
____exports.asyncRandomBits = function(bitCount)
|
|
241
|
+
return getDefaultAsyncRandom():nextBits(bitCount)
|
|
242
|
+
end
|
|
243
|
+
--- Returns a uniformly distributed integer, both bounds being inclusive:
|
|
244
|
+
-- in `[0, upperBound]` when called with a single bound, in `[lowerBound, upperBound]` otherwise.
|
|
245
|
+
____exports.asyncRandomInteger = function(m, n) return n ~= nil and getDefaultAsyncRandom():nextInteger(m, n) or getDefaultAsyncRandom():nextInteger(m) end
|
|
246
|
+
--- Returns a uniformly distributed float with 53 bits of precision, the upper bound being exclusive:
|
|
247
|
+
-- in `[0, upperBound)` when called with a single bound, in `[lowerBound, upperBound)` otherwise.
|
|
248
|
+
____exports.asyncRandomFloat = function(m, n) return n ~= nil and getDefaultAsyncRandom():nextFloat(m, n) or getDefaultAsyncRandom():nextFloat(m) end
|
|
249
|
+
--- Returns `true` with the given `probability`, or with a probability of one half by default.
|
|
250
|
+
____exports.asyncRandomBoolean = function(probability)
|
|
251
|
+
return getDefaultAsyncRandom():nextBoolean(probability)
|
|
252
|
+
end
|
|
253
|
+
--- Returns a uniformly distributed angle in degrees, in `[0, 360)`.
|
|
254
|
+
____exports.asyncRandomAngle = function()
|
|
255
|
+
return getDefaultAsyncRandom():nextAngle()
|
|
256
|
+
end
|
|
257
|
+
--- Returns a uniformly distributed point within `range` of the given center.
|
|
258
|
+
____exports.asyncRandomXY = function(centerX, centerY, range)
|
|
259
|
+
return getDefaultAsyncRandom():nextXY(centerX, centerY, range)
|
|
260
|
+
end
|
|
261
|
+
--- Returns a uniformly distributed element of the given `array`.
|
|
262
|
+
____exports.asyncRandomElement = function(array)
|
|
263
|
+
return getDefaultAsyncRandom():nextElement(array)
|
|
264
|
+
end
|
|
265
|
+
--- Returns a uniformly distributed one of the given `elements`.
|
|
266
|
+
____exports.asyncRandom = function(...)
|
|
267
|
+
return getDefaultAsyncRandom():nextOf(...)
|
|
268
|
+
end
|
|
269
|
+
--- Shuffles the given `array` in place, each permutation being equally likely.
|
|
270
|
+
____exports.asyncShuffle = function(array)
|
|
271
|
+
getDefaultAsyncRandom():shuffle(array)
|
|
272
|
+
end
|
|
273
|
+
return ____exports
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
type OneSidedTypeGuard = {
|
|
3
|
+
readonly __oneSidedTypeGuard: unique symbol;
|
|
4
|
+
};
|
|
5
|
+
export interface ReadonlyUnorderedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
|
|
6
|
+
get(key: K): V | undefined;
|
|
7
|
+
contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
|
|
8
|
+
readonly size: number;
|
|
9
|
+
}
|
|
10
|
+
export interface UnorderedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
|
|
11
|
+
readonly __unorderedMap: unique symbol;
|
|
12
|
+
}
|
|
13
|
+
export declare class UnorderedMap<K extends AnyNotNil, V> implements ReadonlyUnorderedMap<K, V> {
|
|
14
|
+
private readonly v;
|
|
15
|
+
private s;
|
|
16
|
+
get(key: K): V | undefined;
|
|
17
|
+
getOrPut(key: K, defaultValue: (this: void) => V): V;
|
|
18
|
+
put(key: K, value: V): void;
|
|
19
|
+
remove(key: K): boolean;
|
|
20
|
+
contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
|
|
21
|
+
get size(): number;
|
|
22
|
+
protected __len(): number;
|
|
23
|
+
protected __pairs(this: UnorderedMap<K, V>): ReturnType<typeof pairs>;
|
|
24
|
+
}
|
|
25
|
+
export declare const emptyUnorderedMap: <K extends AnyNotNil, V>() => ReadonlyUnorderedMap<K, V>;
|
|
26
|
+
export declare const mutableUnorderedMap: <K extends AnyNotNil, V>() => UnorderedMap<K, V>;
|
|
27
|
+
export {};
|