updated sigil
This commit is contained in:
@@ -65,10 +65,25 @@ export function buildCybersigil(opts: SigilOptions = {}): string {
|
|||||||
const ax = Math.abs(x);
|
const ax = Math.abs(x);
|
||||||
if (ax > maxX) maxX = ax;
|
if (ax > maxX) maxX = ax;
|
||||||
};
|
};
|
||||||
const emit = (d: string, cls: string) => {
|
const emit = (d: string, cls: string, style?: string) => {
|
||||||
if (strokeCount >= MAX_PATHS) return;
|
if (strokeCount >= MAX_PATHS) return;
|
||||||
|
const s = style ? ` style="${style};--i:${strokeCount % 16}"` : ` style="--i:${strokeCount % 16}"`;
|
||||||
parts.push(
|
parts.push(
|
||||||
`<path class="${cls}" d="${d}" pathLength="1" style="--i:${strokeCount % 16}" filter="url(#cs-erosion)"/>`,
|
`<path class="${cls}" d="${d}" pathLength="1"${s} filter="url(#cs-erosion)"/>`,
|
||||||
|
);
|
||||||
|
strokeCount++;
|
||||||
|
};
|
||||||
|
|
||||||
|
const emitRect = (x: number, y: number, sz: number, cls: string) => {
|
||||||
|
parts.push(
|
||||||
|
`<rect x="${n(x)}" y="${n(y)}" width="${n(sz)}" height="${n(sz)}" class="${cls}" style="--i:${strokeCount % 16}"/>`,
|
||||||
|
);
|
||||||
|
strokeCount++;
|
||||||
|
};
|
||||||
|
|
||||||
|
const emitHUD = (d: string, cls: string) => {
|
||||||
|
parts.push(
|
||||||
|
`<path class="${cls}" d="${d}" pathLength="1" style="--i:${strokeCount % 16}"/>`,
|
||||||
);
|
);
|
||||||
strokeCount++;
|
strokeCount++;
|
||||||
};
|
};
|
||||||
@@ -161,7 +176,11 @@ export function buildCybersigil(opts: SigilOptions = {}): string {
|
|||||||
];
|
];
|
||||||
const tail: Pt = [Math.max(-2, hook[0] - L * rnd(0.25, 0.45)), hook[1] + rnd(-4, 12)];
|
const tail: Pt = [Math.max(-2, hook[0] - L * rnd(0.25, 0.45)), hook[1] + rnd(-4, 12)];
|
||||||
const pts: Pt[] = [[ox, oy], mid, peak, hook, tail];
|
const pts: Pt[] = [[ox, oy], mid, peak, hook, tail];
|
||||||
emit(spline(pts, 5.5), 'cs-sig-main');
|
|
||||||
|
// Depth shading: background limbs are thinner and fainter
|
||||||
|
const sw = depth === 0 ? 1.6 : 2.6;
|
||||||
|
const op = depth === 0 ? 0.45 : 0.9;
|
||||||
|
emit(spline(pts, 5.5), 'cs-sig-main', `stroke-width:${sw};opacity:${op}`);
|
||||||
|
|
||||||
// Bifurcation: split at the mid point with a secondary branch
|
// Bifurcation: split at the mid point with a secondary branch
|
||||||
if (depth > 0 && rng() < 0.45) {
|
if (depth > 0 && rng() < 0.45) {
|
||||||
@@ -169,7 +188,7 @@ export function buildCybersigil(opts: SigilOptions = {}): string {
|
|||||||
const bL = L * rnd(0.4, 0.7);
|
const bL = L * rnd(0.4, 0.7);
|
||||||
const bPeak: Pt = [mid[0] + Math.cos(bAng) * bL, mid[1] + Math.sin(bAng) * bL];
|
const bPeak: Pt = [mid[0] + Math.cos(bAng) * bL, mid[1] + Math.sin(bAng) * bL];
|
||||||
const bPts: Pt[] = [mid, bPeak, [bPeak[0] + rnd(-10, 10), bPeak[1] + rnd(10, 20)]];
|
const bPts: Pt[] = [mid, bPeak, [bPeak[0] + rnd(-10, 10), bPeak[1] + rnd(10, 20)]];
|
||||||
emit(spline(bPts, 4), 'cs-sig-main');
|
emit(spline(bPts, 4), 'cs-sig-main', `stroke-width:${sw * 0.8};opacity:${op}`);
|
||||||
if (rng() < 0.3) ornament(bPeak, bAng, 0.6);
|
if (rng() < 0.3) ornament(bPeak, bAng, 0.6);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -289,6 +308,13 @@ export function buildCybersigil(opts: SigilOptions = {}): string {
|
|||||||
if (isTangle && rng() < 0.5) {
|
if (isTangle && rng() < 0.5) {
|
||||||
ornament(node, bias, 0.8);
|
ornament(node, bias, 0.8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isTangle) {
|
||||||
|
// Digital Sediment: tiny bit-dust squares at tangle nodes
|
||||||
|
for (let j = 0; j < 6; j++) {
|
||||||
|
emitRect(node[0] + rnd(-12, 12), node[1] + rnd(-12, 12), rnd(1, 3), 'cs-sig-dust');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── Technical Connectors: sparse, straight circuit lines
|
// ── Technical Connectors: sparse, straight circuit lines
|
||||||
@@ -308,6 +334,12 @@ export function buildCybersigil(opts: SigilOptions = {}): string {
|
|||||||
emitText(pt[0] + rnd(4, 12), pt[1] + rnd(-4, 4), pick(symbols), 'cs-sig-text');
|
emitText(pt[0] + rnd(4, 12), pt[1] + rnd(-4, 4), pick(symbols), 'cs-sig-text');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── Calibration HUD: geometric framing arcs and crosshairs
|
||||||
|
const hudR = maxX + PAD * 1.5;
|
||||||
|
emitHUD(`M${n(-hudR)} 0 A${n(hudR)} ${n(hudR)} 0 0 1 ${n(hudR)} 0`, 'cs-sig-hud');
|
||||||
|
emitHUD(`M${n(-hudR)} ${H} A${n(hudR)} ${n(hudR)} 0 0 0 ${n(hudR)} ${H}`, 'cs-sig-hud');
|
||||||
|
emitHUD(`M0 ${n(-PAD)} L0 ${n(H + PAD)}`, 'cs-sig-hud cs-sig-hud--v');
|
||||||
|
|
||||||
const half = parts.join('');
|
const half = parts.join('');
|
||||||
const minX = -(maxX + PAD);
|
const minX = -(maxX + PAD);
|
||||||
const vbW = 2 * (maxX + PAD);
|
const vbW = 2 * (maxX + PAD);
|
||||||
|
|||||||
@@ -265,6 +265,26 @@ html.cybersigil body::after {
|
|||||||
animation: cs-flicker 4s linear infinite;
|
animation: cs-flicker 4s linear infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Digital Sediment */
|
||||||
|
.cybersigil .cs-sig-dust {
|
||||||
|
fill: var(--sky);
|
||||||
|
opacity: 0.4;
|
||||||
|
filter: drop-shadow(0 0 1px var(--sky));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Calibration HUD */
|
||||||
|
.cybersigil .cs-sig-hud {
|
||||||
|
fill: none;
|
||||||
|
stroke: var(--sky);
|
||||||
|
stroke-width: 0.3;
|
||||||
|
opacity: 0.12;
|
||||||
|
stroke-dasharray: 2 6;
|
||||||
|
}
|
||||||
|
.cybersigil .cs-sig-hud--v {
|
||||||
|
stroke-dasharray: 1 15;
|
||||||
|
opacity: 0.08;
|
||||||
|
}
|
||||||
|
|
||||||
/* Stroke-weight tiers — heavy growth, hair filaments, prickly barbs, motifs. */
|
/* Stroke-weight tiers — heavy growth, hair filaments, prickly barbs, motifs. */
|
||||||
.cybersigil .cs-sigil .cs-sig-main { stroke-width: 2.8; }
|
.cybersigil .cs-sigil .cs-sig-main { stroke-width: 2.8; }
|
||||||
.cybersigil .cs-sigil .cs-sig-spine {
|
.cybersigil .cs-sigil .cs-sig-spine {
|
||||||
|
|||||||
Reference in New Issue
Block a user