isaacscript-common 1.2.75 → 1.2.76

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,61 +4,94 @@ 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, checkNewGridEntity, checkGridEntityRemoved, postNewRoom, v
7
+ local hasSubscriptions, postUpdate, checkGridEntitiesRemoved, checkGridEntityStateChanged, checkNewGridEntity, updateTupleInMap, postNewRoom, v
8
8
  local ____exports = require("features.saveDataManager.exports")
9
9
  local saveDataManager = ____exports.saveDataManager
10
10
  local ____gridEntity = require("functions.gridEntity")
11
- local getGridEntities = ____gridEntity.getGridEntities
11
+ local getGridEntitiesMap = ____gridEntity.getGridEntitiesMap
12
+ local isGridEntityBroken = ____gridEntity.isGridEntityBroken
13
+ local ____postGridEntityBroken = require("callbacks.subscriptions.postGridEntityBroken")
14
+ local postGridEntityBrokenFire = ____postGridEntityBroken.postGridEntityBrokenFire
15
+ local postGridEntityBrokenHasSubscriptions = ____postGridEntityBroken.postGridEntityBrokenHasSubscriptions
12
16
  local ____postGridEntityInit = require("callbacks.subscriptions.postGridEntityInit")
13
17
  local postGridEntityInitFire = ____postGridEntityInit.postGridEntityInitFire
14
18
  local postGridEntityInitHasSubscriptions = ____postGridEntityInit.postGridEntityInitHasSubscriptions
15
19
  local ____postGridEntityRemove = require("callbacks.subscriptions.postGridEntityRemove")
16
20
  local postGridEntityRemoveFire = ____postGridEntityRemove.postGridEntityRemoveFire
17
21
  local postGridEntityRemoveHasSubscriptions = ____postGridEntityRemove.postGridEntityRemoveHasSubscriptions
22
+ local ____postGridEntityStateChange = require("callbacks.subscriptions.postGridEntityStateChange")
23
+ local postGridEntityStateChangeFire = ____postGridEntityStateChange.postGridEntityStateChangeFire
24
+ local postGridEntityStateChangeHasSubscriptions = ____postGridEntityStateChange.postGridEntityStateChangeHasSubscriptions
18
25
  local ____postGridEntityUpdate = require("callbacks.subscriptions.postGridEntityUpdate")
19
26
  local postGridEntityUpdateFire = ____postGridEntityUpdate.postGridEntityUpdateFire
20
27
  local postGridEntityUpdateHasSubscriptions = ____postGridEntityUpdate.postGridEntityUpdateHasSubscriptions
21
28
  function hasSubscriptions(self)
22
- return postGridEntityInitHasSubscriptions(nil) or postGridEntityUpdateHasSubscriptions(nil) or postGridEntityRemoveHasSubscriptions(nil)
29
+ return postGridEntityInitHasSubscriptions(nil) or postGridEntityUpdateHasSubscriptions(nil) or postGridEntityRemoveHasSubscriptions(nil) or postGridEntityStateChangeHasSubscriptions(nil) or postGridEntityBrokenHasSubscriptions(nil)
23
30
  end
24
31
  function postUpdate(self)
25
32
  if not hasSubscriptions(nil) then
26
33
  return
27
34
  end
28
- for ____, gridEntity in ipairs(getGridEntities(nil)) do
29
- checkNewGridEntity(nil, gridEntity)
35
+ local gridEntitiesMap = getGridEntitiesMap(nil)
36
+ checkGridEntitiesRemoved(nil, gridEntitiesMap)
37
+ for ____, ____value in __TS__Iterator(gridEntitiesMap:entries()) do
38
+ local gridIndex = ____value[1]
39
+ local gridEntity = ____value[2]
40
+ checkGridEntityStateChanged(nil, gridIndex, gridEntity)
41
+ checkNewGridEntity(nil, gridIndex, gridEntity)
30
42
  postGridEntityUpdateFire(nil, gridEntity)
31
43
  end
32
- checkGridEntityRemoved(nil)
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
44
  end
43
- function checkGridEntityRemoved(self)
44
- local game = Game()
45
- local room = game:GetRoom()
45
+ function checkGridEntitiesRemoved(self, gridEntitiesMap)
46
46
  for ____, ____value in __TS__Iterator(v.room.initializedGridEntities:entries()) do
47
47
  local gridIndex = ____value[1]
