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) {
|
export function getEnemy(id) {
|
||||||
return enemyDb[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