isaacscript-common 1.2.17 → 1.2.21

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.
@@ -4,7 +4,7 @@ local Map = ____lualib.Map
4
4
  local __TS__New = ____lualib.__TS__New
5
5
  local __TS__Iterator = ____lualib.__TS__Iterator
6
6
  local ____exports = {}
7
- local hasSubscriptions, postUpdate, checkGridEntityRemoved, postNewRoom, checkNewGridEntity, v
7
+ local hasSubscriptions, postUpdate, checkNewGridEntity, checkGridEntityRemoved, postNewRoom, v
8
8
  local ____exports = require("features.saveDataManager.exports")
9
9
  local saveDataManager = ____exports.saveDataManager
10
10
  local ____gridEntity = require("functions.gridEntity")
@@ -31,6 +31,15 @@ function postUpdate(self)
31
31
  end
32
32
  checkGridEntityRemoved(nil)
33
33
  end
34
+ function checkNewGridEntity(self, gridEntity)
35
+ local gridIndex = gridEntity:GetGridIndex()
36
+ local gridEntityType = gridEntity:GetType()
37
+ local storedGridEntityType = v.room.initializedGridEntities:get(gridIndex)
38
+ if storedGridEntityType ~= gridEntityType then
39
+ v.room.initializedGridEntities:set(gridIndex, gridEntityType)
40
+ postGridEntityInitFire(nil, gridEntity)
41
+ end
42
+ end
34
43
  function checkGridEntityRemoved(self)
35
44
  local game = Game()
36
45
  local room = game:GetRoom()
@@ -52,15 +61,6 @@ function postNewRoom(self)
52
61
  checkNewGridEntity(nil, gridEntity)
53
62
  end
54
63
  end
55
- function checkNewGridEntity(self, gridEntity)
56
- local gridIndex = gridEntity:GetGridIndex()
57
- local gridEntityType = gridEntity:GetType()
58
- local storedGridEntityType = v.room.initializedGridEntities:get(gridIndex)
59
- if storedGridEntityType ~= gridEntityType then
60
- v.room.initializedGridEntities:set(gridIndex, gridEntityType)
61
- postGridEntityInitFire(nil, gridEntity)
62
- end
63
- end
64
64
  v = {room = {initializedGridEntities = __TS__New(Map)}}
65
65
  function ____exports.postGridEntityCallbacksInit(self, mod)
