isaacscript-common 1.2.19 → 1.2.20

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, "postGridEntity", 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
@@ -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
@@ -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.19",
3
+ "version": "1.2.20",
4
4
  "description": "Helper functions for IsaacScript mods",
5
5
  "keywords": [
6
6
  "isaac",