48
- local gridEntityType = ____value[2]
49
- local gridEntity = room:GetGridEntity(gridIndex)
50
- if gridEntity == nil or gridEntity:GetType() ~= gridEntityType then
48
+ local gridEntityTuple = ____value[2]
49
+ local storedGridEntityType = table.unpack(gridEntityTuple)
50
+ local gridEntity = gridEntitiesMap:get(gridIndex)
51
+ if gridEntity == nil or gridEntity:GetType() ~= storedGridEntityType then
51
52
  v.room.initializedGridEntities:delete(gridIndex)
52
- postGridEntityRemoveFire(nil, gridIndex, gridEntityType)
53
+ postGridEntityRemoveFire(nil, gridIndex, storedGridEntityType)
53
54
  end
54
55
  end
55
56
  end
57
+ function checkGridEntityStateChanged(self, gridIndex, gridEntity)
58
+ local gridEntityTuple = v.room.initializedGridEntities:get(gridIndex)
59
+ if gridEntityTuple == nil then
60
+ return
61
+ end
62
+ local ____, oldState = table.unpack(gridEntityTuple)
63
+ local newState = gridEntity.State
64
+ if oldState ~= newState then
65
+ updateTupleInMap(nil, gridEntity)
66
+ postGridEntityStateChangeFire(nil, gridEntity, oldState, newState)
67
+ if isGridEntityBroken(nil, gridEntity) then
68
+ postGridEntityBrokenFire(nil, gridEntity)
69
+ end
70
+ end
71
+ end
72
+ function checkNewGridEntity(self, gridIndex, gridEntity)
73
+ local gridEntityType = gridEntity:GetType()
74
+ local gridEntityTuple = v.room.initializedGridEntities:get(gridIndex)
75
+ if gridEntityTuple == nil or gridEntityTuple[1] ~= gridEntityType then
76
+ updateTupleInMap(nil, gridEntity)
77
+ postGridEntityInitFire(nil, gridEntity)
78
+ end
79
+ end
80
+ function updateTupleInMap(self, gridEntity)
81
+ local gridEntityType = gridEntity:GetType()
82
+ local gridIndex = gridEntity:GetGridIndex()
83
+ local newTuple = {gridEntityType, gridEntity.State}
84
+ v.room.initializedGridEntities:set(gridIndex, newTuple)
85
+ end
56
86
  function postNewRoom(self)
57
87
  if not hasSubscriptions(nil) then
58
88
  return
59
89
  end
60
- for ____, gridEntity in ipairs(getGridEntities(nil)) do
61
- checkNewGridEntity(nil, gridEntity)
90
+ local gridEntitiesMap = getGridEntitiesMap(nil)
91
+ for ____, ____value in __TS__Iterator(gridEntitiesMap:entries()) do
92
+ local gridIndex = ____value[1]
93
+ local gridEntity = ____value[2]
94
+ checkNewGridEntity(nil, gridIndex, gridEntity)
62
95
  end
63
96
  end
64
97
  v = {room = {initializedGridEntities = __TS__New(Map)}}
@@ -0,0 +1,2 @@
1
+ /// <reference types="isaac-typescript-definitions" />
2
+ export declare type PostGridEntityBrokenCallbackType = (gridEntity: GridEntity) => void;
@@ -0,0 +1,25 @@
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.postGridEntityBrokenHasSubscriptions(self)
7
+ return #subscriptions > 0
8
+ end
9
+ function ____exports.postGridEntityBrokenRegister(self, callback, gridEntityType)
10
+ __TS__ArrayPush(subscriptions, {callback, gridEntityType})
11
+ end
12
+ function ____exports.postGridEntityBrokenFire(self, gridEntity)
13
+ for ____, ____value in ipairs(subscriptions) do
14
+ local callback = ____value[1]
15
+ local gridEntityType = ____value[2]
16
+ do
17
+ if gridEntityType ~= nil and gridEntityType ~= gridEntity:GetType() then
18
+ goto __continue5
19
+ end
20
+ callback(nil, gridEntity)
21
+ end
22
+ ::__continue5::
23
+ end
24
+ end
25
+ return ____exports
@@ -0,0 +1,2 @@
1
+ /// <reference types="isaac-typescript-definitions" />
2
+ export declare type PostGridEntityStateChangeCallbackType = (gridEntity: GridEntity, oldState: int, newState: int) => void;
@@ -0,0 +1,25 @@
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.postGridEntityStateChangeHasSubscriptions(self)
7
+ return #subscriptions > 0
8
+ end
9
+ function ____exports.postGridEntityStateChangeRegister(self, callback, gridEntityType)
10
+ __TS__ArrayPush(subscriptions, {callback, gridEntityType})
11
+ end
12
+ function ____exports.postGridEntityStateChangeFire(self, gridEntity, oldState, newState)
13
+ for ____, ____value in ipairs(subscriptions) do
14
+ local callback = ____value[1]
15
+ local gridEntityType = ____value[2]
16
+ do
17
+ if gridEntityType ~= nil and gridEntityType ~= gridEntity:GetType() then
18
+ goto __continue5
19
+ end
20
+ callback(nil, gridEntity, oldState, newState)
21
+ end
22
+ ::__continue5::
23
+ end
24
+ end
25
+ return ____exports
@@ -7,8 +7,10 @@
7
7
  export declare function convertXMLGridEntityType(gridEntityXMLType: int, gridEntityXMLVariant: int): [int, int] | undefined;