66
66
  saveDataManager(nil, "postGridEntity", v, hasSubscriptions)
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,63 @@
1
+ --[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]]
2
+ local ____lualib = require("lualib_bundle")
3
+ local Map = ____lualib.Map
4
+ local __TS__New = ____lualib.__TS__New
5
+ local Set = ____lualib.Set
6
+ local __TS__ArrayMap = ____lualib.__TS__ArrayMap
7
+ local __TS__Iterator = ____lualib.__TS__Iterator
8
+ local ____exports = {}
9
+ local hasSubscriptions, postUpdate, v
10
+ local ____exports = require("features.saveDataManager.exports")
11
+ local saveDataManager = ____exports.saveDataManager
12
+ local ____gridEntity = require("functions.gridEntity")
13
+ local getCollidingEntitiesWithGridEntity = ____gridEntity.getCollidingEntitiesWithGridEntity
14
+ local getGridEntities = ____gridEntity.getGridEntities
15
+ local ____postGridEntityCollision = require("callbacks.subscriptions.postGridEntityCollision")
16
+ local postGridEntityCollisionFire = ____postGridEntityCollision.postGridEntityCollisionFire
17
+ local postGridEntityCollisionHasSubscriptions = ____postGridEntityCollision.postGridEntityCollisionHasSubscriptions
18
+ function hasSubscriptions(self)
19
+ return postGridEntityCollisionHasSubscriptions(nil)
20
+ end
21
+ function postUpdate(self)
22
+ if not hasSubscriptions(nil) then
23
+ return
24
+ end
25
+ for ____, gridEntity in ipairs(getGridEntities(nil)) do
26
+ do
27
+ if gridEntity.CollisionClass == GridCollisionClass.COLLISION_NONE then
28
+ goto __continue6
29
+ end
30
+ local gridEntityPtrHash = GetPtrHash(gridEntity)
31
+ local oldCollidingEntities = v.room.collidingEntitiesMap:get(gridEntityPtrHash)
32
+ if oldCollidingEntities == nil then
33
+ oldCollidingEntities = __TS__New(Set)
34
+ v.room.collidingEntitiesMap:set(gridEntityPtrHash, oldCollidingEntities)
35
+ end
36
+ local collidingEntities = getCollidingEntitiesWithGridEntity(nil, gridEntity)
37
+ for ____, entity in ipairs(collidingEntities) do
38
+ local entityPtrHash = GetPtrHash(entity)
39
+ if not oldCollidingEntities:has(entityPtrHash) then
40
+ oldCollidingEntities:add(entityPtrHash)
41
+ postGridEntityCollisionFire(nil, gridEntity, entity)
42
+ end
43
+ end
44
+ local collidingEntitiesPtrHashes = __TS__ArrayMap(
45
+ collidingEntities,
46
+ function(____, entity) return GetPtrHash(entity) end
47
+ )
48
+ local collidingEntitiesPtrHashSet = __TS__New(Set, collidingEntitiesPtrHashes)
49
+ for ____, oldCollidingEntityPtrHash in __TS__Iterator(oldCollidingEntities:values()) do
50
+ if not collidingEntitiesPtrHashSet:has(oldCollidingEntityPtrHash) then
51
+ oldCollidingEntities:delete(oldCollidingEntityPtrHash)
52
+ end
53
+ end
54
+ end
55
+ ::__continue6::
56
+ end
57
+ end
58
+ v = {room = {collidingEntitiesMap = __TS__New(Map)}}
59
+ function ____exports.postGridEntityCollisionInit(self, mod)
60
+ saveDataManager(nil, "postGridEntityCollision", v, hasSubscriptions)
61
+ mod:AddCallback(ModCallbacks.MC_POST_UPDATE, postUpdate)
62
+ end
63
+ return ____exports
@@ -0,0 +1,2 @@
1
+ /// <reference types="isaac-typescript-definitions" />
2
+ export declare type PostGridEntityCollisionCallbackType = (gridEntity: GridEntity, entity: Entity) => void;
@@ -0,0 +1,26 @@
1
+ --[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]]
2
+ local ____lualib = require("lualib_bundle")
3
+ local __TS__ArrayPush = ____lualib.__TS__ArrayPush
4
+ local ____exports = {}
5
+ local subscriptions = {}
6
+ function ____exports.postGridEntityCollisionHasSubscriptions(self)
7
+ return #subscriptions > 0
8
+ end
9
+ function ____exports.postGridEntityCollisionRegister(self, callback, gridEntityType)
10
+ __TS__ArrayPush(subscriptions, {callback, gridEntityType})
11
+ end
12
+ function ____exports.postGridEntityCollisionFire(self, gridEntity, entity)
13
+ local gridEntityType = gridEntity:GetType()
14
+ for ____, ____value in ipairs(subscriptions) do
15
+ local callback = ____value[1]
16
+ local callbackGridEntityType = ____value[2]
17
+ do
18
+ if callbackGridEntityType ~= nil and callbackGridEntityType ~= gridEntityType then
19
+ goto __continue5
20
+ end
21
+ callback(nil, gridEntity, entity)
22
+ end
23
+ ::__continue5::
24
+ end
25
+ end
26
+ return ____exports
@@ -0,0 +1,6 @@
1
+ /// <reference types="isaac-typescript-definitions" />
2
+ /**
3
+ * Returns a set containing every collectible type with the given cache flag, including modded
4
+ * items.
5
+ */
6
+ export declare function getCollectiblesForCacheFlag(cacheFlag: CacheFlag): Set<CollectibleType | int>;
@@ -0,0 +1,41 @@
1
+ --[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]]
2
+ local ____lualib = require("lualib_bundle")
3
+ local Map = ____lualib.Map
4
+ local __TS__New = ____lualib.__TS__New
5
+ local Set = ____lualib.Set
6
+ local ____exports = {}
7
+ local ____collectibles = require("functions.collectibles")
8
+ local collectibleHasCacheFlag = ____collectibles.collectibleHasCacheFlag
9
+ local getMaxCollectibleID = ____collectibles.getMaxCollectibleID
10
+ local ____set = require("functions.set")
11
+ local copySet = ____set.copySet
12
+ local ____util = require("functions.util")
13
+ local getEnumValues = ____util.getEnumValues
14
+ local CACHE_FLAG_TO_COLLECTIBLES_MAP = __TS__New(Map)
15
+ local function initCacheFlagMap(self)
16
+ local maxCollectibleID = getMaxCollectibleID(nil)
17
+ for ____, cacheFlag in ipairs(getEnumValues(nil, CacheFlag)) do
18
+ local collectiblesSet = __TS__New(Set)
19
+ do
20
+ local collectibleType = 1
21
+ while collectibleType <= maxCollectibleID do
22
+ if collectibleHasCacheFlag(nil, collectibleType, cacheFlag) then
23
+ collectiblesSet:add(collectibleType)
24
+ end
25
+ collectibleType = collectibleType + 1
26
+ end
27
+ end
28
+ CACHE_FLAG_TO_COLLECTIBLES_MAP:set(cacheFlag, collectiblesSet)
29
+ end
30
+ end
31
+ function ____exports.getCollectiblesForCacheFlag(self, cacheFlag)
32
+ if CACHE_FLAG_TO_COLLECTIBLES_MAP.size == 0 then
33
+ initCacheFlagMap(nil)
34
+ end
35
+ local collectiblesSet = CACHE_FLAG_TO_COLLECTIBLES_MAP:get(cacheFlag)
36
+ if collectiblesSet == nil then
37
+ return __TS__New(Set)
38
+ end
39
+ return copySet(nil, collectiblesSet)
40
+ end
41
+ return ____exports
@@ -5,6 +5,7 @@
5
5
  * 1000.0 in a room XML file, but `GridEntityType.GRID_ROCK` is equal to 2.
6
6
  */
7
7
  export declare function convertXMLGridEntityType(gridEntityXMLType: int, gridEntityXMLVariant: int): [int, int] | undefined;
