79 lines
2.3 KiB
TypeScript
79 lines
2.3 KiB
TypeScript
import { afterEach, describe, expect, it } from "vitest";
|
|
import type { OnlineSessionPlayer } from "../app/onlineSessionTypes";
|
|
import {
|
|
configureOnlineSessionRuntime,
|
|
drainOnlineInteractions,
|
|
onlinePlayerActorId,
|
|
onlinePlayerRuntimeActor,
|
|
onlineSessionIsActive,
|
|
onlineSessionOwnsWorldSimulation,
|
|
onlineSynchronizedMobTransform,
|
|
requestOnlineInteraction,
|
|
} from "./onlineSessionRuntime";
|
|
|
|
const remotePlayer: OnlineSessionPlayer = {
|
|
accountId: "remote",
|
|
username: "Remote",
|
|
character: {
|
|
id: "remote-character",
|
|
name: "Mendara",
|
|
classId: "priest",
|
|
categoryId: "wow",
|
|
raceId: "human",
|
|
gender: "female",
|
|
level: 20,
|
|
},
|
|
role: "healer",
|
|
position: [4, 0, 6],
|
|
yaw: 1,
|
|
grounded: true,
|
|
health: 800,
|
|
maxHealth: 1_000,
|
|
resource: 400,
|
|
maxResource: 500,
|
|
resourceName: "Mana",
|
|
selectedTargetId: null,
|
|
activeCast: null,
|
|
animationEvent: null,
|
|
equipment: [],
|
|
updatedAt: 1,
|
|
};
|
|
|
|
afterEach(() => configureOnlineSessionRuntime({
|
|
active: false,
|
|
authority: true,
|
|
localAccountId: null,
|
|
}));
|
|
|
|
describe("online session runtime", () => {
|
|
it("exposes remote players as live combat actors", () => {
|
|
configureOnlineSessionRuntime({
|
|
active: true,
|
|
authority: true,
|
|
localAccountId: "local",
|
|
players: [remotePlayer],
|
|
});
|
|
const actor = onlinePlayerRuntimeActor(onlinePlayerActorId("remote"));
|
|
expect(actor).toMatchObject({ health: 800, maxHealth: 1_000, alive: true, kind: "companion" });
|
|
expect(onlineSessionIsActive()).toBe(true);
|
|
expect(onlineSessionOwnsWorldSimulation()).toBe(true);
|
|
});
|
|
|
|
it("uses leader transforms and queues follower interactions", () => {
|
|
configureOnlineSessionRuntime({
|
|
active: true,
|
|
authority: false,
|
|
localAccountId: "local",
|
|
players: [remotePlayer],
|
|
mobTransforms: { boss: { position: [7, 0, 9], yaw: 0.75 } },
|
|
});
|
|
expect(onlineSessionOwnsWorldSimulation()).toBe(false);
|
|
expect(onlineSynchronizedMobTransform("boss")?.position).toEqual([7, 0, 9]);
|
|
expect(requestOnlineInteraction("loot", "boss")).toBe(true);
|
|
expect(drainOnlineInteractions()).toEqual([
|
|
expect.objectContaining({ kind: "loot", targetActorId: "boss", sourceActorId: onlinePlayerActorId("local") }),
|
|
]);
|
|
expect(drainOnlineInteractions()).toEqual([]);
|
|
});
|
|
});
|