← CiudadObjeto 3Dfogon/buzon-urbano
Buzón urbano
Arrastrá para girarlo// «Buzón urbano» · gpt-6-sol (medium)
// A city mailbox: a tall cylindrical yellow and blue mail pillar on a short base, with a rounded top, a dark horizontal letter slot on the front (-y) and a small white envelope symbol painted under the slot.
const cx = 24, cy = 24;
// Short concrete plinth.
box(13, 13, 0, 35, 35, 1, "#aeb5ae");
box(15, 15, 2, 33, 33, 3, "#d5d9cf");
cylinder(cx, cy, 3, 10, 2, "#244e85");
// Solid, gently shaded cylindrical pillar.
for (let z = 5; z <= 32; z++) {
for (let x = 15; x <= 33; x++) {
for (let y = 15; y <= 33; y++) {
const d = (x - cx) ** 2 + (y - cy) ** 2;
if (d > 81) continue;
const blue = z <= 15 || (z >= 31 && z <= 32);
let color;
if (blue) {
color = y < cy && x < cx ? "#3586c4" : "#286ba9";
if (y > cy + 3 || z < 7) color = "#20588f";
if (d > 65 && rand() < 0.035) color = "#3c91c9";
} else {
color = y < cy && x < cx ? "#ffdb55" : "#f7c83c";
if (y > cy + 3) color = "#e7ae2c";
if (d > 65 && rand() < 0.035) color = "#ffe16b";
}
set(x, y, z, color);
}
}
}
// Crisp color breaks and a rounded yellow crown.
cylinder(cx, cy, 15, 9, 2, "#ffdd58");
cylinder(cx, cy, 30, 9, 1, "#ffe37a");
for (let z = 33; z <= 41; z++) {
const r2 = 81 - (z - 32) ** 2;
for (let x = 15; x <= 33; x++) {
for (let y = 15; y <= 33; y++) {
if ((x - cx) ** 2 + (y - cy) ** 2 <= r2) {
set(x, y, z, y < 24 ? "#ffdc59" : "#f2be37");
}
}
}
}
// Raised, dark letter slot on the front (-y).
box(17, 14, 24, 31, 19, 29, "#24588d");
box(18, 13, 25, 30, 14, 28, "#62a7d4");
box(18, 12, 26, 30, 12, 27, "#182c43");
box(19, 11, 26, 29, 11, 26, "#101d2e");
box(18, 12, 25, 30, 12, 25, "#d4e3e4");
// White envelope emblem on a blue plaque below the slot.
box(18, 14, 17, 30, 19, 23, "#24588d");
box(19, 13, 18, 29, 13, 22, "#3b82b8");
box(20, 12, 18, 28, 12, 21, "#fff9e9");
line(20, 11, 21, 24, 11, 18, 0, "#4386b5");
line(24, 11, 18, 28, 11, 21, 0, "#4386b5");
// Small cheerful painted details at the foot.
cylinder(cx, cy, 5, 9, 1, "#76b5d6");
box(21, 12, 2, 27, 12, 2, "#f3d45e");import { draw } from "./assets/voxel";
import { buzonUrbano } from "./assets/buzon-urbano";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, buzonUrbano, 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 buzon-urbano
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["buzon-urbano"] })
# Queda en client/assets/buzon-urbano.ts
# https://fogon.page/object/buzon-urbano