8
+ export declare function getCollidingEntitiesWithGridEntity(gridEntity: GridEntity): Entity[];
8
9
  /**
9
10
  * Helper function to get every grid entity in the current room. Use it with no arguments to get
10
11
  * every grid entity, or specify a variadic amount of arguments to match specific grid entity types.
@@ -1,16 +1,21 @@
1
1
  --[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]]
2
2
  local ____lualib = require("lualib_bundle")
3
3
  local Map = ____lualib.Map
4
+ local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
4
5
  local Set = ____lualib.Set
5
6
  local __TS__New = ____lualib.__TS__New
6
7
  local __TS__ArrayPush = ____lualib.__TS__ArrayPush
7
8
  local __TS__ArrayEvery = ____lualib.__TS__ArrayEvery
8
9
  local ____exports = {}
10
+ local ____constants = require("constants")
11
+ local DISTANCE_OF_GRID_TILE = ____constants.DISTANCE_OF_GRID_TILE
9
12
  local ____gridEntityXMLMap = require("maps.gridEntityXMLMap")
10
13
  local GRID_ENTITY_XML_MAP = ____gridEntityXMLMap.GRID_ENTITY_XML_MAP
11
14
  local ____roomShapeToTopLeftWallGridIndexMap = require("maps.roomShapeToTopLeftWallGridIndexMap")
12
15
  local DEFAULT_TOP_LEFT_WALL_GRID_INDEX = ____roomShapeToTopLeftWallGridIndexMap.DEFAULT_TOP_LEFT_WALL_GRID_INDEX
13
16
  local ROOM_SHAPE_TO_TOP_LEFT_WALL_GRID_INDEX_MAP = ____roomShapeToTopLeftWallGridIndexMap.ROOM_SHAPE_TO_TOP_LEFT_WALL_GRID_INDEX_MAP
17
+ local ____math = require("functions.math")
18
+ local isCircleIntersectingRectangle = ____math.isCircleIntersectingRectangle
14
19
  local ____rooms = require("functions.rooms")
15
20
  local roomUpdateSafe = ____rooms.roomUpdateSafe
16
21
  local ____sprite = require("functions.sprite")
@@ -68,6 +73,25 @@ function ____exports.convertXMLGridEntityType(self, gridEntityXMLType, gridEntit
68
73
  end
69
74
  return {gridEntityType, gridEntityVariant}
70
75
  end
76
+ function ____exports.getCollidingEntitiesWithGridEntity(self, gridEntity)
77
+ local gridEntityCollisionTopLeft = Vector(gridEntity.Position.X - DISTANCE_OF_GRID_TILE / 2, gridEntity.Position.Y - DISTANCE_OF_GRID_TILE / 2)
78
+ local gridEntityCollisionBottomRight = Vector(gridEntity.Position.X + DISTANCE_OF_GRID_TILE / 2, gridEntity.Position.Y + DISTANCE_OF_GRID_TILE / 2)
79
+ local closeEntities = Isaac.FindInRadius(gridEntity.Position, DISTANCE_OF_GRID_TILE * 2)
80
+ local closeEntitiesThatCollideWithGrid = __TS__ArrayFilter(
81
+ closeEntities,
82
+ function(____, entity) return entity:CollidesWithGrid() end
83
+ )
84
+ return __TS__ArrayFilter(
85
+ closeEntitiesThatCollideWithGrid,
86
+ function(____, entity) return isCircleIntersectingRectangle(
87
+ nil,
88
+ entity.Position,
89
+ entity.Size,
90
+ gridEntityCollisionTopLeft,
91
+ gridEntityCollisionBottomRight
92
+ ) end
93
+ )
94
+ end
71
95
  function ____exports.getGridEntities(self, ...)
72
96
  local gridEntityTypes = {...}
73
97
  local game = Game()
@@ -81,7 +105,7 @@ function ____exports.getGridEntities(self, ...)
81
105
  do
82
106
  local gridEntity = room:GetGridEntity(gridIndex)
83
107
  if gridEntity == nil then
84
- goto __continue7
108
+ goto __continue10
85
109
  end
86
110
  if #gridEntityTypes == 0 then
87
111
  __TS__ArrayPush(gridEntities, gridEntity)
@@ -92,7 +116,7 @@ function ____exports.getGridEntities(self, ...)
92
116
  end
93
117
  end
94
118
  end
95
- ::__continue7::
119
+ ::__continue10::
96
120
  gridIndex = gridIndex + 1
97
121
  end
98
122
  end
@@ -13,6 +13,15 @@ export declare function getAngleDifference(angle1: float, angle2: float): float;
13
13
  * this can be optionally changed by specifying this argument.
14
14
  */
15
15
  export declare function getCircleDiscretizedPoints(centerPos: Vector, radius: float, numPoints: int, xMultiplier?: number, yMultiplier?: number, initialDirection?: Direction): Vector[];
16
+ /**
17
+ * Helper function to check if a given position is within a given rectangle. This is an inclusive
18
+ * check, meaning that it will return true if the position is on the border of the rectangle.
19
+ */
20
+ export declare function inRectangle(position: Vector, topLeft: Vector, bottomRight: Vector): boolean;
21
+ /**
22
+ * From: https://www.geeksforgeeks.org/check-if-any-point-overlaps-the-given-circle-and-rectangle/
23
+ */
24
+ export declare function isCircleIntersectingRectangle(circleCenter: Vector, circleRadius: float, rectangleTopLeft: Vector, rectangleBottomRight: Vector): boolean;
16
25
  export declare function isEven(num: int): boolean;
17
26
  export declare function isOdd(num: int): boolean;
18
27
  export declare function lerp(a: number, b: number, pos: float): number;
