{"version":3,"file":"explosion.cjs","sources":["../../../../../src/elements/oscilloscope/renderers/explosion.js"],"sourcesContent":["import paper from '@chnak/paper';\n\n/**\n * 爆炸样式默认配置\n */\nexport const defaultConfig = {\n  explosionParticles: 100, // 爆炸粒子数\n  particleColors: [ // 粒子颜色数组\n    '#ff0080', '#ff4080', '#ff8000', '#ffc000',\n    '#ffff00', '#80ff00', '#00ff80', '#00ffff',\n    '#0080ff', '#8000ff', '#ff00ff', '#ff0080',\n  ],\n};\n\n/**\n * 爆炸波形渲染器（粒子从中心爆炸）\n * @param {Object} element - 元素实例\n * @param {Array} data - 波形数据\n * @param {number} x - X坐标\n * @param {number} y - Y坐标\n * @param {number} width - 宽度\n * @param {number} height - 高度\n * @param {number} time - 当前时间\n * @param {Object} config - 配置对象（合并了默认配置和用户配置）\n */\nexport default function renderExplosion(element, data, x, y, width, height, time, config = {}) {\n  // 合并默认配置\n  const cfg = { ...defaultConfig, ...config };\n  \n  const centerX = x + width / 2;\n  const centerY = y + height / 2;\n  const maxRadius = Math.min(width, height) / 2;\n  const particleCount = cfg.explosionParticles;\n  const step = Math.max(1, Math.floor(data.length / particleCount));\n  const colorStep = cfg.particleColors.length / particleCount;\n  \n  for (let i = 0; i < particleCount; i++) {\n    const dataIndex = Math.min(i * step, data.length - 1);\n    const amplitude = Math.abs(data[dataIndex]) * element.sensitivity;\n    \n    // 计算粒子位置（从中心向外）\n    const angle = (i / particleCount) * Math.PI * 2;\n    const baseRadius = maxRadius * 0.3;\n    const radiusOffset = amplitude * maxRadius * 0.7;\n    const radius = baseRadius + radiusOffset;\n    \n    const px = centerX + Math.cos(angle) * radius;\n    const py = centerY + Math.sin(angle) * radius;\n    \n    // 粒子大小\n    const particleSize = 3 + amplitude * 12;\n    \n    // 选择颜色\n    const colorIndex = Math.floor(i * colorStep) % cfg.particleColors.length;\n    const color = cfg.particleColors[colorIndex];\n    \n    // 绘制粒子\n    const circle = new paper.Path.Circle({\n      center: new paper.Point(px, py),\n      radius: particleSize / 2,\n    });\n    circle.fillColor = color;\n    \n    // 添加拖尾（从中心到粒子）\n    if (amplitude > 0.2) {\n      const trail = new paper.Path();\n      trail.strokeColor = color;\n      trail.strokeWidth = particleSize * 0.2;\n      trail.strokeColor.alpha = 0.4;\n      trail.moveTo(new paper.Point(centerX, centerY));\n      trail.lineTo(new paper.Point(px, py));\n    }\n  }\n}\n\nrenderExplosion.style = 'explosion';\n\n"],"names":[],"mappings":"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"}