← Piezas de nivel 2Objeto 3Dfogon/nivel-palanca
Palanca
Arrastrá para girarlo// «Palanca» · gpt-6-sol (medium)
// A floor lever: a dark stone base block 20x14x8 centered on the floor with a curved slot on top, and a thick iron lever arm 3x3 and 20 long tilting out of the slot, ending in a big round red knob (radius 4).
// Dark stone base: 20 × 14 × 8, centered on the floor.
box(14, 17, 0, 33, 30, 7, "#465762");
box(14, 17, 0, 33, 30, 1, "#34434d");
box(14, 17, 7, 33, 30, 7, "#657780");
box(15, 18, 7, 32, 29, 7, "#72858b");
// Clean stone highlights and a little restrained surface variation.
box(14, 17, 2, 33, 17, 2, "#52646e");
box(14, 17, 6, 33, 17, 6, "#52646e");
box(14, 18, 2, 14, 29, 2, "#52646e");
for (let i = 0; i < 24; i++) {
const x = 15 + Math.floor(rand() * 18);
const y = 18 + Math.floor(rand() * 12);
const z = 2 + Math.floor(rand() * 4);
if (y === 17 || x === 14) set(x, y, z, "#596b74");
}
// Recessed, rounded slot running front to back.
for (let y = 19; y <= 28; y++) {
const halfWidth = (y === 19 || y === 28) ? 1 : 2;
for (let x = 24 - halfWidth; x <= 24 + halfWidth; x++) {
set(x, y, 7, "#192831");
set(x, y, 6, "#26353d");
}
}
// Bright metal edging follows the slot's rounded ends.
for (let y = 20; y <= 27; y++) {
set(21, y, 7, "#a5b8bc");
set(27, y, 7, "#82999f");
}
for (let x = 23; x <= 25; x++) {
set(x, 18, 7, "#b5c8c9");
set(x, 29, 7, "#82999f");
}
set(22, 19, 7, "#a5b8bc");
set(26, 19, 7, "#a5b8bc");
set(22, 28, 7, "#82999f");
set(26, 28, 7, "#82999f");
// Chunky corner bolts on the top and front.
for (const x of [17, 30]) {
for (const y of [20, 27]) {
set(x, y, 7, "#b7c9c8");
set(x, y, 8, "#d5dfd9");
}
set(x, 17, 4, "#a9b9b9");
set(x, 17, 3, "#6f858b");
}
// Fixed hinge beneath the moving arm.
box(22, 22, 7, 26, 26, 8, "#778e97");
box(23, 23, 8, 25, 25, 8, "#b2c8ca");
part("palanca", [24, 24, 8]);
// Thick 3 × 3 iron arm, 20 blocks long, leaning toward the viewer.
for (let z = 8; z <= 27; z++) {
const y = 24 - Math.round((z - 8) * 0.36);
box(23, y - 1, z, 25, y + 1, z, "#a6bbc1");
for (let x = 23; x <= 25; x++) set(x, y - 1, z, "#d0dcda");
set(25, y + 1, z, "#718990");
}
// Broad collar where the iron disappears into the red handle.
box(22, 15, 26, 26, 19, 27, "#70878e");
box(23, 14, 27, 25, 18, 27, "#c1d1ce");
// Round red knob with a darker underside and glossy upper face.
sphere(24, 17, 29, 4, "#cf3035");
for (let x = 20; x <= 28; x++) {
for (let y = 13; y <= 21; y++) {
for (let z = 25; z <= 33; z++) {
const d2 = (x - 24) ** 2 + (y - 17) ** 2 + (z - 29) ** 2;
if (d2 <= 16) {
if (z >= 30) set(x, y, z, "#f24745");
if (z <= 27) set(x, y, z, "#a92530");
}
}
}
}
set(23, 14, 31, "#ff9b82");
set(24, 14, 31, "#ff9b82");
set(23, 14, 30, "#ff766a");
animate("palanca", { type: "swing", axis: "x", amplitude: 0.5, speed: 1.5 });import { draw } from "./assets/voxel";
import { nivelPalanca } from "./assets/nivel-palanca";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, nivelPalanca, 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 nivel-palanca
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["nivel-palanca"] })
# Queda en client/assets/nivel-palanca.ts
# https://fogon.page/object/nivel-palanca