@@ -75,6 +75,22 @@ function ____exports.getCircleDiscretizedPoints(self, centerPos, radius, numPoin
75
75
  end
76
76
  return positions
77
77
  end
78
+ function ____exports.inRectangle(self, position, topLeft, bottomRight)
79
+ return position.X >= topLeft.X and position.X <= bottomRight.X and position.Y <= topLeft.Y and position.Y >= bottomRight.Y
80
+ end
81
+ function ____exports.isCircleIntersectingRectangle(self, circleCenter, circleRadius, rectangleTopLeft, rectangleBottomRight)
82
+ local nearestX = math.max(
83
+ rectangleTopLeft.X,
84
+ math.min(circleCenter.X, rectangleBottomRight.X)
85
+ )
86
+ local nearestY = math.max(
87
+ rectangleTopLeft.Y,
88
+ math.min(circleCenter.Y, rectangleBottomRight.Y)
89
+ )
90
+ local nearestPointToCircleOnRectangle = Vector(nearestX, nearestY)
91
+ local distanceToCenterOfCircle = nearestPointToCircleOnRectangle:Distance(circleCenter)
92
+ return distanceToCenterOfCircle <= circleRadius
93
+ end
78
94
  function ____exports.isEven(self, num)
79
95
  return num & 1 == 0
80
96
  end
@@ -81,6 +81,22 @@ export declare function getNewestPlayer(): EntityPlayer;
81
81
  * hearts and 3 broken hearts, then this function would return 6 (i.e. 12 - 1 - 2 - 3).
82
82
  */
83
83
  export declare function getPlayerAvailableHeartSlots(player: EntityPlayer): int;
84
+ /**
85
+ * Returns an array containing every collectible type that the player has that matches the provided
86
+ * CacheFlag.
87
+ *
88
+ * For example, if a player has one Lord of the Pit and two Transcendences, then this function would
89
+ * return:
90
+ *
91
+ * ```ts
92
+ * [
93
+ * CollectibleType.COLLECTIBLE_LORD_OF_THE_PIT,
94
+ * CollectibleType.COLLECTIBLE_TRANSCENDENCE,
95
+ * CollectibleType.COLLECTIBLE_TRANSCENDENCE,
96
+ * ]
97
+ * ```
98
+ */
99
+ export declare function getPlayerCollectiblesForCacheFlag(player: EntityPlayer, cacheFlag: CacheFlag): Array<CollectibleType | int>;
84
100
  /**
85
101
  * Returns the maximum heart containers that the provided character can have. Normally, this is 12,
86
102
  * but with Keeper it is 3, with Tainted Keeper it is 2. Does not account for Birthright or Mother's
@@ -3,10 +3,10 @@ local ____lualib = require("lualib_bundle")
3
3
  local Set = ____lualib.Set
4
4
  local __TS__New = ____lualib.__TS__New
5
5
  local __TS__ArraySome = ____lualib.__TS__ArraySome
6
+ local __TS__ArrayPush = ____lualib.__TS__ArrayPush
7
+ local __TS__Iterator = ____lualib.__TS__Iterator
6
8
  local __TS__ArrayMap = ____lualib.__TS__ArrayMap
7
9
  local Map = ____lualib.Map
8
- local __TS__Iterator = ____lualib.__TS__Iterator
9
- local __TS__ArrayPush = ____lualib.__TS__ArrayPush
10
10
  local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
11
11
  local ____exports = {}
12
12
  local getAdjustedPlayerName, isTaintedModded, EXCLUDED_CHARACTERS
@@ -25,6 +25,8 @@ local arraySum = ____array.arraySum
25
25
  local ____bitwise = require("functions.bitwise")
26
26
  local getKBitOfN = ____bitwise.getKBitOfN
27
27
  local getNumBitsOfN = ____bitwise.getNumBitsOfN
28
+ local ____collectibleCacheFlag = require("functions.collectibleCacheFlag")
29
+ local getCollectiblesForCacheFlag = ____collectibleCacheFlag.getCollectiblesForCacheFlag
28
30
  local ____collectibles = require("functions.collectibles")
29
31
  local getCollectibleMaxCharges = ____collectibles.getCollectibleMaxCharges
30
32
  local ____collectibleSet = require("functions.collectibleSet")
@@ -72,39 +74,39 @@ end
72
74
  function getAdjustedPlayerName(self, player)
73
75
  local character = player:GetPlayerType()
74
76
  repeat
75
- local ____switch71 = character
76
- local ____cond71 = ____switch71 == PlayerType.PLAYER_BLUEBABY or ____switch71 == PlayerType.PLAYER_BLUEBABY_B
77
- if ____cond71 then
77
+ local ____switch75 = character
78
+ local ____cond75 = ____switch75 == PlayerType.PLAYER_BLUEBABY or ____switch75 == PlayerType.PLAYER_BLUEBABY_B
79
+ if ____cond75 then
78
80
  do
79
81
  return "Blue Baby"
80
82
  end
81
83
  end
82
- ____cond71 = ____cond71 or ____switch71 == PlayerType.PLAYER_LAZARUS2
83
- if ____cond71 then
84
+ ____cond75 = ____cond75 or ____switch75 == PlayerType.PLAYER_LAZARUS2
85
+ if ____cond75 then
84
86
  do
85
87
  return "Lazarus II"
86
88
  end
87
89
  end
88
- ____cond71 = ____cond71 or ____switch71 == PlayerType.PLAYER_BLACKJUDAS
89
- if ____cond71 then
90
+ ____cond75 = ____cond75 or ____switch75 == PlayerType.PLAYER_BLACKJUDAS
91
+ if ____cond75 then
90
92
  do
91
93
  return "Dark Judas"
92
94
  end
93
95
  end
94
- ____cond71 = ____cond71 or ____switch71 == PlayerType.PLAYER_JACOB
95
- if ____cond71 then
96
+ ____cond75 = ____cond75 or ____switch75 == PlayerType.PLAYER_JACOB
97
+ if ____cond75 then
96
98
  do
97
99
  return "Jacob & Esau"
98
100
  end
99
101
  end
100
- ____cond71 = ____cond71 or ____switch71 == PlayerType.PLAYER_LAZARUS2_B
101
- if ____cond71 then
102
+ ____cond75 = ____cond75 or ____switch75 == PlayerType.PLAYER_LAZARUS2_B
103
+ if ____cond75 then
102
104
  do
103
105
  return "Dead Tainted Lazarus"
104
106
  end
105
107
  end
106
- ____cond71 = ____cond71 or ____switch71 == PlayerType.PLAYER_JACOB2_B
107
- if ____cond71 then
108
+ ____cond75 = ____cond75 or ____switch75 == PlayerType.PLAYER_JACOB2_B
109
+ if ____cond75 then
108
110
  do
109
111
  return "Dead Tainted Jacob"
110
112
  end
@@ -128,18 +130,18 @@ function ____exports.getPlayers(self, performExclusions)
128
130
  do
129
131
  local player = Isaac.GetPlayer(i)
130
132
  if player == nil then
131
- goto __continue81
133
+ goto __continue85
132
134
  end
133
135
  if ____exports.isChildPlayer(nil, player) then
134
- goto __continue81
136
+ goto __continue85
135
137
  end
136
138
  local character = player:GetPlayerType()
137
139
  if performExclusions and EXCLUDED_CHARACTERS:has(character) then
138
- goto __continue81
140
+ goto __continue85
139
141
  end
140
142
  __TS__ArrayPush(players, player)
141
143
  end
142
- ::__continue81::
144
+ ::__continue85::
143
145
  i = i + 1
144
146
  end
145
147
  end
@@ -330,6 +332,21 @@ function ____exports.getPlayerAvailableHeartSlots(self, player)
330
332
  local totalOccupiedHeartSlots = totalHeartContainers + brokenHearts
331
333
  return maxHeartContainers - totalOccupiedHeartSlots
332
334
  end
335
+ function ____exports.getPlayerCollectiblesForCacheFlag(self, player, cacheFlag)
336
+ local collectiblesForCacheFlag = getCollectiblesForCacheFlag(nil, cacheFlag)
337
+ local playerCollectibles = {}
338
+ for ____, collectibleType in __TS__Iterator(collectiblesForCacheFlag:values()) do
339
+ local numCollectibles = player:GetCollectibleNum(collectibleType)
340
+ do
341
+ local i = 0
342
+ while i < numCollectibles do
343
+ __TS__ArrayPush(playerCollectibles, collectibleType)
344
+ i = i + 1
345
+ end
346
+ end
347
+ end
348
+ return playerCollectibles
349
+ end
333
350
  function ____exports.getPlayerCloserThan(self, position, distance)
334
351
  for ____, player in ipairs(____exports.getPlayers(nil)) do
335
352
  if player.Position:Distance(position) <= distance then
@@ -367,14 +384,14 @@ function ____exports.getPlayerIndexVanilla(self, playerToFind)
367
384
  do
368
385
  local player = Isaac.GetPlayer(i)
369
386
  if player == nil then
370
- goto __continue62
387
+ goto __continue66
371
388
  end
372
389
  local playerHash = GetPtrHash(player)
373
390
  if playerHash == playerToFindHash then
374
391
  return i
375
392
  end
376
393
  end
377
- ::__continue62::
394
+ ::__continue66::
378
395
  i = i + 1
379
396
  end
380
397
  end
@@ -544,9 +561,9 @@ function ____exports.setActiveItem(self, player, collectibleType, activeSlot, ch
544
561
  itemPool:RemoveCollectible(collectibleType)
545
562
  end
546
563
  repeat
547
- local ____switch124 = activeSlot
548
- local ____cond124 = ____switch124 == ActiveSlot.SLOT_PRIMARY
549
- if ____cond124 then
564
+ local ____switch128 = activeSlot
565
+ local ____cond128 = ____switch128 == ActiveSlot.SLOT_PRIMARY
566
+ if ____cond128 then
550
567
  do
551
568
  if primaryCollectibleType ~= CollectibleType.COLLECTIBLE_NULL then
552
569
  player:RemoveCollectible(primaryCollectibleType)
@@ -555,8 +572,8 @@ function ____exports.setActiveItem(self, player, collectibleType, activeSlot, ch
555
572
  break
556
573
  end
557
574
  end
558
- ____cond124 = ____cond124 or ____switch124 == ActiveSlot.SLOT_SECONDARY
559
- if ____cond124 then
575
+ ____cond128 = ____cond128 or ____switch128 == ActiveSlot.SLOT_SECONDARY
576
+ if ____cond128 then
560
577
  do
561
578
  if primaryCollectibleType ~= CollectibleType.COLLECTIBLE_NULL then
562
579
  player:RemoveCollectible(primaryCollectibleType)
@@ -571,16 +588,16 @@ function ____exports.setActiveItem(self, player, collectibleType, activeSlot, ch
571
588
  break
572
589
  end
573
590
  end
574
- ____cond124 = ____cond124 or ____switch124 == ActiveSlot.SLOT_POCKET
575
- if ____cond124 then
591
+ ____cond128 = ____cond128 or ____switch128 == ActiveSlot.SLOT_POCKET
592
+ if ____cond128 then
576
593
  do
577
594
  player:SetPocketActiveItem(collectibleType, activeSlot, keepInPools)
578
595
  player:SetActiveCharge(charge, activeSlot)
579
596
  break
580
597
  end
581
598
  end
582
- ____cond124 = ____cond124 or ____switch124 == ActiveSlot.SLOT_POCKET2
583
- if ____cond124 then
599
+ ____cond128 = ____cond128 or ____switch128 == ActiveSlot.SLOT_POCKET2
600
+ if ____cond128 then
584
601
  do
585
602
  player:SetPocketActiveItem(collectibleType, activeSlot, keepInPools)
586
603
  break
@@ -1,7 +1,7 @@
1
1
  /// <reference types="isaac-typescript-definitions" />
2
+ export declare function getCollectibleTypesForTransformation(playerForm: PlayerForm): Set<PlayerForm>;
2
3
  /** Returns the number of items that a player has towards a particular transformation. */
3
4
  export declare function getPlayerNumTransformationCollectibles(player: EntityPlayer, playerForm: PlayerForm): int;
4
- export declare function getTransformationsForItem(collectibleType: CollectibleType | int): PlayerForm[];
5
5
  /**
6
6
  * Helper function to get a transformation name from a PlayerForm enum.
7
7
  *
@@ -12,3 +12,4 @@ export declare function getTransformationsForItem(collectibleType: CollectibleTy
12
12
  * ```
13
13
  */
14
14
  export declare function getTransformationName(transformation: PlayerForm): string;
15
+ export declare function getTransformationsForCollectibleType(collectibleType: CollectibleType | int): Set<PlayerForm>;
@@ -1,37 +1,104 @@
1
1
  --[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]]
