UNPKG

isaacscript-common

Version:

Helper functions and features for IsaacScript mods.

73 lines (61 loc) 1.95 kB
import { CollectibleType, ModCallback, PickupVariant, } from "isaac-typescript-definitions"; import type { ModCallbackCustom } from "../../enums/ModCallbackCustom"; import type { FireArgs, OptionalArgs } from "../private/CustomCallback"; import { CustomCallback } from "../private/CustomCallback"; type T = ModCallbackCustom.POST_COLLECTIBLE_EMPTY; const v = { room: { collectibleTypeMap: new Map<PtrHash, CollectibleType>(), }, }; export class PostCollectibleEmpty extends CustomCallback<T> { public override v = v; constructor() { super(); this.callbacksUsed = [ // 35 [ ModCallback.POST_PICKUP_UPDATE, this.postPickupUpdateCollectible, [PickupVariant.COLLECTIBLE], ], ]; } protected override shouldFire = ( fireArgs: FireArgs<T>, optionalArgs: OptionalArgs<T>, ): boolean => { const [_collectible, oldCollectibleType] = fireArgs; const [callbackCollectibleType] = optionalArgs; return ( callbackCollectibleType === undefined || callbackCollectibleType === oldCollectibleType ); }; // ModCallback.POST_PICKUP_UPDATE (35) // PickupVariant.COLLECTIBLE (100) private readonly postPickupUpdateCollectible = ( pickup: EntityPickup, ): void => { const collectible = pickup as EntityPickupCollectible; const ptrHash = GetPtrHash(collectible); let oldCollectibleType = v.room.collectibleTypeMap.get(ptrHash); oldCollectibleType ??= collectible.SubType; v.room.collectibleTypeMap.set(ptrHash, collectible.SubType); if (oldCollectibleType !== collectible.SubType) { this.collectibleTypeChanged(collectible, oldCollectibleType); } }; private collectibleTypeChanged( collectible: EntityPickupCollectible, oldCollectibleType: CollectibleType, ): void { if (collectible.SubType === CollectibleType.NULL) { this.fire(collectible, oldCollectibleType); } } }