Files
bworld/client/renderer/models.ts
T
2026-03-12 17:09:25 -03:00

77 lines
2.2 KiB
TypeScript

import { flush_batch, get_current_texture, push_vertex, set_current_texture } from "./core.ts";
import { Texture } from "./types.ts";
export function push_cube(
texture: Texture,
x: number,
y: number,
z: number,
w: number,
h: number,
d: number,
sx: number,
sy: number,
sw: number,
sh: number,
r = 1,
g = 1,
b = 1,
a = 1,
) {
if (get_current_texture() !== texture.tex) {
flush_batch();
set_current_texture(texture.tex);
}
const x2 = x + w;
const y2 = y + h;
const z2 = z + d;
const u0 = sx / texture.width;
const v0 = sy / texture.height;
const u1 = (sx + sw) / texture.width;
const v1 = (sy + sh) / texture.height;
push_vertex(x, y, z2, u0, v0, r, g, b, a);
push_vertex(x2, y, z2, u1, v0, r, g, b, a);
push_vertex(x, y2, z2, u0, v1, r, g, b, a);
push_vertex(x2, y, z2, u1, v0, r, g, b, a);
push_vertex(x2, y2, z2, u1, v1, r, g, b, a);
push_vertex(x, y2, z2, u0, v1, r, g, b, a);
push_vertex(x2, y, z, u0, v0, r, g, b, a);
push_vertex(x, y, z, u1, v0, r, g, b, a);
push_vertex(x2, y2, z, u0, v1, r, g, b, a);
push_vertex(x, y, z, u1, v0, r, g, b, a);
push_vertex(x, y2, z, u1, v1, r, g, b, a);
push_vertex(x2, y2, z, u0, v1, r, g, b, a);
push_vertex(x, y, z, u0, v0, r, g, b, a);
push_vertex(x, y, z2, u1, v0, r, g, b, a);
push_vertex(x, y2, z, u0, v1, r, g, b, a);
push_vertex(x, y, z2, u1, v0, r, g, b, a);
push_vertex(x, y2, z2, u1, v1, r, g, b, a);
push_vertex(x, y2, z, u0, v1, r, g, b, a);
push_vertex(x2, y, z2, u0, v0, r, g, b, a);
push_vertex(x2, y, z, u1, v0, r, g, b, a);
push_vertex(x2, y2, z2, u0, v1, r, g, b, a);
push_vertex(x2, y, z, u1, v0, r, g, b, a);
push_vertex(x2, y2, z, u1, v1, r, g, b, a);
push_vertex(x2, y2, z2, u0, v1, r, g, b, a);
push_vertex(x, y2, z2, u0, v0, r, g, b, a);
push_vertex(x2, y2, z2, u1, v0, r, g, b, a);
push_vertex(x, y2, z, u0, v1, r, g, b, a);
push_vertex(x2, y2, z2, u1, v0, r, g, b, a);
push_vertex(x2, y2, z, u1, v1, r, g, b, a);
push_vertex(x, y2, z, u0, v1, r, g, b, a);
push_vertex(x, y, z, u0, v0, r, g, b, a);
push_vertex(x2, y, z, u1, v0, r, g, b, a);
push_vertex(x, y, z2, u0, v1, r, g, b, a);
push_vertex(x2, y, z, u1, v0, r, g, b, a);
push_vertex(x2, y, z2, u1, v1, r, g, b, a);
push_vertex(x, y, z2, u0, v1, r, g, b, a);
}