8
8
  export declare function getCollidingEntitiesWithGridEntity(gridEntity: GridEntity): Entity[];
9
9
  /**
10
- * Helper function to get every grid entity in the current room. Use it with no arguments to get
11
- * every grid entity, or specify a variadic amount of arguments to match specific grid entity types.
10
+ * Helper function to get every grid entity in the current room.
11
+ *
12
+ * Use this function with no arguments to get every grid entity, or specify a variadic amount of
13
+ * arguments to match specific grid entity types.
12
14
  *
13
15
  * Example:
14
16
  * ```
@@ -27,6 +29,14 @@ export declare function getCollidingEntitiesWithGridEntity(gridEntity: GridEntit
27
29
  * ```
28
30
  */
29
31
  export declare function getGridEntities(...gridEntityTypes: GridEntityType[]): GridEntity[];
32
+ /**
33
+ * Helper function to get a map of every grid entity in the current room. The indexes of the map are
34
+ * equal to the grid index. The values of the map are equal to the grid entities.
35
+ *
36
+ * Use this function with no arguments to get every grid entity, or specify a variadic amount of
37
+ * arguments to match specific grid entity types.
38
+ */
39
+ export declare function getGridEntitiesMap(...gridEntityTypes: GridEntityType[]): Map<int, GridEntity>;
30
40
  export declare function getTopLeftWall(): GridEntity | undefined;
