← Casa completaObjeto 3Dfogon/aspiradora
Aspiradora
Arrastrá para girarlo// «Aspiradora» · gpt-6-sol (medium)
// A canister vacuum cleaner: a round red body on wheels with a carry handle, a long grey hose curving to a metal wand with a wide floor nozzle at the front.
// Round red canister
ellipsoid(28, 29, 13, 11, 10, 10, "#d94c43");
forEach((x, y, z, color) => {
if (color !== "#d94c43") return;
if (z >= 19 && rand() < 0.36) set(x, y, z, "#ed6557");
else if (z <= 7 && rand() < 0.42) set(x, y, z, "#bc3938");
else if (rand() < 0.07) set(x, y, z, "#e3584d");
});
// Front rim and rounded face
cylinder(28, 17, 13, 9, 2, "#a93636", "y");
cylinder(28, 16, 13, 7, 2, "#e95549", "y");
ellipsoid(28, 17, 17, 5, 1, 2, "#f16d5c");
// Soft rubber bumper around the lower body
box(22, 25, 3, 35, 34, 4, "#a93736");
box(24, 26, 4, 33, 33, 4, "#ea6857");
// Two chunky wheels
for (const wx of [12, 39]) {
cylinder(wx, 30, 6, 5, 3, "#42464c", "x");
cylinder(wx, 30, 6, 4, 3, "#686c72", "x");
}
cylinder(11, 30, 6, 3, 2, "#c7c9c7", "x");
cylinder(40, 30, 6, 3, 2, "#c7c9c7", "x");
cylinder(10, 30, 6, 1, 2, "#f0d9aa", "x");
cylinder(41, 30, 6, 1, 2, "#f0d9aa", "x");
// Small rear caster
sphere(28, 39, 2, 2, "#4c5055");
sphere(28, 40, 2, 1, "#aaaead");
// Carry handle: an easy-to-grasp raised arch
box(22, 27, 22, 24, 31, 27, "#873936");
box(32, 27, 22, 34, 31, 27, "#873936");
box(23, 28, 27, 33, 30, 30, "#a83f3c");
box(24, 28, 29, 32, 30, 31, "#48494c");
box(25, 28, 31, 31, 29, 31, "#737276");
// Controls and cheerful front details
cylinder(34, 15, 17, 2, 2, "#f3e9dc", "y");
cylinder(34, 14, 17, 1, 2, "#87c9bd", "y");
box(32, 15, 10, 35, 15, 11, "#f7e9d7");
box(33, 14, 11, 34, 15, 12, "#f7e9d7");
cylinder(30, 25, 23, 2, 2, "#f2e7d9", "z");
cylinder(30, 25, 25, 1, 1, "#8acbc1", "z");
// Wide, low floor nozzle
box(3, 3, 0, 23, 9, 1, "#4d5156");
box(4, 2, 1, 22, 8, 2, "#b9bec1");
box(6, 3, 2, 20, 9, 3, "#dce0dd");
box(5, 2, 2, 21, 3, 2, "#f3f0e9");
box(8, 4, 3, 16, 9, 4, "#a7adb0");
box(10, 7, 4, 14, 10, 6, "#62696c");
box(8, 3, 1, 18, 3, 1, "#686c70");
// Chrome wand leaning down toward the nozzle
line(12, 12, 20, 12, 8, 6, 1, "#848e91");
line(12, 11, 19, 12, 8, 7, 1, "#e4e7e2");
line(12, 8, 7, 12, 8, 5, 2, "#555c60");
box(11, 7, 5, 13, 9, 6, "#727b7e");
// Hose socket on the front of the canister
cylinder(24, 13, 12, 4, 4, "#9e3837", "y");
cylinder(24, 12, 12, 3, 3, "#343b3e", "y");
cylinder(24, 11, 12, 2, 2, "#aeb3b2", "y");
// A gently looping, ribbed grey hose
const hose = [
[24, 12, 12],
[24, 10, 15],
[22, 9, 19],
[19, 9, 22],
[16, 10, 23],
[13, 12, 21],
[12, 12, 20]
];
for (let i = 0; i < hose.length - 1; i++) {
line(...hose[i], ...hose[i + 1], 2, "#636c70");
}
for (let i = 0; i < hose.length; i++) {
const [x, y, z] = hose[i];
sphere(x, y, z, 2, i % 2 ? "#929b9d" : "#7c8588");
}
sphere(12, 12, 20, 2, "#555e62");import { draw } from "./assets/voxel";
import { aspiradora } from "./assets/aspiradora";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, aspiradora, 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 aspiradora
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["aspiradora"] })
# Queda en client/assets/aspiradora.ts
# https://fogon.page/object/aspiradora