2
2
  local ____lualib = require("lualib_bundle")
3
3
  local Map = ____lualib.Map
4
+ local __TS__New = ____lualib.__TS__New
4
5
  local Set = ____lualib.Set
6
+ local __TS__Iterator = ____lualib.__TS__Iterator
5
7
  local ____exports = {}
6
- local ____transformationMaps = require("maps.transformationMaps")
7
- local ITEM_TO_TRANSFORMATION_MAP = ____transformationMaps.ITEM_TO_TRANSFORMATION_MAP
8
- local TRANSFORMATIONS_NOT_BASED_ON_ITEMS = ____transformationMaps.TRANSFORMATIONS_NOT_BASED_ON_ITEMS
9
- local TRANSFORMATION_TO_ITEMS_MAP = ____transformationMaps.TRANSFORMATION_TO_ITEMS_MAP
10
8
  local ____transformationNameMap = require("maps.transformationNameMap")
11
9
  local TRANSFORMATION_NAME_MAP = ____transformationNameMap.TRANSFORMATION_NAME_MAP
12
- local ____array = require("functions.array")
13
- local arrayCopy = ____array.arrayCopy
10
+ local ____collectibles = require("functions.collectibles")
11
+ local collectibleHasTag = ____collectibles.collectibleHasTag
12
+ local getMaxCollectibleID = ____collectibles.getMaxCollectibleID
13
+ local ____set = require("functions.set")
14
+ local copySet = ____set.copySet
15
+ local TRANSFORMATION_TO_TAG_MAP = __TS__New(Map, {
16
+ {PlayerForm.PLAYERFORM_GUPPY, 32},
17
+ {PlayerForm.PLAYERFORM_LORD_OF_THE_FLIES, 64},
18
+ {PlayerForm.PLAYERFORM_MUSHROOM, 256},
19
+ {PlayerForm.PLAYERFORM_ANGEL, 1024},
20
+ {PlayerForm.PLAYERFORM_BOB, 128},
21
+ {PlayerForm.PLAYERFORM_DRUGS, 2},
22
+ {PlayerForm.PLAYERFORM_MOM, 4},
23
+ {PlayerForm.PLAYERFORM_BABY, 512},
24
+ {PlayerForm.PLAYERFORM_EVIL_ANGEL, 2048},
25
+ {PlayerForm.PLAYERFORM_POOP, 4096},
26
+ {PlayerForm.PLAYERFORM_BOOK_WORM, 8192},
27
+ {PlayerForm.PLAYERFORM_SPIDERBABY, 16384}
28
+ })
29
+ local TRANSFORMATIONS_NOT_BASED_ON_ITEMS = __TS__New(Set, {PlayerForm.PLAYERFORM_ADULTHOOD, PlayerForm.PLAYERFORM_STOMPY, PlayerForm.PLAYERFORM_FLIGHT})
30
+ local TRANSFORMATION_TO_COLLECTIBLE_TYPES_MAP = __TS__New(Map)
31
+ local COLLECTIBLE_TYPE_TO_TRANSFORMATION_MAP = __TS__New(Map)
32
+ local function initMaps(self)
33
+ local maxCollectibleID = getMaxCollectibleID(nil)
34
+ for ____, playerForm in __TS__Iterator(TRANSFORMATION_TO_TAG_MAP:keys()) do
35
+ TRANSFORMATION_TO_COLLECTIBLE_TYPES_MAP:set(
36
+ playerForm,
37
+ __TS__New(Set)
38
+ )
39
+ end
40
+ do
41
+ local collectibleType = 1
42
+ while collectibleType <= maxCollectibleID do
43
+ for ____, ____value in __TS__Iterator(TRANSFORMATION_TO_TAG_MAP:entries()) do
44
+ local playerForm = ____value[1]
45
+ local tag = ____value[2]
46
+ do
47
+ if not collectibleHasTag(nil, collectibleType, tag) then
48
+ goto __continue6
49
+ end
50
+ local collectibleTypesSet = TRANSFORMATION_TO_COLLECTIBLE_TYPES_MAP:get(playerForm)
51
+ if collectibleTypesSet == nil then
52
+ error("Failed to get the collectible types for transformation: " .. tostring(playerForm))
53
+ end
54
+ collectibleTypesSet:add(collectibleType)
55
+ local transformations = COLLECTIBLE_TYPE_TO_TRANSFORMATION_MAP:get(collectibleType)
56
+ if transformations == nil then
57
+ transformations = __TS__New(Set)
58
+ COLLECTIBLE_TYPE_TO_TRANSFORMATION_MAP:set(collectibleType, transformations)
59
+ end
60
+ transformations:add(playerForm)
61
+ end
62
+ ::__continue6::
63
+ end
64
+ collectibleType = collectibleType + 1
65
+ end
66
+ end
67
+ end
68
+ function ____exports.getCollectibleTypesForTransformation(self, playerForm)
69
+ if TRANSFORMATION_TO_COLLECTIBLE_TYPES_MAP.size == 0 then
70
+ initMaps(nil)
71
+ end
72
+ local collectibleTypes = TRANSFORMATION_TO_COLLECTIBLE_TYPES_MAP:get(playerForm)
73
+ return collectibleTypes == nil and __TS__New(Set) or copySet(nil, collectibleTypes)
74
+ end
14
75
  function ____exports.getPlayerNumTransformationCollectibles(self, player, playerForm)