31
41
  /**
32
42
  * Helper function to get the grid index of the top left wall.
@@ -4,8 +4,10 @@ local Set = ____lualib.Set
4
4
  local __TS__New = ____lualib.__TS__New
5
5
  local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
6
6
  local __TS__ArrayPush = ____lualib.__TS__ArrayPush
7
+ local Map = ____lualib.Map
7
8
  local __TS__ArrayEvery = ____lualib.__TS__ArrayEvery
8
9
  local ____exports = {}
10
+ local getAllGridEntities
9
11
  local ____constants = require("constants")
10
12
  local DISTANCE_OF_GRID_TILE = ____constants.DISTANCE_OF_GRID_TILE
11
13
  local ____gridEntityTypeToBrokenStateMap = require("maps.gridEntityTypeToBrokenStateMap")
@@ -22,6 +24,19 @@ local ____rooms = require("functions.rooms")
22
24
  local roomUpdateSafe = ____rooms.roomUpdateSafe
23
25
  local ____sprite = require("functions.sprite")
24
26
  local clearSprite = ____sprite.clearSprite
27
+ function getAllGridEntities(self)
28
+ local game = Game()
29
+ local room = game:GetRoom()
30
+ local gridSize = room:GetGridSize()
31
+ local gridEntities = {}
32
+ for ____, gridIndex in ipairs(range(nil, 0, gridSize - 1)) do
33
+ local gridEntity = room:GetGridEntity(gridIndex)
34
+ if gridEntity ~= nil then
35
+ __TS__ArrayPush(gridEntities, gridEntity)
36
+ end
37
+ end
38
+ return gridEntities
39
+ end
25
40
  function ____exports.getTopLeftWallGridIndex(self)
26
41
  local game = Game()
27
42
  local room = game:GetRoom()
@@ -116,29 +131,27 @@ function ____exports.getCollidingEntitiesWithGridEntity(self, gridEntity)
116
131
  end
117
132
  function ____exports.getGridEntities(self, ...)
118
133
  local gridEntityTypes = {...}
119
- local game = Game()
120
- local room = game:GetRoom()
121
- local gridSize = room:GetGridSize()
134
+ local gridEntities = getAllGridEntities(nil)
135
+ if #gridEntityTypes == 0 then
136
+ return gridEntities
137
+ end
122
138
  local gridEntityTypesSet = __TS__New(Set, gridEntityTypes)
123
- local gridEntities = {}
124
- for ____, gridIndex in ipairs(range(nil, 0, gridSize - 1)) do
125
- do
126
- local gridEntity = room:GetGridEntity(gridIndex)
127
- if gridEntity == nil then
128
- goto __continue10
129
- end
130
- if #gridEntityTypes == 0 then
131
- __TS__ArrayPush(gridEntities, gridEntity)
132
- else
133
- local thisGridEntityType = gridEntity:GetType()
134
- if gridEntityTypesSet:has(thisGridEntityType) then
135
- __TS__ArrayPush(gridEntities, gridEntity)
136
- end
137
- end
139
+ return __TS__ArrayFilter(
140
+ gridEntities,
141
+ function(____, gridEntity)
142
+ local gridEntityType = gridEntity:GetType()
143
+ return gridEntityTypesSet:has(gridEntityType)
138
144
  end
139
- ::__continue10::
145
+ )
146
+ end
147
+ function ____exports.getGridEntitiesMap(self, ...)
148
+ local gridEntities = ____exports.getGridEntities(nil, ...)
149
+ local gridEntityMap = __TS__New(Map)
150
+ for ____, gridEntity in ipairs(gridEntities) do
151
+ local gridIndex = gridEntity:GetGridIndex()
152
+ gridEntityMap:set(gridIndex, gridEntity)
140
153
  end
141
- return gridEntities
154
+ return gridEntityMap
142
155
  end
143
156
  function ____exports.getTopLeftWall(self)
144
157
  local game = Game()
@@ -10,9 +10,11 @@ import { PostFirstEsauJrCallbackType } from "../callbacks/subscriptions/postFirs
10
10
  import { PostFirstFlipCallbackType } from "../callbacks/subscriptions/postFirstFlip";
11
11
  import { PostFlipCallbackType } from "../callbacks/subscriptions/postFlip";
12
12
  import { PostGameStartedReorderedCallbackType } from "../callbacks/subscriptions/postGameStartedReordered";
13
+ import { PostGridEntityBrokenCallbackType } from "../callbacks/subscriptions/postGridEntityBroken";
13
14
  import { PostGridEntityCollisionCallbackType } from "../callbacks/subscriptions/postGridEntityCollision";
14
15
  import { PostGridEntityInitCallbackType } from "../callbacks/subscriptions/postGridEntityInit";
15
16
  import { PostGridEntityRemoveCallbackType } from "../callbacks/subscriptions/postGridEntityRemove";
17
+ import { PostGridEntityStateChangeCallbackType } from "../callbacks/subscriptions/postGridEntityStateChange";
16
18
  import { PostGridEntityUpdateCallbackType } from "../callbacks/subscriptions/postGridEntityUpdate";
17
19
  import { PostItemPickupCallbackType } from "../callbacks/subscriptions/postItemPickup";
18
20
  import { PostKnifeInitLateCallbackType } from "../callbacks/subscriptions/postKnifeInitLate";
@@ -209,6 +211,14 @@ export interface CallbackParametersCustom {
209
211
  callback: PostGridEntityRemoveCallbackType,
210
212
  gridEntityType?: GridEntityType
211
213
  ];
214
+ [ModCallbacksCustom.MC_POST_GRID_ENTITY_STATE_CHANGE]: [
215
+ callback: PostGridEntityStateChangeCallbackType,
216
+ gridEntityType?: GridEntityType
217
+ ];
218
+ [ModCallbacksCustom.MC_POST_GRID_ENTITY_BROKEN]: [
219
+ callback: PostGridEntityBrokenCallbackType,
220
+ gridEntityType?: GridEntityType
221
+ ];
212
222
  [ModCallbacksCustom.MC_POST_GRID_ENTITY_COLLISION]: [
213
223
  callback: PostGridEntityCollisionCallbackType,
214
224
  gridEntityType?: GridEntityType
@@ -51,6 +51,8 @@ export declare enum ModCallbacksCustom {
51
51
  MC_POST_GRID_ENTITY_INIT = 42,
52
52
  MC_POST_GRID_ENTITY_UPDATE = 43,
53
53
  MC_POST_GRID_ENTITY_REMOVE = 44,
54
- MC_POST_GRID_ENTITY_COLLISION = 45,
55
- MC_POST_BONE_SWING = 46
54
+ MC_POST_GRID_ENTITY_STATE_CHANGE = 45,
55
+ MC_POST_GRID_ENTITY_BROKEN = 46,
56
+ MC_POST_GRID_ENTITY_COLLISION = 47,
57
+ MC_POST_BONE_SWING = 48
56
58
  }
@@ -91,8 +91,12 @@ ____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
94
+ ____exports.ModCallbacksCustom.MC_POST_GRID_ENTITY_STATE_CHANGE = 45
95
+ ____exports.ModCallbacksCustom[____exports.ModCallbacksCustom.MC_POST_GRID_ENTITY_STATE_CHANGE] = "MC_POST_GRID_ENTITY_STATE_CHANGE"
96
+ ____exports.ModCallbacksCustom.MC_POST_GRID_ENTITY_BROKEN = 46
97
+ ____exports.ModCallbacksCustom[____exports.ModCallbacksCustom.MC_POST_GRID_ENTITY_BROKEN] = "MC_POST_GRID_ENTITY_BROKEN"
98
+ ____exports.ModCallbacksCustom.MC_POST_GRID_ENTITY_COLLISION = 47
95
99
  ____exports.ModCallbacksCustom[____exports.ModCallbacksCustom.MC_POST_GRID_ENTITY_COLLISION] = "MC_POST_GRID_ENTITY_COLLISION"
96
- ____exports.ModCallbacksCustom.MC_POST_BONE_SWING = 46
100
+ ____exports.ModCallbacksCustom.MC_POST_BONE_SWING = 48
97
101
  ____exports.ModCallbacksCustom[____exports.ModCallbacksCustom.MC_POST_BONE_SWING] = "MC_POST_BONE_SWING"
98
102
  return ____exports
@@ -27,12 +27,16 @@ local ____postFlip = require("callbacks.subscriptions.postFlip")
27
27
  local postFlipRegister = ____postFlip.postFlipRegister
28
28
  local ____postGameStartedReordered = require("callbacks.subscriptions.postGameStartedReordered")
29
29
  local postGameStartedReorderedRegister = ____postGameStartedReordered.postGameStartedReorderedRegister
30
+ local ____postGridEntityBroken = require("callbacks.subscriptions.postGridEntityBroken")
31
+ local postGridEntityBrokenRegister = ____postGridEntityBroken.postGridEntityBrokenRegister
30
32
  local ____postGridEntityCollision = require("callbacks.subscriptions.postGridEntityCollision")
31
33
  local postGridEntityCollisionRegister = ____postGridEntityCollision.postGridEntityCollisionRegister
32
34
  local ____postGridEntityInit = require("callbacks.subscriptions.postGridEntityInit")
33
35
  local postGridEntityInitRegister = ____postGridEntityInit.postGridEntityInitRegister
34
36
  local ____postGridEntityRemove = require("callbacks.subscriptions.postGridEntityRemove")
35
37
  local postGridEntityRemoveRegister = ____postGridEntityRemove.postGridEntityRemoveRegister
38
+ local ____postGridEntityStateChange = require("callbacks.subscriptions.postGridEntityStateChange")
39
+ local postGridEntityStateChangeRegister = ____postGridEntityStateChange.postGridEntityStateChangeRegister
36
40
  local ____postGridEntityUpdate = require("callbacks.subscriptions.postGridEntityUpdate")
37
41
  local postGridEntityUpdateRegister = ____postGridEntityUpdate.postGridEntityUpdateRegister
38
42
  local ____postItemPickup = require("callbacks.subscriptions.postItemPickup")
@@ -388,6 +392,18 @@ function getCallbackRegisterFunction(self, callbackID)
388
392
  return postGridEntityRemoveRegister
389
393
  end
390
394
  end
395
+ ____cond19 = ____cond19 or ____switch19 == ModCallbacksCustom.MC_POST_GRID_ENTITY_STATE_CHANGE
396
+ if ____cond19 then
397
+ do
398
+ return postGridEntityStateChangeRegister
399
+ end
400
+ end
401
+ ____cond19 = ____cond19 or ____switch19 == ModCallbacksCustom.MC_POST_GRID_ENTITY_BROKEN
402
+ if ____cond19 then
403
+ do
404
+ return postGridEntityBrokenRegister
405
+ end
406
+ end
391
407
  ____cond19 = ____cond19 or ____switch19 == ModCallbacksCustom.MC_POST_GRID_ENTITY_COLLISION
392
408
  if ____cond19 then
393
409
  do
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "isaacscript-common",
3
- "version": "1.2.75",
3
+ "version": "1.2.76",
4
4
  "description": "Helper functions for IsaacScript mods",
5
5
  "keywords": [
6
6
  "isaac",
@@ -26,7 +26,7 @@
26
26
  ],
27
27
  "devDependencies": {
28
28
  "@zamiell/typescript-to-lua": "^1.4.0",
29
- "isaac-typescript-definitions": "^1.0.353",
29
+ "isaac-typescript-definitions": "^1.0.354",
30
30
  "isaacscript-lint": "^1.0.81",
31
31
  "isaacscript-tsconfig": "^1.1.8",
32
32
  "typedoc": "^0.22.12",