forked from phenom/healer-man
Release Healer Man 0.1.30
This commit is contained in:
1 parent
544c1bee91
commit
7d7fd567f0
845 files changed
+2040
-87
No files matched your search
@@ -2,7 +2,11 @@ import { describe, expect, it } from "vitest";
|
||||
import type { CombatPresentationEvent } from "../game/combatPresentation";
|
||||
import {
|
||||
COMBAT_EFFECT_SYSTEM_LIMIT,
|
||||
addOriginalInstantCastEffect,
|
||||
addOriginalOnlyEffect,
|
||||
advanceCombatEffectFrame,
|
||||
originalInstantCastEvent,
|
||||
originalInstantTerminalEvent,
|
||||
updateCombatEffectQueue,
|
||||
type ActiveCombatEffect,
|
||||
} from "./combatEffectRuntime";
|
||||
@@ -120,4 +124,48 @@ describe("combat-effect runtime budget", () => {
|
||||
], "high");
|
||||
expect(projectile).toHaveLength(2);
|
||||
});
|
||||
|
||||
it("lets an instant source cast overlap its release while completing timed casts", () => {
|
||||
const release = event(2, {
|
||||
phase: "release",
|
||||
sourceActorId: "instant-caster",
|
||||
instantCast: true,
|
||||
});
|
||||
const sourceCast = originalInstantCastEvent(release);
|
||||
expect(sourceCast).toMatchObject({
|
||||
id: -2,
|
||||
phase: "cast-start",
|
||||
sourceActorId: "instant-caster",
|
||||
instantCast: true,
|
||||
});
|
||||
const instant = updateCombatEffectQueue(
|
||||
addOriginalInstantCastEffect([], release, "high"),
|
||||
release,
|
||||
"high",
|
||||
);
|
||||
expect(instant.map(({ event: active }) => active.phase)).toEqual(["cast-start", "release"]);
|
||||
expect(instant[0].originalOnly).toBe(true);
|
||||
|
||||
const timed = enqueue([
|
||||
event(3, { phase: "cast-start", sourceActorId: "timed-caster" }),
|
||||
event(4, { phase: "release", sourceActorId: "timed-caster" }),
|
||||
], "high");
|
||||
expect(timed.map(({ event: active }) => active.phase)).toEqual(["release"]);
|
||||
expect(originalInstantCastEvent(timed[0].event)).toBeNull();
|
||||
});
|
||||
|
||||
it("preserves source terminal semantics for instant impact and aura fallbacks", () => {
|
||||
const impact = event(20, { phase: "impact", instantCast: true, delivery: "area" });
|
||||
const auraFallback = originalInstantTerminalEvent(impact);
|
||||
expect(auraFallback).toMatchObject({ id: -20, phase: "aura-start", instantCast: true });
|
||||
|
||||
const aura = event(21, { phase: "aura-start", instantCast: true, delivery: "aura" });
|
||||
const impactFallback = originalInstantTerminalEvent(aura);
|
||||
expect(impactFallback).toMatchObject({ id: -21, phase: "impact", instantCast: true });
|
||||
expect(addOriginalOnlyEffect([], impactFallback!, "high")[0]).toMatchObject({
|
||||
originalOnly: true,
|
||||
event: { phase: "impact" },
|
||||
});
|
||||
expect(originalInstantTerminalEvent(event(22, { phase: "impact" }))).toBeNull();
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user