feat: add encounter map
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { generatePointCrawlMap } from '@/samples/slay-the-spire-like/map/generator';
|
||||
import { MapNodeType } from '@/samples/slay-the-spire-like/map/types';
|
||||
|
||||
describe('generatePointCrawlMap', () => {
|
||||
it('should generate a map with 13 layers', () => {
|
||||
const map = generatePointCrawlMap(123);
|
||||
expect(map.layers.length).toBe(13);
|
||||
});
|
||||
|
||||
it('should have correct fixed layer types', () => {
|
||||
const map = generatePointCrawlMap(123);
|
||||
const startNode = map.nodes.get('node-0-0');
|
||||
const bossNode = map.nodes.get('node-12-0');
|
||||
|
||||
expect(startNode?.type).toBe(MapNodeType.Start);
|
||||
expect(bossNode?.type).toBe(MapNodeType.Boss);
|
||||
});
|
||||
|
||||
it('should assign encounters to nodes based on encounterDesert.csv', () => {
|
||||
const map = generatePointCrawlMap(456);
|
||||
|
||||
// Check that nodes have encounters assigned
|
||||
let combatWithEncounter = 0;
|
||||
let eliteWithEncounter = 0;
|
||||
let bossWithEncounter = 0;
|
||||
let eventWithEncounter = 0;
|
||||
let npcWithEncounter = 0;
|
||||
let shelterWithEncounter = 0;
|
||||
|
||||
for (const node of map.nodes.values()) {
|
||||
if (node.type === MapNodeType.Combat && node.encounter) {
|
||||
combatWithEncounter++;
|
||||
expect(node.encounter.name).toBeTruthy();
|
||||
expect(node.encounter.description).toBeTruthy();
|
||||
}
|
||||
if (node.type === MapNodeType.Elite && node.encounter) {
|
||||
eliteWithEncounter++;
|
||||
expect(node.encounter.name).toBeTruthy();
|
||||
expect(node.encounter.description).toBeTruthy();
|
||||
}
|
||||
if (node.type === MapNodeType.Boss && node.encounter) {
|
||||
bossWithEncounter++;
|
||||
expect(node.encounter.name).toBeTruthy();
|
||||
expect(node.encounter.description).toBeTruthy();
|
||||
}
|
||||
if (node.type === MapNodeType.Event && node.encounter) {
|
||||
eventWithEncounter++;
|
||||
expect(node.encounter.name).toBeTruthy();
|
||||
expect(node.encounter.description).toBeTruthy();
|
||||
}
|
||||
if (node.type === MapNodeType.NPC && node.encounter) {
|
||||
npcWithEncounter++;
|
||||
expect(node.encounter.name).toBeTruthy();
|
||||
expect(node.encounter.description).toBeTruthy();
|
||||
}
|
||||
if (node.type === MapNodeType.Shelter && node.encounter) {
|
||||
shelterWithEncounter++;
|
||||
expect(node.encounter.name).toBeTruthy();
|
||||
expect(node.encounter.description).toBeTruthy();
|
||||
}
|
||||
}
|
||||
|
||||
// Should have assigned at least some encounters
|
||||
const totalWithEncounters =
|
||||
combatWithEncounter +
|
||||
eliteWithEncounter +
|
||||
bossWithEncounter +
|
||||
eventWithEncounter +
|
||||
npcWithEncounter +
|
||||
shelterWithEncounter;
|
||||
|
||||
expect(totalWithEncounters).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it('should use correct encounter types for each node type', () => {
|
||||
const map = generatePointCrawlMap(789);
|
||||
|
||||
for (const node of map.nodes.values()) {
|
||||
if (node.encounter) {
|
||||
// Encounter should match node type conceptually
|
||||
// Combat nodes should have enemy encounters, elites should have elite encounters, etc.
|
||||
if (node.type === MapNodeType.Boss) {
|
||||
expect(node.encounter.description).toContain('Boss');
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user