feat: actors stage 2
This commit is contained in:
parent
4869db01e5
commit
581e5892b0
19 changed files with 752 additions and 594 deletions
21
tests/mobs.test.ts
Normal file
21
tests/mobs.test.ts
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import { expect, test } from "bun:test"
|
||||
import { MOB_KINDS, Mob } from "../engine/scene/Mob"
|
||||
|
||||
// The mob SAB packs a kind as its index in MOB_KINDS; the main thread and every
|
||||
// render worker must agree on that order. Freeze it here: appending a kind is fine,
|
||||
// but reordering or removing an existing one silently corrupts which mesh/texture a
|
||||
// worker draws.
|
||||
test("MOB_KINDS order is frozen (mob SAB ids)", () => {
|
||||
expect(MOB_KINDS).toEqual(["frog", "bee", "robin"])
|
||||
})
|
||||
|
||||
test("every kind resolves to a complete definition", () => {
|
||||
for (const kind of MOB_KINDS) {
|
||||
const d = Mob.def(kind)
|
||||
expect(d.name).toBe(kind)
|
||||
expect(typeof d.build).toBe("function")
|
||||
expect(typeof d.update).toBe("function")
|
||||
expect(d.boundingRadius).toBeGreaterThan(0)
|
||||
expect(d.bodyHeight).toBeGreaterThan(0)
|
||||
}
|
||||
})
|
||||
18
tests/trees.test.ts
Normal file
18
tests/trees.test.ts
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
import { expect, test } from "bun:test"
|
||||
import { Tree, TREE_KINDS } from "../engine/scene/Tree"
|
||||
|
||||
// The chunk baker (level.ts) accumulates geometry into a mesh per material key and
|
||||
// only draws keys listed in MAT_ORDER. A tree species that declares a trunk/foliage
|
||||
// material outside that palette would bake geometry that is silently never drawn.
|
||||
// Freeze the palette here so a typo'd or unregistered material key fails a test.
|
||||
const MATERIAL_KEYS = new Set(["grass", "rock", "bark", "birch", "leaf", "needle", "flower"])
|
||||
|
||||
test("every tree species maps to known chunk materials", () => {
|
||||
for (const kind of TREE_KINDS) {
|
||||
const s = Tree.species(kind)
|
||||
expect(s.kind).toBe(kind)
|
||||
expect(typeof s.build).toBe("function")
|
||||
expect(MATERIAL_KEYS.has(s.trunk)).toBe(true)
|
||||
expect(MATERIAL_KEYS.has(s.foliage)).toBe(true)
|
||||
}
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue