feat: robins
This commit is contained in:
parent
a4490f7a20
commit
bd88d3cbd6
12 changed files with 159 additions and 54 deletions
16
app/main.ts
16
app/main.ts
|
|
@ -9,7 +9,8 @@ import { EYE_HEIGHT, Player } from "./player"
|
|||
import { createRenderer } from "./renderer"
|
||||
import { chunkFar, visibleChunks, visibleMobs, type Scene } from "./renderScene"
|
||||
|
||||
const FOV = Math.PI / 3
|
||||
const FOV_DEGREES = 75
|
||||
const FOV = (FOV_DEGREES * Math.PI) / 180
|
||||
/** How close (world units) a mob must be to the player to get a live collider.
|
||||
* Mobs farther than this can't be touched this frame, so skip them -- keeps the
|
||||
* per-frame collider list (and the player's collision loop) short. */
|
||||
|
|
@ -51,15 +52,17 @@ async function main(): Promise<void> {
|
|||
// supplies each mob's per-frame transform).
|
||||
const frogMesh: Mesh = { verts: [], indices: [] }
|
||||
const beeMesh: Mesh = { verts: [], indices: [] }
|
||||
const robinMesh: Mesh = { verts: [], indices: [] }
|
||||
Mob.build("frog", frogMesh)
|
||||
Mob.build("bee", beeMesh)
|
||||
Mob.build("robin", robinMesh)
|
||||
const scene: Scene = {
|
||||
chunks: level.chunks,
|
||||
floor: level.floor,
|
||||
walls: level.walls,
|
||||
crate: level.crate,
|
||||
npc: { position: level.npcPosition, size: { x: 1.1, y: 1.5 } },
|
||||
mobMesh: { frog: frogMesh, bee: beeMesh },
|
||||
mobMesh: { frog: frogMesh, bee: beeMesh, robin: robinMesh },
|
||||
mobCount: level.mobs.length,
|
||||
sky: level.sky,
|
||||
textures,
|
||||
|
|
@ -321,9 +324,10 @@ function runBench(
|
|||
|
||||
/** Rebuild the dynamic tail of `level.colliders`: keep the static prefix, then add
|
||||
* a block/stand-on AABB for each mob near the player. Mobs move, so these can't be
|
||||
* baked; frogs are `standable` (hop onto them), bees only block (no mid-air
|
||||
* platform). Only mobs within `MOB_COLLIDE_RANGE` are added -- the rest can't be
|
||||
* reached this frame anyway. */
|
||||
* baked. Only mobs on the ground are `standable` (hop onto a resting frog/perched
|
||||
* robin); bees and airborne birds still block but never make a mid-air platform.
|
||||
* Only mobs within `MOB_COLLIDE_RANGE` are added -- the rest can't be reached this
|
||||
* frame anyway. */
|
||||
function rebuildMobColliders(level: Level, playerPos: Vec3, staticCount: number): void {
|
||||
level.colliders.length = staticCount
|
||||
for (const m of level.mobs) {
|
||||
|
|
@ -339,7 +343,7 @@ function rebuildMobColliders(level: Level, playerPos: Vec3, staticCount: number)
|
|||
minZ: m.position.z - half,
|
||||
maxZ: m.position.z + half,
|
||||
top: m.position.y + Mob.bodyHeight(m.kind) * m.scale,
|
||||
standable: m.kind === "frog",
|
||||
standable: m.kind !== "bee" && m.grounded,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue