#!/usr/bin/env node
/**
* gen-art.mjs — 程序化生成 SVG 素材(金碧山水/纹样/饰件),零外部资源。
* 用法:node scripts/gen-art.mjs (产物写 src/renderer/assets/gen/*.svg)
*/
import { mkdirSync, writeFileSync } from 'node:fs'
import { dirname, join } from 'node:path'
import { fileURLToPath } from 'node:url'
const OUT = join(dirname(fileURLToPath(import.meta.url)), '../src/renderer/assets/gen')
mkdirSync(OUT, { recursive: true })
// ============ 1. 金碧山水全景(主背景) ============
function goldenLandscape() {
const ridge = (y, amp, seed, opacity) => {
const pts = []
let x = -40
let phase = seed
while (x <= 1280) {
const yy = y + Math.sin((x / 170) + phase) * amp + Math.sin((x / 71) + phase * 2.2) * amp * 0.3
pts.push(`${x.toFixed(0)},${yy.toFixed(0)}`)
phase += 0.35
x += 80
}
return ``
}
return ``
}
// ============ 2. 祥云纹带(分隔/装饰) ============
function cloudBand() {
const cloud = (x, y, s, o) =>
`
`
let out = ''
for (let i = 0; i < 6; i++) out += cloud(i * 200 - 20, ((i % 2) * 10) - 4, 0.9 + (i % 3) * 0.15, 0.5 - (i % 2) * 0.15)
return ``
}
// ============ 3. 回纹角饰(卡片角框) ============
function meanderCorner() {
const sq = (x, y, s) => ``
let p = ''
for (let i = 0; i < 4; i++) {
p += ``
}
return ``
}
// ============ 4. 仙鹤(点缀) ============
function crane() {
return ``
}
// ============ 5. 星辰点缀层 ============
function starfield() {
let p = ''
for (let i = 0; i < 42; i++) {
const x = ((i * 137) % 1200)
const y = ((i * 83) % 420)
const r = 0.6 + (i % 3) * 0.5
const o = 0.12 + ((i * 7) % 5) * 0.09
p += ``
}
return ``
}
const out = {
'landscape-gold.svg': goldenLandscape(),
'cloud-band.svg': cloudBand(),
'meander-corner.svg': meanderCorner(),
'crane.svg': crane(),
'starfield.svg': starfield()
}
for (const [name, svg] of Object.entries(out)) {
writeFileSync(join(OUT, name), svg, 'utf-8')
console.log('✓', name, `${svg.length} B`)
}
console.log('gen-art done →', OUT)