← Casa completaObjeto 3Dfogon/placard
Placard
Arrastrá para girarlo// «Placard» · gpt-6-sol (medium)
// A wide built-in style closet: a tall cream-white box with two large sliding doors, one of them a full mirror (light blue-grey with a lighter diagonal reflection), the other in light wood, thin chrome rails at the top and bottom, and a row of three drawers at the bottom with small handles.
// Cream-white built-in cabinet and recessed plinth
box(5, 17, 2, 42, 32, 41, "#f5efdf");
box(7, 18, 0, 40, 30, 2, "#bcae91");
box(6, 17, 1, 41, 31, 2, "#e5dcc9");
// Soft variation on the visible side and top
for (let y = 17; y <= 32; y++) {
for (let z = 3; z <= 41; z++) {
if (rand() < 0.17) set(42, y, z, rand() < 0.5 ? "#eee6d7" : "#faf5e9");
}
}
box(4, 15, 42, 43, 33, 44, "#eee5d3");
box(4, 15, 44, 43, 33, 44, "#fff9eb");
box(4, 15, 42, 43, 15, 42, "#d8cbb5");
box(5, 15, 12, 42, 16, 41, "#f9f3e7");
box(5, 15, 3, 42, 16, 11, "#eee6d8");
// Three chunky lower drawers
const drawers = [[7, 17], [19, 29], [31, 40]];
for (const [a, b] of drawers) {
box(a, 13, 3, b, 14, 10, "#d4c4aa");
box(a + 1, 12, 4, b - 1, 9, "#f6eddd");
box(a + 1, 12, 9, b - 1, 9, "#fff8e9");
box(a + 1, 12, 4, b - 1, 4, "#e3d8c5");
const mid = Math.floor((a + b) / 2);
box(mid - 2, 11, 6, mid + 2, 11, 6, "#a3adb0");
box(mid - 2, 10, 7, mid + 2, 10, 7, "#e5edef");
set(mid - 2, 10, 6, "#d5dfe0");
set(mid + 2, 10, 6, "#d5dfe0");
}
// Left sliding door: slim metal surround and blue-grey mirror
box(7, 14, 14, 23, 14, 39, "#aeb9ba");
box(8, 13, 15, 22, 13, 38, "#adc3cb");
for (let x = 8; x <= 22; x++) {
for (let z = 15; z <= 38; z++) {
if (rand() < 0.055) set(x, 13, z, "#b8cbd0");
}
}
box(7, 12, 14, 7, 12, 39, "#e0e8e7");
box(23, 12, 14, 23, 12, 39, "#929fa1");
box(8, 12, 39, 22, 12, 39, "#edf3ef");
// Broad, diagonal reflection in the mirror
for (let z = 16; z <= 38; z++) {
const start = Math.round(9 + (38 - z) * 0.43);
for (let x = start; x <= Math.min(start + 3, 22); x++) {
set(x, 12, z, x === start ? "#d8e5e6" : "#e5eeee");
}
}
for (let z = 22; z <= 36; z++) {
const x = Math.round(17 + (36 - z) * 0.27);
if (x <= 22) set(x, 12, z, "#cbdde0");
}
// Right sliding door: warm light wood with subtle grain
box(24, 14, 14, 40, 14, 39, "#d5ae7b");
box(25, 13, 15, 39, 13, 38, "#e5bf8b");
for (let x = 25; x <= 39; x++) {
for (let z = 15; z <= 38; z++) {
const grain = (x === 29 || x === 35) && z % 7 !== 0;
if (grain || rand() < 0.075) {
set(x, 13, z, grain ? "#d9b17e" : (rand() < 0.5 ? "#edcb98" : "#ddb783"));
}
}
}
box(24, 12, 14, 24, 12, 39, "#f2d4a7");
box(40, 12, 14, 40, 12, 39, "#bb956b");
box(25, 12, 39, 39, 12, 39, "#f3d7a9");
box(25, 12, 15, 39, 12, 15, "#cfa773");
// Recessed vertical pulls, large enough to read at toy scale
box(21, 11, 23, 22, 11, 30, "#899da2");
box(21, 10, 24, 21, 10, 29, "#e8f1ef");
box(26, 11, 23, 27, 11, 30, "#a7825f");
box(26, 10, 24, 26, 10, 29, "#f1f0e8");
// Chrome sliding tracks and cream outer jambs
box(7, 11, 40, 40, 12, 40, "#aab7b8");
box(7, 10, 40, 40, 10, 40, "#e9f0ee");
box(7, 11, 12, 40, 12, 12, "#aab7b8");
box(7, 10, 12, 40, 10, 12, "#e5ecea");
box(5, 13, 12, 6, 16, 41, "#fff8e9");
box(41, 13, 12, 42, 16, 41, "#e8dece");
box(5, 13, 11, 42, 16, 11, "#e2d7c5");import { draw } from "./assets/voxel";
import { placard } from "./assets/placard";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, placard, x, y, { size: 64, angle: 0, t: performance.now() / 1000 });
// size: lo que mide en px su lado más largo
// angle: giro sobre el piso, en radianes
// t: segundos; si se mueve, se anima solo con eso# En una terminal, en la carpeta del juego
fogon assets add placard
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["placard"] })
# Queda en client/assets/placard.ts
# https://fogon.page/object/placard