isaacscript-common
Version:
Helper functions and features for IsaacScript mods.
67 lines (56 loc) • 1.96 kB
text/typescript
import type { PlayerForm } from "isaac-typescript-definitions";
import { PLAYER_FORM_VALUES } from "../../cachedEnumValues";
import { ModCallbackCustom } from "../../enums/ModCallbackCustom";
import { defaultMapGetPlayer } from "../../functions/playerDataStructures";
import type { PlayerIndex } from "../../types/PlayerIndex";
import { DefaultMap } from "../DefaultMap";
import type { FireArgs, OptionalArgs } from "../private/CustomCallback";
import { CustomCallback } from "../private/CustomCallback";
type T = ModCallbackCustom.POST_TRANSFORMATION;
const v = {
run: {
// We cannot use a nested `DefaultMap` here.
playersTransformationsMap: new DefaultMap<
PlayerIndex,
Map<PlayerForm, boolean>
>(() => new Map()),
},
};
export class PostTransformation extends CustomCallback<T> {
public override v = v;
constructor() {
super();
this.customCallbacksUsed = [
[
ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED,
this.postPEffectUpdateReordered,
],
];
}
protected override shouldFire = (
fireArgs: FireArgs<T>,
optionalArgs: OptionalArgs<T>,
): boolean => {
const [_player, playerForm] = fireArgs;
const [callbackPlayerForm] = optionalArgs;
return (
callbackPlayerForm === undefined || callbackPlayerForm === playerForm
);
};
// ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED
private readonly postPEffectUpdateReordered = (player: EntityPlayer) => {
const playerTransformationsMap = defaultMapGetPlayer(
v.run.playersTransformationsMap,
player,
);
for (const playerForm of PLAYER_FORM_VALUES) {
const hasForm = player.HasPlayerForm(playerForm);
let storedForm = playerTransformationsMap.get(playerForm);
storedForm ??= false;
if (hasForm !== storedForm) {
playerTransformationsMap.set(playerForm, hasForm);
this.fire(player, playerForm, hasForm);
}
}
};
}