← BásicoObjeto 3Dfogon/silla-de-oficina
Silla de oficina
Arrastrá para girarlo// «Silla de oficina» · gpt-6-sol (medium)
// Office chair («Silla de oficina»).
// Office chair — front faces -y.
const ink = "#17252e";
const dark = "#203640";
const frame = "#174552";
const teal = "#246474";
const lightTeal = "#327d8d";
const steel = "#718d98";
const brightSteel = "#a4b7ba";
// Four diagonal spokes and chunky casters.
for (const [x, y] of [[8, 8], [40, 8], [8, 40], [40, 40]]) {
line(24, 24, 8, x, y, 5, 1.6, "#435d69");
line(24, 23, 9, x, y - 1, 7, 0, brightSteel);
box(x - 2, y - 2, 1, x + 2, y + 2, 4, ink);
box(x - 3, y - 1, 0, x + 3, y + 1, 2, "#1b2932");
box(x - 2, y - 2, 4, x + 1, y + 1, 5, steel);
box(x - 2, y - 2, 5, x, y - 1, 5, brightSteel);
set(x - 3, y, 1, "#34444c");
}
cylinder(24, 24, 6, 4, 3, dark);
cylinder(24, 24, 8, 2, 10, steel);
box(23, 22, 9, 24, 23, 17, brightSteel);
cylinder(24, 24, 16, 4, 3, ink);
// Solid seat base, with a dark layered edge.
box(10, 11, 18, 38, 33, 20, ink);
box(9, 12, 20, 39, 32, 21, "#183b48");
box(10, 10, 21, 38, 33, 22, frame);
box(11, 11, 22, 37, 32, 23, teal);
box(12, 12, 24, 36, 31, 24, lightTeal);
box(13, 11, 24, 35, 12, 24, "#287183");
// Subtle mottling across the upholstered top.
for (let x = 13; x <= 35; x++) {
for (let y = 13; y <= 30; y++) {
const n = rand();
if (n < 0.13) set(x, y, 24, "#388594");
else if (n < 0.21) set(x, y, 24, "#2c7585");
}
}
box(11, 10, 21, 37, 10, 21, "#102e3a");
box(12, 10, 22, 36, 10, 22, "#2b6371");
box(11, 12, 19, 37, 12, 19, "#294d59");
// Upright back: dark outer shell, softly rounded at the upper corners.
box(10, 31, 23, 36, 37, 39, dark);
box(11, 32, 40, 35, 37, 42, dark);
box(13, 33, 43, 33, 36, 43, "#193b48");
box(9, 32, 27, 10, 36, 38, "#143946");
box(36, 32, 27, 37, 36, 38, "#143946");
box(11, 30, 25, 35, 32, 39, frame);
box(12, 30, 40, 34, 33, 41, frame);
box(14, 31, 42, 33, 35, 42, "#235364");
// Raised padded sections on the front of the backrest.
for (const [bottom, top] of [[26, 29], [31, 34], [36, 39]]) {
box(15, 29, bottom, 32, 30, top, teal);
box(16, 28, bottom + 1, 31, 28, top - 1, "#276b7a");
box(16, 29, top, 31, 29, top, lightTeal);
box(14, 29, bottom, 14, 30, top, "#194a58");
box(33, 29, bottom, 33, 30, top, "#194a58");
box(17, 28, bottom + 1, 23, 28, bottom + 1, "#327989");
}
box(12, 29, 27, 13, 30, 38, "#205462");
box(34, 29, 27, 35, 30, 38, "#205462");
box(12, 30, 40, 34, 30, 40, "#327587");
box(13, 31, 42, 33, 31, 42, "#286676");
box(11, 31, 25, 35, 31, 25, "#122f3b");
// Armrest supports, left and right.
for (const [a, b] of [[8, 12], [36, 40]]) {
box(a + 1, 16, 22, b - 1, 18, 27, "#566f78");
box(a + 1, 16, 24, a + 1, 16, 26, brightSteel);
box(a + 1, 28, 23, b - 1, 30, 28, "#3c5963");
box(a + 1, 28, 26, a + 1, 28, 28, steel);
// Broad, nearly black upholstered arm pad.
box(a - 1, 12, 28, b + 1, 31, 29, ink);
box(a, 13, 30, b, 30, 30, "#243743");
box(a, 13, 30, b, 14, 30, "#304650");
box(a, 13, 27, b, 14, 27, "#142a34");
box(a - 1, 15, 28, a - 1, 28, 28, "#102b36");
}import { draw } from "./assets/voxel";
import { sillaDeOficina } from "./assets/silla-de-oficina";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, sillaDeOficina, 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 silla-de-oficina
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["silla-de-oficina"] })
# Queda en client/assets/silla-de-oficina.ts
# https://fogon.page/object/silla-de-oficina