isaacscript-common 84.0.1 → 84.1.1
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/dist/arrays/cachedEnumValues.js +33 -0
- package/dist/callbackClasses.js +289 -0
- package/dist/callbacks.js +181 -0
- package/dist/classes/DefaultMap.js +171 -0
- package/dist/classes/ModFeature.js +244 -0
- package/dist/classes/ModUpgraded.js +324 -0
- package/dist/classes/callbacks/EntityTakeDmgFilter.js +19 -0
- package/dist/classes/callbacks/EntityTakeDmgPlayer.js +29 -0
- package/dist/classes/callbacks/InputActionFilter.js +24 -0
- package/dist/classes/callbacks/InputActionPlayer.js +37 -0
- package/dist/classes/callbacks/PostAmbushFinished.js +40 -0
- package/dist/classes/callbacks/PostAmbushStarted.js +40 -0
- package/dist/classes/callbacks/PostBombExploded.js +24 -0
- package/dist/classes/callbacks/PostBombInitFilter.js +21 -0
- package/dist/classes/callbacks/PostBombInitLate.js +31 -0
- package/dist/classes/callbacks/PostBombRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostBombUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostBoneSwing.js +53 -0
- package/dist/classes/callbacks/PostCollectibleEmpty.js +50 -0
- package/dist/classes/callbacks/PostCursedTeleport.js +119 -0
- package/dist/classes/callbacks/PostCustomRevive.js +17 -0
- package/dist/classes/callbacks/PostDiceRoomActivated.js +50 -0
- package/dist/classes/callbacks/PostDoorRender.js +24 -0
- package/dist/classes/callbacks/PostDoorUpdate.js +24 -0
- package/dist/classes/callbacks/PostEffectInitFilter.js +21 -0
- package/dist/classes/callbacks/PostEffectInitLate.js +31 -0
- package/dist/classes/callbacks/PostEffectRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostEffectStateChanged.js +34 -0
- package/dist/classes/callbacks/PostEffectUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostEntityKillFilter.js +21 -0
- package/dist/classes/callbacks/PostEsauJr.js +12 -0
- package/dist/classes/callbacks/PostFamiliarInitFilter.js +21 -0
- package/dist/classes/callbacks/PostFamiliarInitLate.js +31 -0
- package/dist/classes/callbacks/PostFamiliarRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostFamiliarStateChanged.js +34 -0
- package/dist/classes/callbacks/PostFamiliarUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostFirstEsauJr.js +12 -0
- package/dist/classes/callbacks/PostFirstFlip.js +12 -0
- package/dist/classes/callbacks/PostFlip.js +12 -0
- package/dist/classes/callbacks/PostGameEndFilter.js +21 -0
- package/dist/classes/callbacks/PostGameStartedReordered.js +14 -0
- package/dist/classes/callbacks/PostGameStartedReorderedLast.js +14 -0
- package/dist/classes/callbacks/PostGreedModeWave.js +35 -0
- package/dist/classes/callbacks/PostGridEntityBroken.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCollision.js +28 -0
- package/dist/classes/callbacks/PostGridEntityCustomBroken.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomCollision.js +24 -0
- package/dist/classes/callbacks/PostGridEntityCustomInit.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomRemove.js +18 -0
- package/dist/classes/callbacks/PostGridEntityCustomRender.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomStateChanged.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomUpdate.js +14 -0
- package/dist/classes/callbacks/PostGridEntityInit.js +14 -0
- package/dist/classes/callbacks/PostGridEntityRemove.js +19 -0
- package/dist/classes/callbacks/PostGridEntityRender.js +14 -0
- package/dist/classes/callbacks/PostGridEntityStateChanged.js +14 -0
- package/dist/classes/callbacks/PostGridEntityUpdate.js +14 -0
- package/dist/classes/callbacks/PostHolyMantleRemoved.js +43 -0
- package/dist/classes/callbacks/PostItemDischarge.js +122 -0
- package/dist/classes/callbacks/PostItemPickup.js +14 -0
- package/dist/classes/callbacks/PostKeyboardChanged.js +46 -0
- package/dist/classes/callbacks/PostKnifeInitFilter.js +21 -0
- package/dist/classes/callbacks/PostKnifeInitLate.js +31 -0
- package/dist/classes/callbacks/PostKnifeRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostKnifeUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostLaserInitFilter.js +21 -0
- package/dist/classes/callbacks/PostLaserInitLate.js +31 -0
- package/dist/classes/callbacks/PostLaserRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostLaserUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCDeathFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCInitFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCInitLate.js +31 -0
- package/dist/classes/callbacks/PostNPCRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCStateChanged.js +34 -0
- package/dist/classes/callbacks/PostNPCUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostNewLevelReordered.js +14 -0
- package/dist/classes/callbacks/PostNewRoomEarly.js +74 -0
- package/dist/classes/callbacks/PostNewRoomReordered.js +14 -0
- package/dist/classes/callbacks/PostPEffectUpdateReordered.js +14 -0
- package/dist/classes/callbacks/PostPickupChanged.js +14 -0
- package/dist/classes/callbacks/PostPickupCollect.js +38 -0
- package/dist/classes/callbacks/PostPickupInitFilter.js +21 -0
- package/dist/classes/callbacks/PostPickupInitFirst.js +33 -0
- package/dist/classes/callbacks/PostPickupInitLate.js +31 -0
- package/dist/classes/callbacks/PostPickupRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostPickupSelectionFilter.js +29 -0
- package/dist/classes/callbacks/PostPickupStateChanged.js +34 -0
- package/dist/classes/callbacks/PostPickupUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostPitRender.js +24 -0
- package/dist/classes/callbacks/PostPitUpdate.js +24 -0
- package/dist/classes/callbacks/PostPlayerChangeHealth.js +47 -0
- package/dist/classes/callbacks/PostPlayerChangeStat.js +79 -0
- package/dist/classes/callbacks/PostPlayerChangeType.js +36 -0
- package/dist/classes/callbacks/PostPlayerCollectibleAdded.js +14 -0
- package/dist/classes/callbacks/PostPlayerCollectibleRemoved.js +14 -0
- package/dist/classes/callbacks/PostPlayerFatalDamage.js +83 -0
- package/dist/classes/callbacks/PostPlayerInitFirst.js +41 -0
- package/dist/classes/callbacks/PostPlayerInitLate.js +33 -0
- package/dist/classes/callbacks/PostPlayerRenderReordered.js +14 -0
- package/dist/classes/callbacks/PostPlayerUpdateReordered.js +14 -0
- package/dist/classes/callbacks/PostPoopRender.js +24 -0
- package/dist/classes/callbacks/PostPoopUpdate.js +24 -0
- package/dist/classes/callbacks/PostPressurePlateRender.js +24 -0
- package/dist/classes/callbacks/PostPressurePlateUpdate.js +24 -0
- package/dist/classes/callbacks/PostProjectileInitFilter.js +21 -0
- package/dist/classes/callbacks/PostProjectileInitLate.js +31 -0
- package/dist/classes/callbacks/PostProjectileKill.js +52 -0
- package/dist/classes/callbacks/PostProjectileRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostProjectileUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostPurchase.js +90 -0
- package/dist/classes/callbacks/PostRockRender.js +24 -0
- package/dist/classes/callbacks/PostRockUpdate.js +24 -0
- package/dist/classes/callbacks/PostRoomClearChanged.js +46 -0
- package/dist/classes/callbacks/PostSacrifice.js +36 -0
- package/dist/classes/callbacks/PostSlotAnimationChanged.js +14 -0
- package/dist/classes/callbacks/PostSlotCollision.js +25 -0
- package/dist/classes/callbacks/PostSlotDestroyed.js +14 -0
- package/dist/classes/callbacks/PostSlotInit.js +14 -0
- package/dist/classes/callbacks/PostSlotRender.js +14 -0
- package/dist/classes/callbacks/PostSlotUpdate.js +14 -0
- package/dist/classes/callbacks/PostSpikesRender.js +24 -0
- package/dist/classes/callbacks/PostSpikesUpdate.js +24 -0
- package/dist/classes/callbacks/PostTNTRender.js +24 -0
- package/dist/classes/callbacks/PostTNTUpdate.js +24 -0
- package/dist/classes/callbacks/PostTearInitFilter.js +21 -0
- package/dist/classes/callbacks/PostTearInitLate.js +31 -0
- package/dist/classes/callbacks/PostTearInitVeryLate.js +35 -0
- package/dist/classes/callbacks/PostTearKill.js +52 -0
- package/dist/classes/callbacks/PostTearRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostTearUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostTransformation.js +47 -0
- package/dist/classes/callbacks/PostTrinketBreak.js +70 -0
- package/dist/classes/callbacks/PostUsePillFilter.js +76 -0
- package/dist/classes/callbacks/PreBerserkDeath.js +41 -0
- package/dist/classes/callbacks/PreBombCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreCustomRevive.js +14 -0
- package/dist/classes/callbacks/PreEntitySpawnFilter.js +24 -0
- package/dist/classes/callbacks/PreFamiliarCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreGetPedestal.js +46 -0
- package/dist/classes/callbacks/PreItemPickup.js +14 -0
- package/dist/classes/callbacks/PreKnifeCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreNPCCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreNPCUpdateFilter.js +19 -0
- package/dist/classes/callbacks/PreNewLevel.js +51 -0
- package/dist/classes/callbacks/PreProjectileCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreRoomEntitySpawnFilter.js +26 -0
- package/dist/classes/callbacks/PreTearCollisionFilter.js +19 -0
- package/dist/classes/features/callbackLogic/CustomGridEntities.js +359 -0
- package/dist/classes/features/callbackLogic/CustomRevive.js +170 -0
- package/dist/classes/features/callbackLogic/EsauJrDetection.js +70 -0
- package/dist/classes/features/callbackLogic/FlipDetection.js +61 -0
- package/dist/classes/features/callbackLogic/GameReorderedCallbacks.js +220 -0
- package/dist/classes/features/callbackLogic/GridEntityCollisionDetection.js +62 -0
- package/dist/classes/features/callbackLogic/GridEntityRenderDetection.js +35 -0
- package/dist/classes/features/callbackLogic/GridEntityUpdateDetection.js +147 -0
- package/dist/classes/features/callbackLogic/ItemPickupDetection.js +68 -0
- package/dist/classes/features/callbackLogic/PickupChangeDetection.js +43 -0
- package/dist/classes/features/callbackLogic/PlayerCollectibleDetection.js +193 -0
- package/dist/classes/features/callbackLogic/PlayerReorderedCallbacks.js +109 -0
- package/dist/classes/features/callbackLogic/SlotDestroyedDetection.js +95 -0
- package/dist/classes/features/callbackLogic/SlotRenderDetection.js +48 -0
- package/dist/classes/features/callbackLogic/SlotUpdateDetection.js +52 -0
- package/dist/classes/features/other/CharacterHealthConversion.js +112 -0
- package/dist/classes/features/other/CharacterStats.js +68 -0
- package/dist/classes/features/other/CollectibleItemPoolType.js +75 -0
- package/dist/classes/features/other/CustomHotkeys.js +144 -0
- package/dist/classes/features/other/CustomItemPools.js +128 -0
- package/dist/classes/features/other/CustomPickups.js +118 -0
- package/dist/classes/features/other/CustomStages.js +471 -0
- package/dist/classes/features/other/CustomTrapdoors.js +596 -0
- package/dist/classes/features/other/DebugDisplay.js +699 -0
- package/dist/classes/features/other/DeployJSONRoom.js +301 -0
- package/dist/classes/features/other/DisableAllSound.js +90 -0
- package/dist/classes/features/other/DisableInputs.js +249 -0
- package/dist/classes/features/other/EdenStartingStatsHealth.js +197 -0
- package/dist/classes/features/other/ExtraConsoleCommands.js +292 -0
- package/dist/classes/features/other/FadeInRemover.js +67 -0
- package/dist/classes/features/other/FastReset.js +88 -0
- package/dist/classes/features/other/FlyingDetection.js +64 -0
- package/dist/classes/features/other/ForgottenSwitch.js +43 -0
- package/dist/classes/features/other/ItemPoolDetection.js +187 -0
- package/dist/classes/features/other/ModdedElementDetection.js +399 -0
- package/dist/classes/features/other/ModdedElementSets.js +1251 -0
- package/dist/classes/features/other/NoSirenSteal.js +88 -0
- package/dist/classes/features/other/Pause.js +197 -0
- package/dist/classes/features/other/PersistentEntities.js +168 -0
- package/dist/classes/features/other/PickupIndexCreation.js +229 -0
- package/dist/classes/features/other/PlayerCollectibleTracking.js +102 -0
- package/dist/classes/features/other/PonyDetection.js +86 -0
- package/dist/classes/features/other/PressInput.js +71 -0
- package/dist/classes/features/other/PreventChildEntities.js +60 -0
- package/dist/classes/features/other/PreventGridEntityRespawn.js +159 -0
- package/dist/classes/features/other/RerunDetection.js +69 -0
- package/dist/classes/features/other/RoomClearFrame.js +94 -0
- package/dist/classes/features/other/RoomHistory.js +196 -0
- package/dist/classes/features/other/RunInNFrames.js +323 -0
- package/dist/classes/features/other/RunNextRoom.js +53 -0
- package/dist/classes/features/other/RunNextRun.js +60 -0
- package/dist/classes/features/other/SaveDataManager.js +383 -0
- package/dist/classes/features/other/SpawnRockAltRewards.js +469 -0
- package/dist/classes/features/other/StageHistory.js +244 -0
- package/dist/classes/features/other/StartAmbush.js +62 -0
- package/dist/classes/features/other/TaintedLazarusPlayers.js +115 -0
- package/dist/classes/features/other/UnlockAchievementsDetection.js +60 -0
- package/dist/classes/features/other/customStages/backdrop.js +195 -0
- package/dist/classes/features/other/customStages/constants.js +19 -0
- package/dist/classes/features/other/customStages/gridEntities.js +177 -0
- package/dist/classes/features/other/customStages/shadows.js +67 -0
- package/dist/classes/features/other/customStages/streakText.js +222 -0
- package/dist/classes/features/other/customStages/utils.js +65 -0
- package/dist/classes/features/other/customStages/v.js +27 -0
- package/dist/classes/features/other/customStages/versusScreen.js +227 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayBomb.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayDoor.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayEffect.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayFamiliar.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayKnife.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayLaser.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayNPC.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPickup.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPit.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPlayer.js +25 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPoop.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPressurePlate.js +25 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayProjectile.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayRock.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplaySlot.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplaySpikes.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayTNT.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayTear.js +23 -0
- package/dist/classes/features/other/debugDisplay/utils.js +13 -0
- package/dist/classes/features/other/extraConsoleCommands/commands.js +1598 -0
- package/dist/classes/features/other/extraConsoleCommands/subroutines.js +135 -0
- package/dist/classes/features/other/extraConsoleCommands/v.js +30 -0
- package/dist/classes/features/other/saveDataManager/constants.js +4 -0
- package/dist/classes/features/other/saveDataManager/glowingHourGlass.js +106 -0
- package/dist/classes/features/other/saveDataManager/loadFromDisk.js +69 -0
- package/dist/classes/features/other/saveDataManager/restoreDefaults.js +69 -0
- package/dist/classes/features/other/saveDataManager/saveToDisk.js +46 -0
- package/dist/classes/private/CustomCallback.js +59 -0
- package/dist/classes/private/Feature.js +39 -0
- package/dist/core/cachedClasses.js +61 -0
- package/dist/core/constants.js +289 -0
- package/dist/core/constantsFirstLast.js +98 -0
- package/dist/core/constantsVanilla.js +131 -0
- package/dist/core/upgradeMod.js +71 -0
- package/dist/customStageMetadata.json +1 -0
- package/dist/data/itempools.json +16625 -0
- package/dist/decorators.js +21 -0
- package/dist/enums/AmbushType.js +9 -0
- package/dist/enums/CornerType.js +11 -0
- package/dist/enums/HealthType.js +20 -0
- package/dist/enums/ISCFeature.js +65 -0
- package/dist/enums/LadderSubTypeCustom.js +20 -0
- package/dist/enums/ModCallbackCustom.js +2477 -0
- package/dist/enums/MysteriousPaperEffect.js +16 -0
- package/dist/enums/PlayerStat.js +37 -0
- package/dist/enums/PocketItemType.js +13 -0
- package/dist/enums/RockAltType.js +23 -0
- package/dist/enums/SaveDataKey.js +14 -0
- package/dist/enums/SerializationType.js +10 -0
- package/dist/enums/SlotDestructionType.js +22 -0
- package/dist/enums/private/GridEntityTypeCustom.js +10 -0
- package/dist/enums/private/SerializationBrand.js +42 -0
- package/dist/enums/private/StageTravelState.js +13 -0
- package/dist/enums/private/TrapdoorAnimation.js +9 -0
- package/dist/enums/private/UIStreakAnimation.js +10 -0
- package/dist/features.js +150 -0
- package/dist/functions/ambush.js +26 -0
- package/dist/functions/array.js +586 -0
- package/dist/functions/arrayLua.js +81 -0
- package/dist/functions/benchmark.js +36 -0
- package/dist/functions/bitSet128.js +64 -0
- package/dist/functions/bitwise.js +82 -0
- package/dist/functions/bombs.js +14 -0
- package/dist/functions/bosses.js +238 -0
- package/dist/functions/cards.js +164 -0
- package/dist/functions/challenges.js +117 -0
- package/dist/functions/characters.js +182 -0
- package/dist/functions/charge.js +251 -0
- package/dist/functions/chargeBar.js +54 -0
- package/dist/functions/collectibleTag.js +24 -0
- package/dist/functions/collectibles.js +581 -0
- package/dist/functions/color.js +88 -0
- package/dist/functions/console.js +18 -0
- package/dist/functions/curses.js +37 -0
- package/dist/functions/debugFunctions.js +108 -0
- package/dist/functions/decorators.js +113 -0
- package/dist/functions/deepCopy.js +406 -0
- package/dist/functions/deepCopyTests.js +361 -0
- package/dist/functions/dimensions.js +30 -0
- package/dist/functions/direction.js +78 -0
- package/dist/functions/doors.js +524 -0
- package/dist/functions/easing.js +327 -0
- package/dist/functions/effects.js +14 -0
- package/dist/functions/emptyRoom.js +79 -0
- package/dist/functions/entities.js +529 -0
- package/dist/functions/entitiesSpecific.js +582 -0
- package/dist/functions/entityTypes.js +9 -0
- package/dist/functions/enums.js +244 -0
- package/dist/functions/external.js +59 -0
- package/dist/functions/familiars.js +136 -0
- package/dist/functions/flag.js +146 -0
- package/dist/functions/frames.js +166 -0
- package/dist/functions/globals.js +291 -0
- package/dist/functions/gridEntities.js +990 -0
- package/dist/functions/gridEntitiesSpecific.js +456 -0
- package/dist/functions/gridIndex.js +35 -0
- package/dist/functions/hash.js +75 -0
- package/dist/functions/hex.js +57 -0
- package/dist/functions/input.js +185 -0
- package/dist/functions/isaacAPIClass.js +157 -0
- package/dist/functions/itemPool.js +118 -0
- package/dist/functions/jsonHelpers.js +73 -0
- package/dist/functions/jsonRoom.js +184 -0
- package/dist/functions/kColor.js +89 -0
- package/dist/functions/language.js +16 -0
- package/dist/functions/level.js +66 -0
- package/dist/functions/levelGrid.js +497 -0
- package/dist/functions/log.js +86 -0
- package/dist/functions/logEntities.js +308 -0
- package/dist/functions/logMisc.js +510 -0
- package/dist/functions/map.js +121 -0
- package/dist/functions/math.js +149 -0
- package/dist/functions/merge.js +159 -0
- package/dist/functions/mergeTests.js +313 -0
- package/dist/functions/minimap.js +204 -0
- package/dist/functions/modFeatures.js +39 -0
- package/dist/functions/newArray.js +30 -0
- package/dist/functions/nextStage.js +169 -0
- package/dist/functions/npcDataStructures.js +146 -0
- package/dist/functions/npcs.js +132 -0
- package/dist/functions/pickupVariants.js +63 -0
- package/dist/functions/pickups.js +168 -0
- package/dist/functions/pickupsSpecific.js +376 -0
- package/dist/functions/pills.js +200 -0
- package/dist/functions/playerCenter.js +53 -0
- package/dist/functions/playerCollectibles.js +300 -0
- package/dist/functions/playerDataStructures.js +145 -0
- package/dist/functions/playerEffects.js +63 -0
- package/dist/functions/playerHealth.js +604 -0
- package/dist/functions/playerIndex.js +186 -0
- package/dist/functions/playerTrinkets.js +149 -0
- package/dist/functions/players.js +471 -0
- package/dist/functions/pocketItems.js +165 -0
- package/dist/functions/positionVelocity.js +158 -0
- package/dist/functions/pressurePlate.js +26 -0
- package/dist/functions/projectiles.js +57 -0
- package/dist/functions/random.js +90 -0
- package/dist/functions/readOnly.js +33 -0
- package/dist/functions/render.js +36 -0
- package/dist/functions/revive.js +151 -0
- package/dist/functions/rng.js +140 -0
- package/dist/functions/rockAlt.js +50 -0
- package/dist/functions/roomData.js +155 -0
- package/dist/functions/roomGrid.js +97 -0
- package/dist/functions/roomShape.js +143 -0
- package/dist/functions/roomShapeWalls.js +187 -0
- package/dist/functions/roomTransition.js +43 -0
- package/dist/functions/rooms.js +782 -0
- package/dist/functions/run.js +121 -0
- package/dist/functions/seeds.js +22 -0
- package/dist/functions/serialization.js +98 -0
- package/dist/functions/set.js +215 -0
- package/dist/functions/slots.js +41 -0
- package/dist/functions/sort.js +158 -0
- package/dist/functions/sound.js +45 -0
- package/dist/functions/spawnCollectible.js +112 -0
- package/dist/functions/sprites.js +130 -0
- package/dist/functions/stage.js +540 -0
- package/dist/functions/stats.js +104 -0
- package/dist/functions/storyBosses.js +63 -0
- package/dist/functions/string.js +194 -0
- package/dist/functions/table.js +162 -0
- package/dist/functions/tears.js +128 -0
- package/dist/functions/transformations.js +89 -0
- package/dist/functions/trinketGive.js +145 -0
- package/dist/functions/trinkets.js +213 -0
- package/dist/functions/tstlClass.js +97 -0
- package/dist/functions/types.js +225 -0
- package/dist/functions/ui.js +148 -0
- package/dist/functions/utils.d.ts +2 -0
- package/dist/functions/utils.d.ts.map +1 -1
- package/dist/functions/utils.js +195 -0
- package/dist/functions/utils.lua +4 -1
- package/dist/functions/vector.js +150 -0
- package/dist/functions/versusScreen.js +58 -0
- package/dist/functions/weighted.js +57 -0
- package/dist/index.js +219 -0
- package/dist/index.rollup.d.ts +2 -0
- package/dist/indexLua.js +220 -0
- package/dist/interfaces/ChargeBarSprites.js +2 -0
- package/dist/interfaces/Corner.js +2 -0
- package/dist/interfaces/CustomStageTSConfig.js +2 -0
- package/dist/interfaces/GridEntityCustomData.js +2 -0
- package/dist/interfaces/JSONRoomsFile.js +2 -0
- package/dist/interfaces/PlayerHealth.js +2 -0
- package/dist/interfaces/PlayerStats.js +4 -0
- package/dist/interfaces/PocketItemDescription.js +2 -0
- package/dist/interfaces/RoomDescription.js +2 -0
- package/dist/interfaces/SaveData.js +98 -0
- package/dist/interfaces/StageHistoryEntry.js +2 -0
- package/dist/interfaces/TSTLClassMetatable.js +2 -0
- package/dist/interfaces/TrinketSituation.js +2 -0
- package/dist/interfaces/private/AddCallbackParametersCustom.js +4 -0
- package/dist/interfaces/private/CustomStage.js +2 -0
- package/dist/interfaces/private/CustomTrapdoorDescription.js +2 -0
- package/dist/interfaces/private/ModUpgradedInterface.js +2 -0
- package/dist/isaacscript-common.lua +5 -2
- package/dist/maps/PHDPillConversionsMap.js +23 -0
- package/dist/maps/cardNameToTypeMap.js +211 -0
- package/dist/maps/characterNameToTypeMap.js +91 -0
- package/dist/maps/collectibleNameToTypeMap.js +19 -0
- package/dist/maps/defaultPlayerStatMap.js +17 -0
- package/dist/maps/entityTypeVariantToBossIDMap.js +11 -0
- package/dist/maps/falsePHDPillConversionsMap.js +37 -0
- package/dist/maps/gridEntityTypeToBrokenStateMap.js +32 -0
- package/dist/maps/gridEntityXMLMap.js +133 -0
- package/dist/maps/itemPoolTypeToItemPoolName.js +38 -0
- package/dist/maps/keyboardToStringMap.js +71 -0
- package/dist/maps/pillNameToEffectMap.js +91 -0
- package/dist/maps/roomNameToTypeMap.js +43 -0
- package/dist/maps/roomShapeToTopLeftWallGridIndexMap.js +17 -0
- package/dist/maps/transformationNameToPlayerFormMap.js +35 -0
- package/dist/maps/trinketNameToTypeMap.js +19 -0
- package/dist/objects/LRoomShapeToRectangles.js +43 -0
- package/dist/objects/backdropTypeToRockAltType.js +68 -0
- package/dist/objects/batteryNames.js +13 -0
- package/dist/objects/bombNames.js +17 -0
- package/dist/objects/bossIDToEntityTypeVariant.js +228 -0
- package/dist/objects/bossNamePNGFileNames.js +120 -0
- package/dist/objects/bossNames.js +119 -0
- package/dist/objects/bossPortraitPNGFileNames.js +123 -0
- package/dist/objects/cardDescriptions.js +106 -0
- package/dist/objects/cardNames.js +106 -0
- package/dist/objects/challengeBosses.js +60 -0
- package/dist/objects/challengeCharacters.js +58 -0
- package/dist/objects/challengeCollectibleTypes.js +255 -0
- package/dist/objects/challengeNames.js +54 -0
- package/dist/objects/challengeTrinketType.js +58 -0
- package/dist/objects/characterDamageMultipliers.js +49 -0
- package/dist/objects/characterNames.js +48 -0
- package/dist/objects/characterSpritePNGFileNames.js +50 -0
- package/dist/objects/characterStartingCollectibleTypes.js +105 -0
- package/dist/objects/characterStartingTrinketTypes.js +90 -0
- package/dist/objects/chestNames.js +20 -0
- package/dist/objects/coinNames.js +16 -0
- package/dist/objects/coinSubTypeToValue.js +15 -0
- package/dist/objects/collectibleDescriptions.js +742 -0
- package/dist/objects/collectibleNames.js +745 -0
- package/dist/objects/colors.js +26 -0
- package/dist/objects/directionNames.js +11 -0
- package/dist/objects/directionToDegrees.js +11 -0
- package/dist/objects/directionToMoveAction.js +11 -0
- package/dist/objects/directionToShootAction.js +11 -0
- package/dist/objects/directionToVector.js +13 -0
- package/dist/objects/doorSlotFlagToDoorSlot.js +15 -0
- package/dist/objects/doorSlotToDirection.js +15 -0
- package/dist/objects/doorSlotToDoorSlotFlag.js +15 -0
- package/dist/objects/gridEntityTypeToANM2Name.js +37 -0
- package/dist/objects/heartNames.js +21 -0
- package/dist/objects/isaacAPIClassTypeToBrand.js +12 -0
- package/dist/objects/isaacAPIClassTypeToFunctions.js +46 -0
- package/dist/objects/itemPoolTypeToCollectibleTypesSet.js +57 -0
- package/dist/objects/kColors.js +27 -0
- package/dist/objects/keyNames.js +13 -0
- package/dist/objects/languageNames.js +13 -0
- package/dist/objects/oppositeDoorSlots.js +15 -0
- package/dist/objects/pillEffectClasses.js +57 -0
- package/dist/objects/pillEffectNames.js +57 -0
- package/dist/objects/pillEffectTypeToPillEffects.js +23 -0
- package/dist/objects/pillEffectTypes.js +57 -0
- package/dist/objects/playerNamePNGFileNames.js +57 -0
- package/dist/objects/playerPortraitPNGFileNames.js +54 -0
- package/dist/objects/roomShapeBounds.js +48 -0
- package/dist/objects/roomShapeCorners.js +330 -0
- package/dist/objects/roomShapeLayoutSizes.js +41 -0
- package/dist/objects/roomShapeToBottomRightPosition.js +25 -0
- package/dist/objects/roomShapeToDoorSlotCoordinates.js +111 -0
- package/dist/objects/roomShapeToDoorSlots.js +72 -0
- package/dist/objects/roomShapeToDoorSlotsToGridIndexDelta.js +118 -0
- package/dist/objects/roomShapeToGridWidth.js +20 -0
- package/dist/objects/roomShapeToTopLeftPosition.js +26 -0
- package/dist/objects/roomShapeVolumes.js +32 -0
- package/dist/objects/roomTypeNames.js +35 -0
- package/dist/objects/roomTypeSpecialGotoPrefixes.js +35 -0
- package/dist/objects/sackNames.js +11 -0
- package/dist/objects/slotNames.js +26 -0
- package/dist/objects/stageIDNames.js +43 -0
- package/dist/objects/stageToMusic.js +91 -0
- package/dist/objects/stageToStageID.js +117 -0
- package/dist/objects/stageTypeSuffixes.js +14 -0
- package/dist/objects/transformationNames.js +20 -0
- package/dist/objects/trinketDescriptions.js +199 -0
- package/dist/objects/trinketNames.js +202 -0
- package/dist/objects/versusScreenBackgroundColors.js +46 -0
- package/dist/objects/versusScreenDirtSpotColors.js +46 -0
- package/dist/patchErrorFunctions.js +65 -0
- package/dist/serialization.js +21 -0
- package/dist/sets/LRoomShapesSet.js +11 -0
- package/dist/sets/bigRoomShapesSet.js +14 -0
- package/dist/sets/bossSets.js +465 -0
- package/dist/sets/charactersThatStartWithAnActiveItemSet.js +18 -0
- package/dist/sets/charactersWithBlackHeartFromEternalHeartSet.js +9 -0
- package/dist/sets/charactersWithFreeDevilDealsSet.js +6 -0
- package/dist/sets/charactersWithNoRedHeartsSet.js +19 -0
- package/dist/sets/charactersWithNoSoulHeartsSet.js +16 -0
- package/dist/sets/consoleCommandsSet.js +64 -0
- package/dist/sets/entitiesWithArmorSet.js +59 -0
- package/dist/sets/familiarsThatShootPlayerTearsSet.js +15 -0
- package/dist/sets/itemConfigCardTypesForCards.js +14 -0
- package/dist/sets/lostStyleCharactersSet.js +16 -0
- package/dist/sets/mineShaftRoomSubTypesSet.js +12 -0
- package/dist/sets/narrowRoomShapesSet.js +11 -0
- package/dist/sets/poopGridEntityXMLTypesSet.js +16 -0
- package/dist/sets/redHeartSubTypesSet.js +10 -0
- package/dist/sets/repentanceBossIDsSet.js +30 -0
- package/dist/sets/sinEntityTypesSet.js +14 -0
- package/dist/sets/singleUseActiveCollectibleTypesSet.js +15 -0
- package/dist/shaderCrashFix.js +24 -0
- package/dist/shouldFire.js +226 -0
- package/dist/types/AddSubtract.js +2 -0
- package/dist/types/AllButFirst.js +2 -0
- package/dist/types/AllButLast.js +2 -0
- package/dist/types/AnyClass.js +2 -0
- package/dist/types/AnyEntity.js +2 -0
- package/dist/types/AnyFunction.js +2 -0
- package/dist/types/AnyGridEntity.js +2 -0
- package/dist/types/CompositionTypeSatisfiesEnum.js +11 -0
- package/dist/types/ConversionHeartSubType.js +2 -0
- package/dist/types/Decrement.js +2 -0
- package/dist/types/ERange.js +2 -0
- package/dist/types/EntityID.js +2 -0
- package/dist/types/FunctionTuple.js +2 -0
- package/dist/types/GridEntityID.js +2 -0
- package/dist/types/HasFunction.js +2 -0
- package/dist/types/IRange.js +2 -0
- package/dist/types/Immutable.js +2 -0
- package/dist/types/Increment.js +2 -0
- package/dist/types/LowercaseKeys.js +2 -0
- package/dist/types/NaturalNumbersLessThan.js +2 -0
- package/dist/types/NaturalNumbersLessThanOrEqualTo.js +2 -0
- package/dist/types/PickingUpItem.js +44 -0
- package/dist/types/PickupIndex.js +2 -0
- package/dist/types/PlayerIndex.js +2 -0
- package/dist/types/PossibleStatType.js +2 -0
- package/dist/types/PublicInterface.js +2 -0
- package/dist/types/ReadonlyMap.js +6 -0
- package/dist/types/ReadonlyRecord.js +2 -0
- package/dist/types/ReadonlySet.js +6 -0
- package/dist/types/StartsWithLowercase.js +2 -0
- package/dist/types/StartsWithUppercase.js +2 -0
- package/dist/types/TSTLClass.js +2 -0
- package/dist/types/Tuple.js +2 -0
- package/dist/types/TupleKeys.js +2 -0
- package/dist/types/TupleToIntersection.js +2 -0
- package/dist/types/TupleToUnion.js +2 -0
- package/dist/types/TupleWithLengthBetween.js +22 -0
- package/dist/types/TupleWithMaxLength.js +27 -0
- package/dist/types/UnionToIntersection.js +2 -0
- package/dist/types/UppercaseKeys.js +2 -0
- package/dist/types/WeightedArray.js +2 -0
- package/dist/types/WidenLiteral.js +2 -0
- package/dist/types/Writable.js +2 -0
- package/dist/types/private/CallbackTuple.js +2 -0
- package/dist/types/private/ModUpgradedWithFeatures.js +2 -0
- package/package.json +1 -1
- package/src/functions/utils.ts +4 -1
- package/src/lib/jsonLua.js +701 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tanh = exports.splitNumber = exports.sign = exports.round = exports.lerpAngleDegrees = exports.lerp = exports.isOdd = exports.isEven = exports.isCircleIntersectingRectangle = exports.inRectangle = exports.getCircleDiscretizedPoints = exports.getAngleDifference = exports.clamp = void 0;
|
|
4
|
+
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
5
|
+
const direction_1 = require("./direction");
|
|
6
|
+
/**
|
|
7
|
+
* Helper function to normalize a number, ensuring that it is within a certain range.
|
|
8
|
+
*
|
|
9
|
+
* - If `num` is less than `min`, then it will be clamped to `min`.
|
|
10
|
+
* - If `num` is greater than `max`, then it will be clamped to `max`.
|
|
11
|
+
*/
|
|
12
|
+
function clamp(num, min, max) {
|
|
13
|
+
return Math.max(min, Math.min(num, max));
|
|
14
|
+
}
|
|
15
|
+
exports.clamp = clamp;
|
|
16
|
+
function getAngleDifference(angle1, angle2) {
|
|
17
|
+
const subtractedAngle = angle1 - angle2;
|
|
18
|
+
return ((subtractedAngle + 180) % 360) - 180;
|
|
19
|
+
}
|
|
20
|
+
exports.getAngleDifference = getAngleDifference;
|
|
21
|
+
/**
|
|
22
|
+
* Helper function to get an array of equidistant points on the circumference around a circle.
|
|
23
|
+
* Useful for equally distributing things in a circle pattern.
|
|
24
|
+
*
|
|
25
|
+
* @param centerPos A position that represents the center of the center to get the points from.
|
|
26
|
+
* @param radius The radius of the circle.
|
|
27
|
+
* @param numPoints The number of points on the circumference of the circle to get.
|
|
28
|
+
* @param xMultiplier An optional multiplier to get the points around an oval. Default is 1.
|
|
29
|
+
* @param yMultiplier An optional multiplier to get the points around an oval. Default is 1.
|
|
30
|
+
* @param initialDirection By default, the first point on the circle will be on the top center, but
|
|
31
|
+
* this can be optionally changed by specifying this argument.
|
|
32
|
+
*/
|
|
33
|
+
function getCircleDiscretizedPoints(centerPos, radius, numPoints, xMultiplier = 1, yMultiplier = 1, initialDirection = isaac_typescript_definitions_1.Direction.UP) {
|
|
34
|
+
const vector = (0, direction_1.directionToVector)(initialDirection);
|
|
35
|
+
const initialPosition = vector.mul(radius);
|
|
36
|
+
const positions = [];
|
|
37
|
+
for (let i = 0; i < numPoints; i++) {
|
|
38
|
+
const rotatedPosition = initialPosition.Rotated((i * 360) / numPoints);
|
|
39
|
+
rotatedPosition.X *= xMultiplier;
|
|
40
|
+
rotatedPosition.Y *= yMultiplier;
|
|
41
|
+
const positionFromCenter = centerPos.add(rotatedPosition);
|
|
42
|
+
positions.push(positionFromCenter);
|
|
43
|
+
}
|
|
44
|
+
return positions;
|
|
45
|
+
}
|
|
46
|
+
exports.getCircleDiscretizedPoints = getCircleDiscretizedPoints;
|
|
47
|
+
/**
|
|
48
|
+
* Helper function to check if a given position is within a given rectangle.
|
|
49
|
+
*
|
|
50
|
+
* This is an inclusive check, meaning that it will return true if the position is on the border of
|
|
51
|
+
* the rectangle.
|
|
52
|
+
*/
|
|
53
|
+
function inRectangle(position, topLeft, bottomRight) {
|
|
54
|
+
return (position.X >= topLeft.X &&
|
|
55
|
+
position.X <= bottomRight.X &&
|
|
56
|
+
position.Y >= topLeft.Y &&
|
|
57
|
+
position.Y <= bottomRight.Y);
|
|
58
|
+
}
|
|
59
|
+
exports.inRectangle = inRectangle;
|
|
60
|
+
/**
|
|
61
|
+
* From: https://www.geeksforgeeks.org/check-if-any-point-overlaps-the-given-circle-and-rectangle/
|
|
62
|
+
*/
|
|
63
|
+
function isCircleIntersectingRectangle(circleCenter, circleRadius, rectangleTopLeft, rectangleBottomRight) {
|
|
64
|
+
const nearestX = Math.max(rectangleTopLeft.X, Math.min(circleCenter.X, rectangleBottomRight.X));
|
|
65
|
+
const nearestY = Math.max(rectangleTopLeft.Y, Math.min(circleCenter.Y, rectangleBottomRight.Y));
|
|
66
|
+
const nearestPointToCircleOnRectangle = Vector(nearestX, nearestY);
|
|
67
|
+
const distanceToCenterOfCircle = nearestPointToCircleOnRectangle.Distance(circleCenter);
|
|
68
|
+
return distanceToCenterOfCircle <= circleRadius;
|
|
69
|
+
}
|
|
70
|
+
exports.isCircleIntersectingRectangle = isCircleIntersectingRectangle;
|
|
71
|
+
function isEven(num) {
|
|
72
|
+
// This is benchmarked to be faster than using the modulus operator by 3%.
|
|
73
|
+
return (num & 1) === 0;
|
|
74
|
+
}
|
|
75
|
+
exports.isEven = isEven;
|
|
76
|
+
function isOdd(num) {
|
|
77
|
+
// This is benchmarked to be faster than using the modulus operator by 3%.
|
|
78
|
+
return (num & 1) === 1;
|
|
79
|
+
}
|
|
80
|
+
exports.isOdd = isOdd;
|
|
81
|
+
function lerp(a, b, pos) {
|
|
82
|
+
return a + (b - a) * pos;
|
|
83
|
+
}
|
|
84
|
+
exports.lerp = lerp;
|
|
85
|
+
function lerpAngleDegrees(aStart, aEnd, percent) {
|
|
86
|
+
return aStart + getAngleDifference(aStart, aEnd) * percent;
|
|
87
|
+
}
|
|
88
|
+
exports.lerpAngleDegrees = lerpAngleDegrees;
|
|
89
|
+
/**
|
|
90
|
+
* If rounding fails, this function returns 0.
|
|
91
|
+
*
|
|
92
|
+
* From: http://lua-users.org/wiki/SimpleRound
|
|
93
|
+
*
|
|
94
|
+
* @param num The number to round.
|
|
95
|
+
* @param numDecimalPlaces Optional. Default is 0.
|
|
96
|
+
*/
|
|
97
|
+
function round(num, numDecimalPlaces = 0) {
|
|
98
|
+
const roundedNum = tonumber(string.format(`%.${numDecimalPlaces}f`, num));
|
|
99
|
+
return roundedNum ?? 0;
|
|
100
|
+
}
|
|
101
|
+
exports.round = round;
|
|
102
|
+
/** @returns 1 if n is positive, -1 if n is negative, or 0 if n is 0. */
|
|
103
|
+
function sign(n) {
|
|
104
|
+
if (n > 0) {
|
|
105
|
+
return 1;
|
|
106
|
+
}
|
|
107
|
+
if (n < 0) {
|
|
108
|
+
return -1;
|
|
109
|
+
}
|
|
110
|
+
return 0;
|
|
111
|
+
}
|
|
112
|
+
exports.sign = sign;
|
|
113
|
+
/**
|
|
114
|
+
* Breaks a number into chunks of a given size. This is similar to the `String.split` method, but
|
|
115
|
+
* for a number instead of a string.
|
|
116
|
+
*
|
|
117
|
+
* For example, `splitNumber(90, 25)` would return an array with four elements:
|
|
118
|
+
*
|
|
119
|
+
* - [1, 25]
|
|
120
|
+
* - [26, 50]
|
|
121
|
+
* - [51, 75]
|
|
122
|
+
* - [76, 90]
|
|
123
|
+
*
|
|
124
|
+
* @param num The number to split into chunks. This must be a positive integer.
|
|
125
|
+
* @param size The size of each chunk. This must be a positive integer.
|
|
126
|
+
* @param startAtZero Whether to start at 0. Defaults to false. If true, the chunks will start at 0
|
|
127
|
+
* instead of 1.
|
|
128
|
+
*/
|
|
129
|
+
function splitNumber(num, size, startAtZero = false) {
|
|
130
|
+
if (num <= 0) {
|
|
131
|
+
error(`The number to split needs to be a positive number and is instead: ${num}`);
|
|
132
|
+
}
|
|
133
|
+
if (size <= 0) {
|
|
134
|
+
error(`The size to split needs to be a positive number and is instead: ${num}`);
|
|
135
|
+
}
|
|
136
|
+
const chunks = [];
|
|
137
|
+
let start = startAtZero ? 0 : 1;
|
|
138
|
+
while (start <= num) {
|
|
139
|
+
const end = Math.min(start + size - 1, num);
|
|
140
|
+
chunks.push([start, end]);
|
|
141
|
+
start += size;
|
|
142
|
+
}
|
|
143
|
+
return chunks;
|
|
144
|
+
}
|
|
145
|
+
exports.splitNumber = splitNumber;
|
|
146
|
+
function tanh(x) {
|
|
147
|
+
return (Math.exp(x) - Math.exp(-x)) / (Math.exp(x) + Math.exp(-x));
|
|
148
|
+
}
|
|
149
|
+
exports.tanh = tanh;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.merge = void 0;
|
|
4
|
+
const constants_1 = require("../classes/features/other/saveDataManager/constants");
|
|
5
|
+
const SerializationBrand_1 = require("../enums/private/SerializationBrand");
|
|
6
|
+
const SerializationType_1 = require("../enums/SerializationType");
|
|
7
|
+
const serialization_1 = require("../serialization");
|
|
8
|
+
const array_1 = require("./array");
|
|
9
|
+
const deepCopy_1 = require("./deepCopy");
|
|
10
|
+
const log_1 = require("./log");
|
|
11
|
+
const serialization_2 = require("./serialization");
|
|
12
|
+
const table_1 = require("./table");
|
|
13
|
+
const tstlClass_1 = require("./tstlClass");
|
|
14
|
+
const types_1 = require("./types");
|
|
15
|
+
const utils_1 = require("./utils");
|
|
16
|
+
/**
|
|
17
|
+
* `merge` takes the values from a new table and recursively merges them into an old object (while
|
|
18
|
+
* performing appropriate deserialization).
|
|
19
|
+
*
|
|
20
|
+
* This function is used to merge incoming data from the "save#.dat" file into a mod's variables.
|
|
21
|
+
* Merging is useful instead of blowing away a table entirely because mod code often relies on the
|
|
22
|
+
* local table/object references.
|
|
23
|
+
*
|
|
24
|
+
* This function always assumes that the new table is serialized data and will attempt to perform
|
|
25
|
+
* deserialization on the objects within. In other words, unlike the `deepCopy` function, the
|
|
26
|
+
* `merge` function will always operates in the mode of `SerializationType.DESERIALIZE`. For the
|
|
27
|
+
* types of objects that will be deserialized, see the documentation for the `deepCopy` function.
|
|
28
|
+
*
|
|
29
|
+
* This function does not iterate over the old object, like you would naively expect. This is
|
|
30
|
+
* because it is common for a variable to have a type of `something | null`. If this is the case,
|
|
31
|
+
* the key would not appear when iterating over the old object (because a value of null transpiles
|
|
32
|
+
* to nil, which means the table key does not exist). Thus, we must instead iterate over the new
|
|
33
|
+
* object and copy the values backwards. The consequence of this is that `merge` can copy over old
|
|
34
|
+
* variables that are no longer used in the code, or copy over old variables of a different type,
|
|
35
|
+
* which can cause run-time errors. In such cases, users will have to manually delete their save
|
|
36
|
+
* data.
|
|
37
|
+
*
|
|
38
|
+
* @param oldObject The old object to merge the values into. This can be either a Lua table, a TSTL
|
|
39
|
+
* map, or a TSTL set.
|
|
40
|
+
* @param newTable The new table to merge the values from. This must be a Lua table that represents
|
|
41
|
+
* serialized data. In other words, it should be created with the `deepCopy`
|
|
42
|
+
* function using `SerializationType.SERIALIZE`.
|
|
43
|
+
* @param traversalDescription Used to track the current key that we are operating on for debugging
|
|
44
|
+
* purposes. Use a name that corresponds to the name of the merging
|
|
45
|
+
* table.
|
|
46
|
+
* @param classConstructors Optional. A Lua table that maps the name of a user-defined TSTL class to
|
|
47
|
+
* its corresponding constructor. If the `deepCopy` function finds any
|
|
48
|
+
* user-defined TSTL classes when recursively iterating through the given
|
|
49
|
+
* object, it will use this map to instantiate a new class. Default is an
|
|
50
|
+
* empty Lua table.
|
|
51
|
+
*/
|
|
52
|
+
function merge(oldObject, newTable, traversalDescription, classConstructors = new LuaMap()) {
|
|
53
|
+
if (constants_1.SAVE_DATA_MANAGER_DEBUG) {
|
|
54
|
+
(0, log_1.log)(`merge is traversing: ${traversalDescription}`);
|
|
55
|
+
}
|
|
56
|
+
if (!(0, types_1.isTable)(oldObject)) {
|
|
57
|
+
error("The first argument given to the merge function is not a table.");
|
|
58
|
+
}
|
|
59
|
+
if (!(0, types_1.isTable)(newTable)) {
|
|
60
|
+
error("The second argument given to the merge function is not a table.");
|
|
61
|
+
}
|
|
62
|
+
// First, handle the special case of an array with a shallow copy.
|
|
63
|
+
if ((0, array_1.isArray)(oldObject) && (0, array_1.isArray)(newTable)) {
|
|
64
|
+
mergeSerializedArray(oldObject, newTable, traversalDescription, classConstructors);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
// Depending on whether we are working on a Lua table or a TypeScriptToLua object, we need to
|
|
68
|
+
// iterate in a specific way.
|
|
69
|
+
if ((0, tstlClass_1.isTSTLMap)(oldObject) || (0, tstlClass_1.isTSTLSet)(oldObject) || (0, tstlClass_1.isDefaultMap)(oldObject)) {
|
|
70
|
+
mergeSerializedTSTLObject(oldObject, newTable, traversalDescription, classConstructors);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
mergeSerializedTable(oldObject, newTable, traversalDescription, classConstructors);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.merge = merge;
|
|
77
|
+
function mergeSerializedArray(oldArray, newArray, traversalDescription, classConstructors) {
|
|
78
|
+
if (constants_1.SAVE_DATA_MANAGER_DEBUG) {
|
|
79
|
+
(0, log_1.log)(`merge encountered an array: ${traversalDescription}`);
|
|
80
|
+
}
|
|
81
|
+
// Assume that we should blow away all array values with whatever is present in the incoming
|
|
82
|
+
// array.
|
|
83
|
+
(0, table_1.clearTable)(oldArray);
|
|
84
|
+
(0, table_1.iterateTableInOrder)(newArray, (key, value) => {
|
|
85
|
+
const deserializedValue = (0, deepCopy_1.deepCopy)(value, SerializationType_1.SerializationType.DESERIALIZE, traversalDescription, classConstructors);
|
|
86
|
+
oldArray.set(key, deserializedValue);
|
|
87
|
+
}, constants_1.SAVE_DATA_MANAGER_DEBUG);
|
|
88
|
+
}
|
|
89
|
+
function mergeSerializedTSTLObject(
|
|
90
|
+
// eslint-disable-next-line isaacscript/prefer-readonly-parameter-types
|
|
91
|
+
oldObject, newTable, traversalDescription, classConstructors) {
|
|
92
|
+
if (constants_1.SAVE_DATA_MANAGER_DEBUG) {
|
|
93
|
+
(0, log_1.log)(`merge encountered a TSTL object: ${traversalDescription}`);
|
|
94
|
+
}
|
|
95
|
+
// We blow away the old object and recursively copy over all of the incoming values.
|
|
96
|
+
oldObject.clear();
|
|
97
|
+
// During serialization, we brand some Lua tables with a special identifier to signify that it has
|
|
98
|
+
// keys that should be deserialized to numbers.
|
|
99
|
+
const convertStringKeysToNumbers = newTable.has(SerializationBrand_1.SerializationBrand.OBJECT_WITH_NUMBER_KEYS);
|
|
100
|
+
(0, table_1.iterateTableInOrder)(newTable, (key, value) => {
|
|
101
|
+
if ((0, serialization_1.isSerializationBrand)(key)) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
let keyToUse = key;
|
|
105
|
+
if (convertStringKeysToNumbers) {
|
|
106
|
+
const numberKey = tonumber(key);
|
|
107
|
+
if (numberKey === undefined) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
keyToUse = numberKey;
|
|
111
|
+
}
|
|
112
|
+
if ((0, tstlClass_1.isTSTLMap)(oldObject) || (0, tstlClass_1.isDefaultMap)(oldObject)) {
|
|
113
|
+
const deserializedValue = (0, deepCopy_1.deepCopy)(value, SerializationType_1.SerializationType.DESERIALIZE, traversalDescription, classConstructors);
|
|
114
|
+
oldObject.set(keyToUse, deserializedValue);
|
|
115
|
+
}
|
|
116
|
+
else if ((0, tstlClass_1.isTSTLSet)(oldObject)) {
|
|
117
|
+
oldObject.add(keyToUse);
|
|
118
|
+
}
|
|
119
|
+
}, constants_1.SAVE_DATA_MANAGER_DEBUG);
|
|
120
|
+
}
|
|
121
|
+
function mergeSerializedTable(oldTable, newTable, traversalDescription, classConstructors) {
|
|
122
|
+
if (constants_1.SAVE_DATA_MANAGER_DEBUG) {
|
|
123
|
+
(0, log_1.log)(`merge encountered a Lua table: ${traversalDescription}`);
|
|
124
|
+
}
|
|
125
|
+
(0, table_1.iterateTableInOrder)(newTable, (key, value) => {
|
|
126
|
+
if (constants_1.SAVE_DATA_MANAGER_DEBUG) {
|
|
127
|
+
const valueToPrint = value === "" ? "(empty string)" : `${value}`;
|
|
128
|
+
(0, log_1.log)(`merge is merging: ${traversalDescription} --> ${valueToPrint}`);
|
|
129
|
+
}
|
|
130
|
+
if ((0, serialization_1.isSerializationBrand)(key)) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
// Handle the special case of serialized Isaac API classes.
|
|
134
|
+
if ((0, serialization_2.isSerializedIsaacAPIClass)(value)) {
|
|
135
|
+
if (constants_1.SAVE_DATA_MANAGER_DEBUG) {
|
|
136
|
+
(0, log_1.log)("merge found a serialized Isaac API class.");
|
|
137
|
+
}
|
|
138
|
+
const deserializedObject = (0, serialization_2.deserializeIsaacAPIClass)(value);
|
|
139
|
+
oldTable.set(key, deserializedObject);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if ((0, types_1.isTable)(value)) {
|
|
143
|
+
let oldValue = oldTable.get(key);
|
|
144
|
+
if (!(0, types_1.isTable)(oldValue)) {
|
|
145
|
+
// The child table does not exist on the old table. However, we still need to copy over
|
|
146
|
+
// the new table, because we need to handle data types like `Foo | null`. Thus, set up a
|
|
147
|
+
// blank sub-table on the old table, and continue to recursively merge.
|
|
148
|
+
oldValue = new LuaMap();
|
|
149
|
+
oldTable.set(key, oldValue);
|
|
150
|
+
}
|
|
151
|
+
traversalDescription = (0, utils_1.getTraversalDescription)(key, traversalDescription);
|
|
152
|
+
merge(oldValue, value, traversalDescription, classConstructors);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
// Base case: copy the value
|
|
156
|
+
oldTable.set(key, value);
|
|
157
|
+
}
|
|
158
|
+
}, constants_1.SAVE_DATA_MANAGER_DEBUG);
|
|
159
|
+
}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runMergeTests = void 0;
|
|
4
|
+
const DefaultMap_1 = require("../classes/DefaultMap");
|
|
5
|
+
const SerializationType_1 = require("../enums/SerializationType");
|
|
6
|
+
const deepCopy_1 = require("./deepCopy");
|
|
7
|
+
const log_1 = require("./log");
|
|
8
|
+
const merge_1 = require("./merge");
|
|
9
|
+
const rng_1 = require("./rng");
|
|
10
|
+
const serialization_1 = require("./serialization");
|
|
11
|
+
const vector_1 = require("./vector");
|
|
12
|
+
/**
|
|
13
|
+
* Run the suite of tests that prove that the "merge" function works properly.
|
|
14
|
+
*
|
|
15
|
+
* This function is only useful if you are troubleshooting the save data manager.
|
|
16
|
+
*/
|
|
17
|
+
function runMergeTests() {
|
|
18
|
+
oldTableHasUpdatedValue();
|
|
19
|
+
newTableHasSameValue();
|
|
20
|
+
oldTableHasUpdatedValueFromNull();
|
|
21
|
+
oldTableHasSerializedIsaacAPIClass();
|
|
22
|
+
oldTableHasFilledChildTable();
|
|
23
|
+
oldTableHasFilledMap();
|
|
24
|
+
oldTableHasFilledDefaultMap();
|
|
25
|
+
oldTableHasVector();
|
|
26
|
+
oldTableHasVectorSerialized();
|
|
27
|
+
oldTableHasRNG();
|
|
28
|
+
oldTableHasRNGSerialized();
|
|
29
|
+
const successText = "All merge tests passed!";
|
|
30
|
+
(0, log_1.logAndPrint)(successText);
|
|
31
|
+
}
|
|
32
|
+
exports.runMergeTests = runMergeTests;
|
|
33
|
+
function oldTableHasUpdatedValue() {
|
|
34
|
+
const key = "foo";
|
|
35
|
+
const oldValue = "bar";
|
|
36
|
+
const newValue = "baz";
|
|
37
|
+
const oldTable = {
|
|
38
|
+
foo: oldValue,
|
|
39
|
+
};
|
|
40
|
+
const newTable = {
|
|
41
|
+
foo: newValue,
|
|
42
|
+
};
|
|
43
|
+
(0, merge_1.merge)(oldTable, newTable, "oldTableHasUpdatedValue");
|
|
44
|
+
const oldTableValue = oldTable.get(key);
|
|
45
|
+
if (oldTableValue !== newValue) {
|
|
46
|
+
error(`The old table does not have a value of: ${newValue}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function newTableHasSameValue() {
|
|
50
|
+
const key = "foo";
|
|
51
|
+
const oldValue = "bar";
|
|
52
|
+
const newValue = "baz";
|
|
53
|
+
const oldTable = {
|
|
54
|
+
foo: oldValue,
|
|
55
|
+
};
|
|
56
|
+
const newTable = {
|
|
57
|
+
foo: newValue,
|
|
58
|
+
};
|
|
59
|
+
(0, merge_1.merge)(oldTable, newTable, "newTableHasSameValue");
|
|
60
|
+
const newTableValue = newTable.get(key);
|
|
61
|
+
if (newTableValue !== newValue) {
|
|
62
|
+
error(`The new table does not have a value of: ${newValue}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function oldTableHasUpdatedValueFromNull() {
|
|
66
|
+
const key = "foo";
|
|
67
|
+
const newValue = "baz";
|
|
68
|
+
const oldTable = {
|
|
69
|
+
foo: null,
|
|
70
|
+
};
|
|
71
|
+
const newTable = {
|
|
72
|
+
foo: newValue,
|
|
73
|
+
};
|
|
74
|
+
(0, merge_1.merge)(oldTable, newTable, "oldTableHasUpdatedValueFromNull");
|
|
75
|
+
const oldTableValue = oldTable.get(key);
|
|
76
|
+
if (oldTableValue !== newValue) {
|
|
77
|
+
error(`The old table does not have a value of: ${newValue}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function oldTableHasSerializedIsaacAPIClass() {
|
|
81
|
+
const x = 50;
|
|
82
|
+
const y = 60;
|
|
83
|
+
const vector = Vector(x, y);
|
|
84
|
+
const vectorSerialized = (0, vector_1.serializeVector)(vector);
|
|
85
|
+
if (!(0, serialization_1.isSerializedIsaacAPIClass)(vectorSerialized)) {
|
|
86
|
+
error('The "isSerializedIsaacAPIClass" function says that a serialized vector is not serialized.');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function oldTableHasFilledChildTable() {
|
|
90
|
+
const key = "foo";
|
|
91
|
+
const newValue = "baz";
|
|
92
|
+
const oldTable = {
|
|
93
|
+
foo: null,
|
|
94
|
+
};
|
|
95
|
+
const foo = {
|
|
96
|
+
bar: newValue,
|
|
97
|
+
};
|
|
98
|
+
const newTable = {
|
|
99
|
+
foo,
|
|
100
|
+
};
|
|
101
|
+
(0, merge_1.merge)(oldTable, newTable, "oldTableHasFilledChildTable");
|
|
102
|
+
const oldTableValue = oldTable.get(key);
|
|
103
|
+
if (oldTableValue === undefined) {
|
|
104
|
+
error(`The old table's key of "${key}" was not filled.`);
|
|
105
|
+
}
|
|
106
|
+
if (oldTableValue.bar !== newValue) {
|
|
107
|
+
error('The old table\'s key of "bar" was not filled.');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function oldTableHasFilledMap() {
|
|
111
|
+
const fakeV = {
|
|
112
|
+
run: {
|
|
113
|
+
myMap: new Map(),
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
const saveData = {
|
|
117
|
+
run: {
|
|
118
|
+
myMap: new Map([
|
|
119
|
+
["foo1", "bar1"],
|
|
120
|
+
["foo2", "bar2"],
|
|
121
|
+
["foo3", "bar3"],
|
|
122
|
+
]),
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
const serializedSaveData = (0, deepCopy_1.deepCopy)(saveData, SerializationType_1.SerializationType.SERIALIZE);
|
|
126
|
+
(0, merge_1.merge)(fakeV, serializedSaveData, "oldTableHasFilledMap");
|
|
127
|
+
const expectedSize = 3;
|
|
128
|
+
if (fakeV.run.myMap.size !== expectedSize) {
|
|
129
|
+
error(`The size of the merged map was equal to ${fakeV.run.myMap.size}, but it should be equal to: ${expectedSize}`);
|
|
130
|
+
}
|
|
131
|
+
{
|
|
132
|
+
const key = "foo1";
|
|
133
|
+
const expectedValue = "bar1";
|
|
134
|
+
const value = fakeV.run.myMap.get(key);
|
|
135
|
+
if (value !== expectedValue) {
|
|
136
|
+
error(`The old table's map key of "${key}" was not equal to "${expectedValue}" and was instead equal to: ${value}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
{
|
|
140
|
+
const key = "foo2";
|
|
141
|
+
const expectedValue = "bar2";
|
|
142
|
+
const value = fakeV.run.myMap.get(key);
|
|
143
|
+
if (value !== expectedValue) {
|
|
144
|
+
error(`The old table's map key of "${key}" was not equal to "${expectedValue}" and was instead equal to: ${value}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
{
|
|
148
|
+
const key = "foo3";
|
|
149
|
+
const expectedValue = "bar3";
|
|
150
|
+
const value = fakeV.run.myMap.get(key);
|
|
151
|
+
if (value !== expectedValue) {
|
|
152
|
+
error(`The old table's map key of "${key}" was not equal to "${expectedValue}" and was instead equal to: ${value}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function oldTableHasFilledDefaultMap() {
|
|
157
|
+
const fakeV = {
|
|
158
|
+
run: {
|
|
159
|
+
myDefaultMap: new DefaultMap_1.DefaultMap("default"),
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
const saveData = {
|
|
163
|
+
run: {
|
|
164
|
+
myDefaultMap: new DefaultMap_1.DefaultMap("default", [
|
|
165
|
+
["foo1", "bar1"],
|
|
166
|
+
["foo2", "bar2"],
|
|
167
|
+
["foo3", "bar3"],
|
|
168
|
+
]),
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
const serializedSaveData = (0, deepCopy_1.deepCopy)(saveData, SerializationType_1.SerializationType.SERIALIZE);
|
|
172
|
+
(0, merge_1.merge)(fakeV, serializedSaveData, "oldTableHasFilledDefaultMap");
|
|
173
|
+
const expectedSize = 3;
|
|
174
|
+
if (fakeV.run.myDefaultMap.size !== expectedSize) {
|
|
175
|
+
error(`The size of the merged default map was equal to ${fakeV.run.myDefaultMap.size}, but it should be equal to: ${expectedSize}`);
|
|
176
|
+
}
|
|
177
|
+
{
|
|
178
|
+
const key = "foo1";
|
|
179
|
+
const expectedValue = "bar1";
|
|
180
|
+
const value = fakeV.run.myDefaultMap.get(key);
|
|
181
|
+
if (value !== expectedValue) {
|
|
182
|
+
error(`The old table's default map key of "${key}" was not equal to "${expectedValue}" and was instead equal to: ${value}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
{
|
|
186
|
+
const key = "foo2";
|
|
187
|
+
const expectedValue = "bar2";
|
|
188
|
+
const value = fakeV.run.myDefaultMap.get(key);
|
|
189
|
+
if (value !== expectedValue) {
|
|
190
|
+
error(`The old table's default map key of "${key}" was not equal to "${expectedValue}" and was instead equal to: ${value}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
{
|
|
194
|
+
const key = "foo3";
|
|
195
|
+
const expectedValue = "bar3";
|
|
196
|
+
const value = fakeV.run.myDefaultMap.get(key);
|
|
197
|
+
if (value !== expectedValue) {
|
|
198
|
+
error(`The old table's default map key of "${key}" was not equal to "${expectedValue}" and was instead equal to: ${value}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function oldTableHasVector() {
|
|
203
|
+
const key = "foo";
|
|
204
|
+
const x = 50;
|
|
205
|
+
const y = 60;
|
|
206
|
+
const newValue = Vector(x, y);
|
|
207
|
+
const oldTable = {
|
|
208
|
+
foo: null,
|
|
209
|
+
};
|
|
210
|
+
const foo = {
|
|
211
|
+
bar: newValue,
|
|
212
|
+
};
|
|
213
|
+
const newTable = {
|
|
214
|
+
foo,
|
|
215
|
+
};
|
|
216
|
+
(0, merge_1.merge)(oldTable, newTable, "oldTableHasVector");
|
|
217
|
+
const oldTableValue = oldTable.get(key);
|
|
218
|
+
if (oldTableValue === undefined) {
|
|
219
|
+
error(`The old table's key of "${key}" was not filled.`);
|
|
220
|
+
}
|
|
221
|
+
if (oldTableValue.bar.X !== x) {
|
|
222
|
+
error(`The old table's value for "x" does not match: ${x}`);
|
|
223
|
+
}
|
|
224
|
+
if (oldTableValue.bar.Y !== y) {
|
|
225
|
+
error(`The old table's value for "y" does not match: ${y}`);
|
|
226
|
+
}
|
|
227
|
+
if (!(0, vector_1.isVector)(oldTableValue.bar)) {
|
|
228
|
+
error("The old table's value is not a Vector object.");
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
function oldTableHasVectorSerialized() {
|
|
232
|
+
const key = "foo";
|
|
233
|
+
const x = 50;
|
|
234
|
+
const y = 60;
|
|
235
|
+
const newValue = Vector(x, y);
|
|
236
|
+
const oldTable = {
|
|
237
|
+
foo: null,
|
|
238
|
+
};
|
|
239
|
+
const foo = {
|
|
240
|
+
bar: newValue,
|
|
241
|
+
};
|
|
242
|
+
const newTable = {
|
|
243
|
+
foo,
|
|
244
|
+
};
|
|
245
|
+
const newTableSerialized = (0, deepCopy_1.deepCopy)(newTable, SerializationType_1.SerializationType.SERIALIZE, "oldTableHasVectorSerialized");
|
|
246
|
+
(0, merge_1.merge)(oldTable, newTableSerialized, "oldTableHasVectorSerialized");
|
|
247
|
+
const oldTableValue = oldTable.get(key);
|
|
248
|
+
if (oldTableValue === undefined) {
|
|
249
|
+
error(`The old table's key of "${key}" was not filled.`);
|
|
250
|
+
}
|
|
251
|
+
if (oldTableValue.bar.X !== x) {
|
|
252
|
+
error(`The old table's value for "x" does not match: ${x}`);
|
|
253
|
+
}
|
|
254
|
+
if (oldTableValue.bar.Y !== y) {
|
|
255
|
+
error(`The old table's value for "y" does not match: ${y}`);
|
|
256
|
+
}
|
|
257
|
+
if (!(0, vector_1.isVector)(oldTableValue.bar)) {
|
|
258
|
+
error("The old table's value is not a Vector object (during the serialized test).");
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
function oldTableHasRNG() {
|
|
262
|
+
const key = "foo";
|
|
263
|
+
const seed = 50;
|
|
264
|
+
const newValue = (0, rng_1.newRNG)(seed);
|
|
265
|
+
const oldTable = {
|
|
266
|
+
foo: null,
|
|
267
|
+
};
|
|
268
|
+
const foo = {
|
|
269
|
+
bar: newValue,
|
|
270
|
+
};
|
|
271
|
+
const newTable = {
|
|
272
|
+
foo,
|
|
273
|
+
};
|
|
274
|
+
(0, merge_1.merge)(oldTable, newTable, "oldTableHasRNG");
|
|
275
|
+
const oldTableValue = oldTable.get(key);
|
|
276
|
+
if (oldTableValue === undefined) {
|
|
277
|
+
error(`The old table's key of "${key}" was not filled.`);
|
|
278
|
+
}
|
|
279
|
+
if (!(0, rng_1.isRNG)(oldTableValue.bar)) {
|
|
280
|
+
error("The old table's value is not an RNG object.");
|
|
281
|
+
}
|
|
282
|
+
const newSeed = oldTableValue.bar.GetSeed();
|
|
283
|
+
if (newSeed !== seed) {
|
|
284
|
+
error(`The old table's seed not match: ${seed}`);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
function oldTableHasRNGSerialized() {
|
|
288
|
+
const key = "foo";
|
|
289
|
+
const seed = 50;
|
|
290
|
+
const newValue = (0, rng_1.newRNG)(seed);
|
|
291
|
+
const oldTable = {
|
|
292
|
+
foo: null,
|
|
293
|
+
};
|
|
294
|
+
const foo = {
|
|
295
|
+
bar: newValue,
|
|
296
|
+
};
|
|
297
|
+
const newTable = {
|
|
298
|
+
foo,
|
|
299
|
+
};
|
|
300
|
+
const newTableSerialized = (0, deepCopy_1.deepCopy)(newTable, SerializationType_1.SerializationType.SERIALIZE, "oldTableHasRNGSerialized");
|
|
301
|
+
(0, merge_1.merge)(oldTable, newTableSerialized, "oldTableHasRNGSerialized");
|
|
302
|
+
const oldTableValue = oldTable.get(key);
|
|
303
|
+
if (oldTableValue === undefined) {
|
|
304
|
+
error(`The old table's key of "${key}" was not filled.`);
|
|
305
|
+
}
|
|
306
|
+
if (!(0, rng_1.isRNG)(oldTableValue.bar)) {
|
|
307
|
+
error("The old table's value is not an RNG object (during the serialized test).");
|
|
308
|
+
}
|
|
309
|
+
const newSeed = oldTableValue.bar.GetSeed();
|
|
310
|
+
if (newSeed !== seed) {
|
|
311
|
+
error(`The old table's seed not match: ${seed}`);
|
|
312
|
+
}
|
|
313
|
+
}
|