refactor: move world concepts into engine
This commit is contained in:
parent
eeedcb8e48
commit
2d15c7ab8d
52 changed files with 3298 additions and 1558 deletions
80
engine/scene/MeshBuilder.ts
Normal file
80
engine/scene/MeshBuilder.ts
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
import { STRIDE, type Mesh } from "./Mesh"
|
||||
|
||||
type Corner = [number, number, number]
|
||||
|
||||
export namespace MeshBuilder {
|
||||
export function quad(
|
||||
mesh: Mesh,
|
||||
a: Corner,
|
||||
b: Corner,
|
||||
c: Corner,
|
||||
d: Corner,
|
||||
uScale: number,
|
||||
vScale: number,
|
||||
): void {
|
||||
const base = mesh.verts.length / STRIDE
|
||||
mesh.verts.push(
|
||||
a[0],
|
||||
a[1],
|
||||
a[2],
|
||||
0,
|
||||
0,
|
||||
b[0],
|
||||
b[1],
|
||||
b[2],
|
||||
uScale,
|
||||
0,
|
||||
c[0],
|
||||
c[1],
|
||||
c[2],
|
||||
uScale,
|
||||
vScale,
|
||||
d[0],
|
||||
d[1],
|
||||
d[2],
|
||||
0,
|
||||
vScale,
|
||||
)
|
||||
mesh.indices.push(base, base + 1, base + 2, base, base + 2, base + 3)
|
||||
}
|
||||
|
||||
export function slab(
|
||||
mesh: Mesh,
|
||||
x0: number,
|
||||
x1: number,
|
||||
z0: number,
|
||||
z1: number,
|
||||
y0: number,
|
||||
y1: number,
|
||||
tilesPerUnit: number,
|
||||
): void {
|
||||
const dx = (x1 - x0) * tilesPerUnit
|
||||
const dz = (z1 - z0) * tilesPerUnit
|
||||
const dy = (y1 - y0) * tilesPerUnit
|
||||
quad(mesh, [x0, y1, z0], [x1, y1, z0], [x1, y1, z1], [x0, y1, z1], dx, dz)
|
||||
quad(mesh, [x0, y0, z0], [x1, y0, z0], [x1, y1, z0], [x0, y1, z0], dx, dy)
|
||||
quad(mesh, [x1, y0, z1], [x0, y0, z1], [x0, y1, z1], [x1, y1, z1], dx, dy)
|
||||
quad(mesh, [x0, y0, z1], [x0, y0, z0], [x0, y1, z0], [x0, y1, z1], dz, dy)
|
||||
quad(mesh, [x1, y0, z0], [x1, y0, z1], [x1, y1, z1], [x1, y1, z0], dz, dy)
|
||||
}
|
||||
|
||||
export function box(
|
||||
mesh: Mesh,
|
||||
centerX: number,
|
||||
centerZ: number,
|
||||
half: number,
|
||||
base: number,
|
||||
height: number,
|
||||
): void {
|
||||
const x0 = centerX - half
|
||||
const x1 = centerX + half
|
||||
const z0 = centerZ - half
|
||||
const z1 = centerZ + half
|
||||
const y1 = base + height
|
||||
quad(mesh, [x0, y1, z0], [x1, y1, z0], [x1, y1, z1], [x0, y1, z1], 1, 1)
|
||||
quad(mesh, [x0, base, z0], [x1, base, z0], [x1, y1, z0], [x0, y1, z0], 1, 1)
|
||||
quad(mesh, [x1, base, z1], [x0, base, z1], [x0, y1, z1], [x1, y1, z1], 1, 1)
|
||||
quad(mesh, [x1, base, z0], [x1, base, z1], [x1, y1, z1], [x1, y1, z0], 1, 1)
|
||||
quad(mesh, [x0, base, z1], [x0, base, z0], [x0, y1, z0], [x0, y1, z1], 1, 1)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue