import { push_vertex } from "./core.ts"; import type { Texture } from "./types.ts"; const pad = 0.5; export function push_front_face( texture: Texture, x: number, y: number, z: number, sx: number, sy: number, sw: number, sh: number, r = 1, g = 1, b = 1, a = 1, ) { const x2 = x + 1; const y2 = y + 1; const z2 = z + 1; const u0 = (sx + pad) / texture.width; const v0 = (sy + pad) / texture.height; const u1 = (sx + sw - pad) / texture.width; const v1 = (sy + sh - pad) / texture.height; push_vertex(x, y, z2, u0, v1, r, g, b, a); push_vertex(x2, y, z2, u1, v1, r, g, b, a); push_vertex(x2, y2, z2, u1, v0, r, g, b, a); push_vertex(x, y, z2, u0, v1, r, g, b, a); push_vertex(x2, y2, z2, u1, v0, r, g, b, a); push_vertex(x, y2, z2, u0, v0, r, g, b, a); } export function push_back_face( texture: Texture, x: number, y: number, z: number, sx: number, sy: number, sw: number, sh: number, r = 1, g = 1, b = 1, a = 1, ) { const x2 = x + 1; const y2 = y + 1; const u0 = (sx + pad) / texture.width; const v0 = (sy + pad) / texture.height; const u1 = (sx + sw - pad) / texture.width; const v1 = (sy + sh - pad) / texture.height; push_vertex(x2, y, z, u0, v1, r, g, b, a); push_vertex(x, y, z, u1, v1, r, g, b, a); push_vertex(x, y2, z, u1, v0, r, g, b, a); push_vertex(x2, y, z, u0, v1, r, g, b, a); push_vertex(x, y2, z, u1, v0, r, g, b, a); push_vertex(x2, y2, z, u0, v0, r, g, b, a); } export function push_left_face( texture: Texture, x: number, y: number, z: number, sx: number, sy: number, sw: number, sh: number, r = 1, g = 1, b = 1, a = 1, ) { const y2 = y + 1; const z2 = z + 1; const u0 = (sx + pad) / texture.width; const v0 = (sy + pad) / texture.height; const u1 = (sx + sw - pad) / texture.width; const v1 = (sy + sh - pad) / texture.height; push_vertex(x, y, z, u0, v1, r, g, b, a); push_vertex(x, y, z2, u1, v1, r, g, b, a); push_vertex(x, y2, z2, u1, v0, r, g, b, a); push_vertex(x, y, z, u0, v1, r, g, b, a); push_vertex(x, y2, z2, u1, v0, r, g, b, a); push_vertex(x, y2, z, u0, v0, r, g, b, a); } export function push_right_face( texture: Texture, x: number, y: number, z: number, sx: number, sy: number, sw: number, sh: number, r = 1, g = 1, b = 1, a = 1, ) { const x2 = x + 1; const y2 = y + 1; const z2 = z + 1; const u0 = (sx + pad) / texture.width; const v0 = (sy + pad) / texture.height; const u1 = (sx + sw - pad) / texture.width; const v1 = (sy + sh - pad) / texture.height; push_vertex(x2, y, z2, u0, v1, r, g, b, a); push_vertex(x2, y, z, u1, v1, r, g, b, a); push_vertex(x2, y2, z, u1, v0, r, g, b, a); push_vertex(x2, y, z2, u0, v1, r, g, b, a); push_vertex(x2, y2, z, u1, v0, r, g, b, a); push_vertex(x2, y2, z2, u0, v0, r, g, b, a); } export function push_top_face( texture: Texture, x: number, y: number, z: number, sx: number, sy: number, sw: number, sh: number, r = 1, g = 1, b = 1, a = 1, ) { const x2 = x + 1; const z2 = z + 1; const y2 = y + 1; const u0 = (sx + pad) / texture.width; const v0 = (sy + pad) / texture.height; const u1 = (sx + sw - pad) / texture.width; const v1 = (sy + sh - pad) / texture.height; push_vertex(x, y2, z2, u0, v1, r, g, b, a); push_vertex(x2, y2, z2, u1, v1, r, g, b, a); push_vertex(x2, y2, z, u1, v0, r, g, b, a); push_vertex(x, y2, z2, u0, v1, r, g, b, a); push_vertex(x2, y2, z, u1, v0, r, g, b, a); push_vertex(x, y2, z, u0, v0, r, g, b, a); } export function push_bottom_face( texture: Texture, x: number, y: number, z: number, sx: number, sy: number, sw: number, sh: number, r = 1, g = 1, b = 1, a = 1, ) { const x2 = x + 1; const z2 = z + 1; const u0 = (sx + pad) / texture.width; const v0 = (sy + pad) / texture.height; const u1 = (sx + sw - pad) / texture.width; const v1 = (sy + sh - pad) / texture.height; push_vertex(x, y, z, u0, v1, r, g, b, a); push_vertex(x2, y, z, u1, v1, r, g, b, a); push_vertex(x2, y, z2, u1, v0, r, g, b, a); push_vertex(x, y, z, u0, v1, r, g, b, a); push_vertex(x2, y, z2, u1, v0, r, g, b, a); push_vertex(x, y, z2, u0, v0, r, g, b, a); } // solid colored box, draw it with white_tex as the current texture export function push_box( x: number, y: number, z: number, width: number, height: number, depth: number, r = 1, g = 1, b = 1, a = 1, ) { const x2 = x + width; const y2 = y + height; const z2 = z + depth; // front push_vertex(x, y, z2, 0, 1, r, g, b, a); push_vertex(x2, y, z2, 1, 1, r, g, b, a); push_vertex(x2, y2, z2, 1, 0, r, g, b, a); push_vertex(x, y, z2, 0, 1, r, g, b, a); push_vertex(x2, y2, z2, 1, 0, r, g, b, a); push_vertex(x, y2, z2, 0, 0, r, g, b, a); // back push_vertex(x2, y, z, 0, 1, r * 0.8, g * 0.8, b * 0.8, a); push_vertex(x, y, z, 1, 1, r * 0.8, g * 0.8, b * 0.8, a); push_vertex(x, y2, z, 1, 0, r * 0.8, g * 0.8, b * 0.8, a); push_vertex(x2, y, z, 0, 1, r * 0.8, g * 0.8, b * 0.8, a); push_vertex(x, y2, z, 1, 0, r * 0.8, g * 0.8, b * 0.8, a); push_vertex(x2, y2, z, 0, 0, r * 0.8, g * 0.8, b * 0.8, a); // left push_vertex(x, y, z, 0, 1, r * 0.9, g * 0.9, b * 0.9, a); push_vertex(x, y, z2, 1, 1, r * 0.9, g * 0.9, b * 0.9, a); push_vertex(x, y2, z2, 1, 0, r * 0.9, g * 0.9, b * 0.9, a); push_vertex(x, y, z, 0, 1, r * 0.9, g * 0.9, b * 0.9, a); push_vertex(x, y2, z2, 1, 0, r * 0.9, g * 0.9, b * 0.9, a); push_vertex(x, y2, z, 0, 0, r * 0.9, g * 0.9, b * 0.9, a); // right push_vertex(x2, y, z2, 0, 1, r * 0.9, g * 0.9, b * 0.9, a); push_vertex(x2, y, z, 1, 1, r * 0.9, g * 0.9, b * 0.9, a); push_vertex(x2, y2, z, 1, 0, r * 0.9, g * 0.9, b * 0.9, a); push_vertex(x2, y, z2, 0, 1, r * 0.9, g * 0.9, b * 0.9, a); push_vertex(x2, y2, z, 1, 0, r * 0.9, g * 0.9, b * 0.9, a); push_vertex(x2, y2, z2, 0, 0, r * 0.9, g * 0.9, b * 0.9, a); // top push_vertex(x, y2, z2, 0, 1, r, g, b, a); push_vertex(x2, y2, z2, 1, 1, r, g, b, a); push_vertex(x2, y2, z, 1, 0, r, g, b, a); push_vertex(x, y2, z2, 0, 1, r, g, b, a); push_vertex(x2, y2, z, 1, 0, r, g, b, a); push_vertex(x, y2, z, 0, 0, r, g, b, a); // bottom push_vertex(x, y, z, 0, 1, r * 0.6, g * 0.6, b * 0.6, a); push_vertex(x2, y, z, 1, 1, r * 0.6, g * 0.6, b * 0.6, a); push_vertex(x2, y, z2, 1, 0, r * 0.6, g * 0.6, b * 0.6, a); push_vertex(x, y, z, 0, 1, r * 0.6, g * 0.6, b * 0.6, a); push_vertex(x2, y, z2, 1, 0, r * 0.6, g * 0.6, b * 0.6, a); push_vertex(x, y, z2, 0, 0, r * 0.6, g * 0.6, b * 0.6, a); }