isaacscript-common
Version:
Helper functions and features for IsaacScript mods.
52 lines (51 loc) • 1.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PreNewLevel = void 0;
const ModCallbackCustom_1 = require("../../enums/ModCallbackCustom");
const sprites_1 = require("../../functions/sprites");
const stage_1 = require("../../functions/stage");
const ReadonlySet_1 = require("../../types/ReadonlySet");
const CustomCallback_1 = require("../private/CustomCallback");
const TRAVELING_TO_NEXT_FLOOR_ANIMATIONS = new ReadonlySet_1.ReadonlySet([
"Trapdoor",
"LightTravel",
]);
const v = {
run: {
firedOnStage: null,
},
};
class PreNewLevel extends CustomCallback_1.CustomCallback {
v = v;
constructor() {
super();
this.customCallbacksUsed = [
[
ModCallbackCustom_1.ModCallbackCustom.POST_PLAYER_RENDER_REORDERED,
this.postPlayerRenderReordered,
],
];
}
// ModCallbackCustom.POST_PLAYER_RENDER_REORDERED
postPlayerRenderReordered = (player) => {
const effectiveStage = (0, stage_1.getEffectiveStage)();
if (effectiveStage === v.run.firedOnStage) {
return;
}
const sprite = player.GetSprite();
const animation = sprite.GetAnimation();
if (!TRAVELING_TO_NEXT_FLOOR_ANIMATIONS.has(animation)) {
return;
}
// We can't use the `Sprite.IsFinished` method to detect when we are at the end of the animation
// because the player will stop rendering at that point. Thus, revert to checking for the final
// frame manually.
const frame = sprite.GetFrame();
const finalFrame = (0, sprites_1.getLastFrameOfAnimation)(sprite);
if (frame === finalFrame) {
v.run.firedOnStage = effectiveStage;
this.fire(player);
}
};
}
exports.PreNewLevel = PreNewLevel;