15
76
  if TRANSFORMATIONS_NOT_BASED_ON_ITEMS:has(playerForm) then
16
77
  error(("The transformation of " .. tostring(playerForm)) .. " cannot be tracked by this function.")
17
78
  end
18
- local itemsForTransformation = TRANSFORMATION_TO_ITEMS_MAP:get(playerForm)
79
+ if TRANSFORMATION_TO_COLLECTIBLE_TYPES_MAP.size == 0 then
80
+ initMaps(nil)
81
+ end
82
+ local itemsForTransformation = TRANSFORMATION_TO_COLLECTIBLE_TYPES_MAP:get(playerForm)
19
83
  if itemsForTransformation == nil then
20
84
  error(("The transformation of " .. tostring(playerForm)) .. " is not a valid value of the PlayerForm enum.")
21
85
  end
22
86
  local numCollectibles = 0
23
- for ____, collectibleType in ipairs(itemsForTransformation) do
87
+ for ____, collectibleType in __TS__Iterator(itemsForTransformation:values()) do
24
88
  numCollectibles = numCollectibles + player:GetCollectibleNum(collectibleType)
25
89
  end
26
90
  return numCollectibles
27
91
  end
28
- function ____exports.getTransformationsForItem(self, collectibleType)
29
- local transformations = ITEM_TO_TRANSFORMATION_MAP:get(collectibleType)
30
- return transformations == nil and ({}) or arrayCopy(nil, transformations)
31
- end
32
92
  function ____exports.getTransformationName(self, transformation)
