fogón

← Farm3D assetfogon/carretilla-con-heno

Carretilla con heno

by fogonCC09446 blocks
Carretilla con henoDrag to turn it
// «Carretilla con heno» · gpt-6-sol (medium)
// A wooden farm wheelbarrow loaded with hay: a single wooden spoked wheel at the front, a deep brown plank tray, two long wooden handles going back with two short legs, piled high with a golden heap of straw, and a pitchfork stuck into the hay.

// A sunny, straw-filled farm wheelbarrow.
const woodDark = "#63391f";
const woodMid = "#946033";
const woodLight = "#bb8044";
const woodSun = "#d19a59";
const red = "#ae4835";
const metal = "#aebcc0";
const metalDark = "#72858a";

// Single front wheel: a thick wooden rim, eight spokes, and a metal hub.
const wx = 24, wy = 9, wz = 8;
for (let x = wx - 7; x <= wx + 7; x++) {
  for (let z = wz - 7; z <= wz + 7; z++) {
    const d = Math.hypot(x - wx, z - wz);
    if (d >= 5.2 && d <= 7.2) {
      for (let y = 8; y <= 11; y++) {
        set(x, y, z, y === 8 ? woodSun : d > 6.5 ? woodDark : woodMid);
      }
    }
  }
}
for (let i = 0; i < 8; i++) {
  const a = i * Math.PI / 4;
  line(wx, 8, wz, wx + Math.cos(a) * 6, 8, wz + Math.sin(a) * 6, 0, woodLight);
  line(wx, 9, wz, wx + Math.cos(a) * 6, 9, wz + Math.sin(a) * 6, 0, woodMid);
}
cylinder(wx, 7, wz, 2, 5, metalDark, "y");
cylinder(wx, 7, wz, 1, 2, "#dbe2dc", "y");
set(wx, 7, wz, metalDark);

// Wooden fork around the wheel and its crosspiece.
line(17, 15, 15, 20, 11, 8, 1, woodDark);
line(31, 15, 15, 28, 11, 8, 1, woodDark);
line(17, 11, 8, 31, 11, 8, 0, metalDark);

// Two long handles, rising slightly toward their rear grips.
for (const x of [13, 35]) {
  line(x, 13, 14, x, 34, 15, 1, woodMid);
  line(x, 34, 15, x, 44, 18, 1, woodMid);
  line(x, 17, 16, x, 37, 17, 0, woodSun);
  line(x, 39, 17, x, 44, 18, 1, woodDark);
  set(x, 44, 18, woodLight);
}

// Short, splayed support legs, planted on the floor.
for (const [topX, footX] of [[16, 14], [32, 34]]) {
  line(topX, 32, 15, footX, 37, 1, 1, woodDark);
  line(topX, 32, 15, footX, 37, 2, 0, woodLight);
  box(footX - 1, 36, 0, footX + 1, 38, 1, woodDark);
}
line(16, 34, 7, 32, 34, 7, 0, woodMid);

// Solid tray floor and deep, separate-looking plank walls.
box(12, 15, 15, 36, 35, 17, woodDark);
box(13, 16, 17, 35, 34, 18, woodMid);

for (let z = 18; z <= 24; z += 3) {
  const shade = z === 18 ? "#85502b" : z === 21 ? woodMid : woodLight;
  box(11, 15, z, 13, 35, z + 2, shade);
  box(35, 15, z, 37, 35, z + 2, shade);
  box(12, 14, z, 36, 16, z + 2, shade);
  box(12, 34, z, 36, 36, z + 2, shade);
  // Crisp shadow lines between planks.
  line(12, 14, z, 36, 14, z, 0, woodDark);
  line(11, 16, z, 11, 35, z, 0, woodDark);
}
line(11, 14, 25, 37, 14, 25, 0, woodSun);
line(11, 15, 25, 11, 35, 25, 0, woodSun);
line(37, 15, 25, 37, 35, 25, 0, woodSun);
line(12, 36, 25, 36, 36, 25, 0, woodSun);

// A small barn-red painted panel and pale galvanized fasteners.
box(19, 13, 19, 29, 13, 23, red);
line(19, 13, 24, 29, 13, 24, 0, "#e8dac0");
for (const x of [14, 34]) {
  for (const z of [19, 23]) set(x, 13, z, metal);
}

// Heaped, chunky golden hay, spilling above the tray.
ellipsoid(24, 25, 25, 11, 10, 9, "#e6ab36");
ellipsoid(22, 26, 30, 8, 7, 6, "#f3c44e");
ellipsoid(29, 24, 29, 5, 6, 5, "#efb83e");

// Sunlit top, warmer sides, and light straw flecks.
const hayColors = new Set(["#e6ab36", "#f3c44e", "#efb83e"]);
forEach((x, y, z, color) => {
  if (!hayColors.has(color)) return;
  if (z >= 28 && rand() < 0.20) {
    set(x, y, z, rand() < 0.65 ? "#f8d66a" : "#ffdf79");
  } else if (z < 24 && rand() < 0.13) {
    set(x, y, z, "#cf9029");
  }
});
for (let i = 0; i < 110; i++) {
  const x = 15 + Math.floor(rand() * 19);
  const y = 17 + Math.floor(rand() * 18);
  for (let z = 37; z >= 24; z--) {
    if (hayColors.has(get(x, y, z)) ||
        ["#f8d66a", "#ffdf79", "#cf9029"].includes(get(x, y, z))) {
      if (rand() < 0.58) {
        line(x, y, z + 1, x + (rand() < 0.5 ? -1 : 1),
             y + (rand() < 0.5 ? -1 : 1), z + 2, 0,
             rand() < 0.55 ? "#ffdf79" : "#d9972c");
      }
      break;
    }
  }
}

// Loose straw poking out around the tray lip.
for (let i = 0; i < 30; i++) {
  const x = 15 + Math.floor(rand() * 19);
  const y = rand() < 0.7 ? 14 : 34;
  const z = 23 + Math.floor(rand() * 5);
  line(x, y, z, x + (rand() < 0.5 ? -2 : 2),
       y + (y === 14 ? -2 : 2), z - 1, 0, "#ecc04b");
}

// Pitchfork tucked into the front of the hay: three visible steel tines.
line(25, 13, 32, 31, 13, 32, 0, metalDark);
line(26, 12, 33, 30, 12, 33, 0, "#d7dfdc");
for (const x of [25, 28, 31]) {
  line(x, 12, 32, x, 12, 27, 0, metal);
  set(x, 12, 26, "#d7dfdc");
}
line(28, 13, 33, 29, 13, 36, 1, metalDark);
line(29, 13, 36, 35, 14, 44, 1, woodDark);
line(30, 12, 37, 35, 13, 44, 0, woodSun);