← City3D assetfogon/senal-de-peatones
Señal de peatones
Drag to turn it// «Señal de peatones» · gpt-6-sol (medium)
// A pedestrian crossing warning sign on a thin grey metal post: a yellow diamond facing front (-y) with a black border and a black walking person silhouette on white zebra stripes. The post stands on the ground, about 34 blocks high in total.
// Pedestrian crossing sign: 35 blocks tall, facing -y.
const metal = "#858f96";
const metalLight = "#aeb8bd";
const metalDark = "#626c73";
const black = "#202529";
const yellow = "#ffd33d";
function insideSign(x, z, margin = 0) {
return Math.abs(x - 24) / 16 + Math.abs(z - 20) / 14 <= 1 - margin;
}
// Small, sturdy foot and a thin steel post.
box(21, 22, 0, 27, 28, 1, "#9da5a5");
box(22, 23, 1, 26, 27, 2, metalDark);
box(23, 24, 2, 25, 25, 20, metal);
box(23, 24, 3, 23, 24, 19, metalLight);
box(25, 25, 3, 25, 25, 19, metalDark);
// Solid diamond with a dark metal edge, black border and warm yellow face.
for (let z = 6; z <= 34; z++) {
for (let x = 8; x <= 40; x++) {
if (!insideSign(x, z)) continue;
box(x, 23, z, x, 25, z, metalDark);
set(x, 22, z, black);
const edge = Math.abs(x - 24) / 16 + Math.abs(z - 20) / 14;
let color = black;
if (edge < 0.84) {
color = z > 25 ? "#ffe061" : yellow;
if (z < 13) color = "#edbd2d";
if (rand() < 0.035) color = "#f6c832";
}
set(x, 21, z, color);
}
}
// Dark roadway under the white crossing stripes.
for (let z = 12; z <= 17; z++) {
for (let x = 14; x <= 34; x++) {
if (insideSign(x, z, 0.18)) set(x, 20, z, black);
}
}
for (const x of [16, 21, 26, 31]) {
box(x, 19, 13, x + 2, 19, 16, "#fffdf0");
box(x, 19, 13, x + 2, 19, 13, "#deded5");
}
// Chunky walking pedestrian, raised in front of the crossing.
const figure = "#171b1e";
box(24, 19, 25, 26, 19, 27, figure); // head
set(25, 19, 28, figure);
box(24, 19, 21, 26, 19, 24, figure); // torso
line(24, 19, 23, 20, 19, 21, 0, figure); // swinging arms
line(26, 19, 23, 30, 19, 22, 0, figure);
line(25, 18, 21, 22, 18, 18, 0, figure); // forward leg
line(26, 18, 21, 29, 18, 18, 0, figure); // trailing leg
box(20, 18, 17, 23, 18, 17, figure);
box(28, 18, 17, 31, 18, 17, figure);
// Two tiny front-facing fasteners.
set(24, 20, 8, "#d5d7cf");
set(24, 20, 32, "#d5d7cf");import { draw } from "./assets/voxel";
import { senalDePeatones } from "./assets/senal-de-peatones";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, senalDePeatones, x, y, { size: 64, angle: 0, t: performance.now() / 1000 });
// size: its longest side, in px
// angle: turn on the floor, in radians
// t: seconds; if it moves, that animates it# In a terminal, in the game's folder
fogon assets add senal-de-peatones
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["senal-de-peatones"] })
# It lands in client/assets/senal-de-peatones.ts
# https://fogon.page/object/senal-de-peatones