Add die roll and enemy action resolver
This commit is contained in:
parent
0bb8f236c0
commit
35d2176bc2
4 changed files with 49 additions and 0 deletions
3
src/die.js
Normal file
3
src/die.js
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
export function rollDie() {
|
||||
return Math.floor(Math.random() * 6) + 1;
|
||||
}
|
||||
12
src/die.test.js
Normal file
12
src/die.test.js
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
import { describe, expect, test } from "bun:test";
|
||||
import { rollDie } from "./die.js";
|
||||
|
||||
describe("rollDie", () => {
|
||||
test("returns a number between 1 and 6", () => {
|
||||
for (let i = 0; i < 100; i++) {
|
||||
const result = rollDie();
|
||||
expect(result).toBeGreaterThanOrEqual(1);
|
||||
expect(result).toBeLessThanOrEqual(6);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
@ -3,3 +3,18 @@ import enemyDb from "../data/enemies.json";
|
|||
export function getEnemy(id) {
|
||||
return enemyDb[id];
|
||||
}
|
||||
|
||||
export function resolveEnemyAction(enemy, dieResult, trackPosition) {
|
||||
if (enemy.actionType === "single") {
|
||||
return enemy.actions["1"];
|
||||
}
|
||||
if (enemy.actionType === "die") {
|
||||
return enemy.actions[String(dieResult)];
|
||||
}
|
||||
if (enemy.actionType === "cube") {
|
||||
const track = enemy.actionTrack;
|
||||
const pos = Math.min(trackPosition, track.length - 1);
|
||||
return track[pos];
|
||||
}
|
||||
return { intent: "unknown", effects: [] };
|
||||
}
|
||||
|
|
|
|||
19
src/enemies.test.js
Normal file
19
src/enemies.test.js
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
import { describe, expect, test } from "bun:test";
|
||||
import { getEnemy, resolveEnemyAction } from "./enemies.js";
|
||||
|
||||
describe("getEnemy", () => {
|
||||
test("returns enemy by id", () => {
|
||||
const enemy = getEnemy("jaw_worm");
|
||||
expect(enemy.name).toBe("Jaw Worm");
|
||||
expect(enemy.hp).toBeGreaterThan(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe("resolveEnemyAction", () => {
|
||||
test("die action returns effects for given roll", () => {
|
||||
const enemy = getEnemy("jaw_worm");
|
||||
const action = resolveEnemyAction(enemy, 1, 0);
|
||||
expect(action.effects).toBeDefined();
|
||||
expect(action.effects.length).toBeGreaterThan(0);
|
||||
});
|
||||
});
|
||||
Loading…
Reference in a new issue