33
93
  local defaultName = "Unknown"
34
94
  local transformationName = TRANSFORMATION_NAME_MAP:get(transformation)
35
95
  return transformationName == nil and defaultName or transformationName
36
96
  end
97
+ function ____exports.getTransformationsForCollectibleType(self, collectibleType)
98
+ if COLLECTIBLE_TYPE_TO_TRANSFORMATION_MAP.size == 0 then
99
+ initMaps(nil)
100
+ end
101
+ local transformations = COLLECTIBLE_TYPE_TO_TRANSFORMATION_MAP:get(collectibleType)
102
+ return transformations == nil and __TS__New(Set) or copySet(nil, transformations)
103
+ end
37
104
  return ____exports
@@ -1,9 +1,6 @@
1
1
  /// <reference types="isaac-typescript-definitions" />
2
2
  /// <reference types="typescript-to-lua/language-extensions" />
3
- /**
4
- * Using a Map constructor to copy a Map does not seem to work properly, so use this helper function
5
- * instead.
6
- */
3
+ /** Helper function to copy a map. (You can also use a Map constructor to accomplish this task.) */
7
4
  export declare function copyMap<K, V>(oldMap: Map<K, V>): Map<K, V>;
8
5
  /**
9
6
  * Helper function to get type safety on a switch statement.
package/dist/index.d.ts CHANGED
@@ -13,6 +13,7 @@ export * from "./functions/bitwise";
13
13
  export * from "./functions/cards";
14
14
  export * from "./functions/challenges";
15
15
  export * from "./functions/charge";
16
+ export * from "./functions/collectibleCacheFlag";
16
17
  export * from "./functions/collectibles";
17
18
  export * from "./functions/collectibleSet";
18
19
  export * from "./functions/color";
@@ -61,7 +62,6 @@ export * from "./maps/pillEffectClassMap";
61
62
  export * from "./maps/pillEffectNameMap";
62
63
  export * from "./maps/pillEffectTypeMap";
63
64
  export * from "./maps/roomShapeToTopLeftWallGridIndexMap";
64
- export * from "./maps/transformationMaps";
65
65
  export * from "./maps/transformationNameMap";
66
66
  export * from "./maps/trinketNameMap";
67
67
  export * from "./sets/cards";
package/dist/index.lua CHANGED
@@ -116,6 +116,14 @@ do
116
116
  end
117
117
  end
118
118
  end
119
+ do
120
+ local ____export = require("functions.collectibleCacheFlag")
121
+ for ____exportKey, ____exportValue in pairs(____export) do
122
+ if ____exportKey ~= "default" then
123
+ ____exports[____exportKey] = ____exportValue
124
+ end
125
+ end
126
+ end
119
127
  do
120
128
  local ____export = require("functions.collectibles")
121
129
  for ____exportKey, ____exportValue in pairs(____export) do
@@ -494,14 +502,6 @@ do
494
502
  end
495
503
  end
496
504
  end
497
- do
498
- local ____export = require("maps.transformationMaps")
499
- for ____exportKey, ____exportValue in pairs(____export) do
500
- if ____exportKey ~= "default" then
501
- ____exports[____exportKey] = ____exportValue
502
- end
503
- end
504
- end
505
505
  do
506
506
  local ____export = require("maps.transformationNameMap")
507
507
  for ____exportKey, ____exportValue in pairs(____export) do
@@ -9,6 +9,7 @@ import { PostFirstEsauJrCallbackType } from "../callbacks/subscriptions/postFirs
9
9
  import { PostFirstFlipCallbackType } from "../callbacks/subscriptions/postFirstFlip";
10
10
  import { PostFlipCallbackType } from "../callbacks/subscriptions/postFlip";
11
11
  import { PostGameStartedReorderedCallbackType } from "../callbacks/subscriptions/postGameStartedReordered";
12
+ import { PostGridEntityCollisionCallbackType } from "../callbacks/subscriptions/postGridEntityCollision";
12
13
  import { PostGridEntityInitCallbackType } from "../callbacks/subscriptions/postGridEntityInit";
13
14
  import { PostGridEntityRemoveCallbackType } from "../callbacks/subscriptions/postGridEntityRemove";
14
15
  import { PostGridEntityUpdateCallbackType } from "../callbacks/subscriptions/postGridEntityUpdate";
@@ -207,4 +208,8 @@ export interface CallbackParametersCustom {
207
208
  callback: PostGridEntityRemoveCallbackType,
208
209
  gridEntityType?: GridEntityType
209
210
  ];
211
+ [ModCallbacksCustom.MC_POST_GRID_ENTITY_COLLISION]: [
212
+ callback: PostGridEntityCollisionCallbackType,
213
+ gridEntityType?: GridEntityType
214
+ ];
210
215
  }
@@ -50,5 +50,6 @@ export declare enum ModCallbacksCustom {
50
50
  MC_POST_SLOT_DESTROYED = 41,
51
51
  MC_POST_GRID_ENTITY_INIT = 42,
52
52
  MC_POST_GRID_ENTITY_UPDATE = 43,
53
- MC_POST_GRID_ENTITY_REMOVE = 44
53
+ MC_POST_GRID_ENTITY_REMOVE = 44,
54
+ MC_POST_GRID_ENTITY_COLLISION = 45
54
55
  }
@@ -91,4 +91,6 @@ ____exports.ModCallbacksCustom.MC_POST_GRID_ENTITY_UPDATE = 43
91
91
  ____exports.ModCallbacksCustom[____exports.ModCallbacksCustom.MC_POST_GRID_ENTITY_UPDATE] = "MC_POST_GRID_ENTITY_UPDATE"
92
92
  ____exports.ModCallbacksCustom.MC_POST_GRID_ENTITY_REMOVE = 44
93
93
  ____exports.ModCallbacksCustom[____exports.ModCallbacksCustom.MC_POST_GRID_ENTITY_REMOVE] = "MC_POST_GRID_ENTITY_REMOVE"
94
+ ____exports.ModCallbacksCustom.MC_POST_GRID_ENTITY_COLLISION = 45
95
+ ____exports.ModCallbacksCustom[____exports.ModCallbacksCustom.MC_POST_GRID_ENTITY_COLLISION] = "MC_POST_GRID_ENTITY_COLLISION"
94
96
  return ____exports
@@ -25,6 +25,8 @@ local ____postFlip = require("callbacks.subscriptions.postFlip")
25
25
  local postFlipRegister = ____postFlip.postFlipRegister
26
26
  local ____postGameStartedReordered = require("callbacks.subscriptions.postGameStartedReordered")
27
27
  local postGameStartedReorderedRegister = ____postGameStartedReordered.postGameStartedReorderedRegister
28
+ local ____postGridEntityCollision = require("callbacks.subscriptions.postGridEntityCollision")
29
+ local postGridEntityCollisionRegister = ____postGridEntityCollision.postGridEntityCollisionRegister
28
30
  local ____postGridEntityInit = require("callbacks.subscriptions.postGridEntityInit")
29
31
  local postGridEntityInitRegister = ____postGridEntityInit.postGridEntityInitRegister
30
32
  local ____postGridEntityRemove = require("callbacks.subscriptions.postGridEntityRemove")
@@ -384,6 +386,12 @@ function getCallbackRegisterFunction(self, callbackID)
384
386
  return postGridEntityRemoveRegister
385
387
  end
386
388
  end
389
+ ____cond19 = ____cond19 or ____switch19 == ModCallbacksCustom.MC_POST_GRID_ENTITY_COLLISION
390
+ if ____cond19 then
391
+ do
392
+ return postGridEntityCollisionRegister
393
+ end
394
+ end
387
395
  do
388
396
  do
389
397
  ensureAllCases(nil, callbackID)
@@ -21,6 +21,8 @@ local ____postFlip = require("callbacks.postFlip")
21
21
  local postFlipCallbacksInit = ____postFlip.postFlipCallbacksInit
22
22
  local ____postGridEntity = require("callbacks.postGridEntity")
23
23
  local postGridEntityCallbacksInit = ____postGridEntity.postGridEntityCallbacksInit
24
+ local ____postGridEntityCollision = require("callbacks.postGridEntityCollision")
25
+ local postGridEntityCollisionInit = ____postGridEntityCollision.postGridEntityCollisionInit
24
26
  local ____postKnifeInitLate = require("callbacks.postKnifeInitLate")
25
27
  local postKnifeInitLateCallbackInit = ____postKnifeInitLate.postKnifeInitLateCallbackInit
26
28
  local ____postLaserInitLate = require("callbacks.postLaserInitLate")
@@ -122,6 +124,7 @@ function initCustomCallbacks(self, mod)
122
124
  postSlotInitUpdateCallbacksInit(nil, mod)
123
125
  postSlotRenderBrokenCallbacksInit(nil, mod)
124
126
  postGridEntityCallbacksInit(nil, mod)
127
+ postGridEntityCollisionInit(nil, mod)
125
128
  end
126
129
  function initFeatures(self, mod)
127
130
  deployJSONRoomInit(nil, mod)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "isaacscript-common",
3
- "version": "1.2.17",
3
+ "version": "1.2.21",
4
4
  "description": "Helper functions for IsaacScript mods",
5
5
  "keywords": [
6
6
  "isaac",