{ "name": "Pew-Pew-Pew!", "id": "hRKrNtdnFHfEpLAyp", "sources": { "main": "// Pew-Pew-Pew! v2.0.0 (Pattern for PixelBlaze)\n// by Scott Balay -- https://github.com/zenblender\n\nisForwardDirection = true // flip to run backwards\nlaserCount = 10 // use a multiple of numPaletteRGBs to have each available color represented equally\nfadeFactor = 0.8\nspeedFactor = 0.01\n\n// when on, new lasers cause entire strip to flash blue\n// when off, blue component of each laser affects its color as normal\nuseBlueLightning = true\n\n// init RGBs that in the palette of available colors:\nnumPaletteRGBs = 5\npaletteRGBs = array(numPaletteRGBs)\npaletteRGBs[0] = packRGB(255,13,107)\npaletteRGBs[1] = packRGB(232,12,208)\npaletteRGBs[2] = packRGB(200,0,255)\npaletteRGBs[3] = packRGB(124,12,232)\npaletteRGBs[4] = packRGB(70,13,255)\n\nambientR = 15\nambientG = 0\nambientB = 0\n\nfunction getRandomVelocity() { return random(4) + 3 }\n\n// init RGB of each laser:\nlaserRGBs = createArray(laserCount, function(i){ return paletteRGBs[i % numPaletteRGBs] }, true)\n\n// init randomized starting positions of each laser:\nlaserPositions = createArray(laserCount, function(){ return random(pixelCount) }, true)\n\n// init each laser's velocity\nlaserVelocities = createArray(laserCount, function(){ return getRandomVelocity() }, true)\n\n// init the full pixel array:\npixelRGBs = createArray(pixelCount)\n\nexport function beforeRender(delta) {\n // fade existing pixels:\n for (pixelIndex = 0; pixelIndex < pixelCount; pixelIndex++) {\n pixelRGBs[pixelIndex] = packRGB(\n floor(getR(pixelRGBs[pixelIndex]) * fadeFactor),\n floor(getG(pixelRGBs[pixelIndex]) * fadeFactor),\n floor(getB(pixelRGBs[pixelIndex]) * fadeFactor)\n )\n }\n\n // advance laser positions:\n for (laserIndex = 0; laserIndex < laserCount; laserIndex++) {\n currentLaserPosition = laserPositions[laserIndex]\n nextLaserPosition = currentLaserPosition + (delta * speedFactor * laserVelocities[laserIndex])\n for (pixelIndex = floor(nextLaserPosition); pixelIndex >= currentLaserPosition; pixelIndex--) {\n // draw new laser edge, but fill in \"gaps\" from last draw:\n if (pixelIndex < pixelCount) {\n pixelRGBs[pixelIndex] = packRGB(\n min(255, getR(pixelRGBs[pixelIndex]) + getR(laserRGBs[laserIndex])),\n min(255, getG(pixelRGBs[pixelIndex]) + getG(laserRGBs[laserIndex])),\n min(255, getB(pixelRGBs[pixelIndex]) + getB(laserRGBs[laserIndex]))\n )\n }\n }\n\n laserPositions[laserIndex] = nextLaserPosition\n if (laserPositions[laserIndex] >= pixelCount) {\n // wrap this laser back to the start\n laserPositions[laserIndex] = 0\n laserVelocities[laserIndex] = getRandomVelocity()\n }\n }\n}\n\nexport function render(rawIndex) {\n index = isForwardDirection ? rawIndex : (pixelCount - rawIndex - 1)\n rgb(\n clamp((getR(pixelRGBs[index]) + ambientR) / 255, 0, 1),\n clamp((getG(pixelRGBs[index]) + ambientG) / 255, 0, 1),\n clamp((getB(pixelRGBs[useBlueLightning ? 0 : index]) + ambientB) / 255, 0, 1)\n )\n}\n\n//===== UTILS =====\n// ARRAY INIT FUNCTIONS:\nfunction createArray(size, valueOrFn, isFn) {\n arr = array(size)\n if (!valueOrFn) return arr\n for (i = 0; i < size; i++) {\n arr[i] = isFn ? valueOrFn(i) : valueOrFn\n }\n return arr\n}\n// RGB FUNCTIONS:\n// assume each component is an 8-bit \"int\" (0-255)\nfunction packRGB(r, g, b) { return _packColor(r, g, b) }\nfunction getR(value) { return _getFirstComponent(value) }\nfunction getG(value) { return _getSecondComponent(value) }\nfunction getB(value) { return _getThirdComponent(value) }\n// HSV FUNCTIONS:\n// assume each component is an 8-bit \"int\" (0-255)\nfunction packHSV(h, s, v) { return _packColor(h, s, v) }\nfunction getH(value) { return _getFirstComponent(value) }\nfunction getS(value) { return _getSecondComponent(value) }\nfunction getV(value) { return _getThirdComponent(value) }\n// \"PRIVATE\" COLOR FUNCTIONS:\n// assume each component is an 8-bit \"int\" (0-255)\nfunction _packColor(a, b, c) { return (a<<8) + b + (c>>8) }\nfunction _getFirstComponent(value) { return (value>>8) & 0xff } // R or H\nfunction _getSecondComponent(value) { return value & 0xff } // G or S\nfunction _getThirdComponent(value) { return (value<<8) & 0xff } // B or V\n" }, "preview": "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" }