Release Healer Man 0.1.6
This commit is contained in:
1 parent
55cfd43d66
commit
b12fb84859
96 files changed
+10874
-609
No files matched your search
@@ -0,0 +1,102 @@
|
||||
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
||||
import type { OnlineSessionPlayer } from "../app/onlineSessionTypes";
|
||||
import { useCombatStore } from "./combatStore";
|
||||
import { clearMobRuntimeRegistry, registerMobRuntime } from "./mobRuntimeRegistry";
|
||||
import {
|
||||
configureOnlineSessionRuntime,
|
||||
onlinePlayerActorId,
|
||||
} from "./onlineSessionRuntime";
|
||||
import {
|
||||
clearPartyRuntimeRegistry,
|
||||
registerPartyRuntimePosition,
|
||||
} from "./partyRuntimeRegistry";
|
||||
import { usePartyStore } from "./partyStore";
|
||||
|
||||
function remotePlayer(health = 1): OnlineSessionPlayer {
|
||||
return {
|
||||
accountId: "remote",
|
||||
username: "Remote",
|
||||
character: {
|
||||
id: "remote-character",
|
||||
name: "Bulwarka",
|
||||
classId: "warrior",
|
||||
categoryId: "wow",
|
||||
raceId: "human",
|
||||
gender: "female",
|
||||
level: 20,
|
||||
},
|
||||
role: "tank",
|
||||
position: [8, 0, 0],
|
||||
yaw: 0,
|
||||
grounded: true,
|
||||
health,
|
||||
maxHealth: 1_000,
|
||||
resource: 0,
|
||||
maxResource: 100,
|
||||
resourceName: "Rage",
|
||||
selectedTargetId: null,
|
||||
activeCast: null,
|
||||
animationEvent: null,
|
||||
equipment: [],
|
||||
updatedAt: 1,
|
||||
};
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
clearMobRuntimeRegistry();
|
||||
clearPartyRuntimeRegistry();
|
||||
useCombatStore.getState().initializeCharacter({ classId: "priest", level: 20 });
|
||||
useCombatStore.getState().resetEncounter();
|
||||
usePartyStore.setState({ members: [], selectedMemberId: null, selfSelected: false });
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
configureOnlineSessionRuntime({ active: false, authority: true, localAccountId: null });
|
||||
clearMobRuntimeRegistry();
|
||||
clearPartyRuntimeRegistry();
|
||||
});
|
||||
|
||||
describe("shared online combat actors", () => {
|
||||
it("casts a normal player heal on a remote online player", () => {
|
||||
const player = remotePlayer();
|
||||
const actorId = onlinePlayerActorId(player.accountId);
|
||||
configureOnlineSessionRuntime({
|
||||
active: true,
|
||||
authority: true,
|
||||
localAccountId: "local",
|
||||
players: [player],
|
||||
});
|
||||
registerPartyRuntimePosition(actorId, player.position);
|
||||
useCombatStore.getState().synchronizeActors();
|
||||
expect(useCombatStore.getState().selectFriendlyActor(actorId)).toBe(true);
|
||||
expect(useCombatStore.getState().castAbility("wow335-priest-lesser-heal", [0, 0, 0], 1_000).ok).toBe(true);
|
||||
const completion = useCombatStore.getState().activeCast?.completesAt ?? 1_000;
|
||||
useCombatStore.getState().tick(0.1, completion);
|
||||
expect(useCombatStore.getState().actors[actorId]?.health).toBeGreaterThan(1);
|
||||
expect(useCombatStore.getState().combatEvents).toContainEqual(
|
||||
expect.objectContaining({ kind: "healing", targetActorId: actorId }),
|
||||
);
|
||||
});
|
||||
|
||||
it("lets the leader's enemies acquire a nearby remote player", () => {
|
||||
const player = { ...remotePlayer(1_000), position: [1, 0, 0] as const };
|
||||
const actorId = onlinePlayerActorId(player.accountId);
|
||||
configureOnlineSessionRuntime({
|
||||
active: true,
|
||||
authority: true,
|
||||
localAccountId: "local",
|
||||
players: [player],
|
||||
});
|
||||
registerPartyRuntimePosition(actorId, player.position);
|
||||
registerMobRuntime("shared-enemy", [0, 0, 0]);
|
||||
useCombatStore.getState().setPlayerPosition([100, 0, 100]);
|
||||
useCombatStore.getState().registerMob("shared-enemy", {
|
||||
name: "Shared enemy",
|
||||
maxHealth: 100,
|
||||
aggroRange: 5,
|
||||
leashRange: 20,
|
||||
});
|
||||
expect(useCombatStore.getState().engageNearbyMobs(1_000)).toBe(1);
|
||||
expect(useCombatStore.getState().mobs["shared-enemy"].targetActorId).toBe(actorId);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user