diff --git a/pulsetunnel_commonmax.lua b/pulsetunnel_commonmax.lua new file mode 100644 index 0000000..65190e0 --- /dev/null +++ b/pulsetunnel_commonmax.lua @@ -0,0 +1,93 @@ +COOLDOWN_FACTOR = 0.995 + +BALANCE_RED = 7.0 +BALANCE_GREEN = 2.0 +BALANCE_BLUE = 1.5 + +num_modules = 20 +center_module = 10 + +-- maximum energy value +maxEnergy = 1 + +-- output color buffers +red = {} +green = {} +blue = {} + +tmpRed = {} +tmpGreen = {} +tmpBlue = {} + +function weighted_avg(array, centerIndex) + return 0.2 * array[centerIndex - 1] + + 0.6 * array[centerIndex] + + 0.2 * array[centerIndex + 1] +end + +function periodic() + local redEnergy = get_energy_in_band(0, 400) * BALANCE_RED + local greenEnergy = get_energy_in_band(400, 5000) * BALANCE_GREEN + local blueEnergy = get_energy_in_band(5000, 22000) * BALANCE_BLUE + local centerIndex = 2 * center_module + 1; + + maxEnergy = maxEnergy * COOLDOWN_FACTOR + if redEnergy > maxEnergy then + maxEnergy = redEnergy + end + + if greenEnergy > maxEnergy then + maxEnergy = greenEnergy + end + + if blueEnergy > maxEnergy then + maxEnergy = blueEnergy + end + + -- move the color buffers on by one in each direction + for i = 2,centerIndex,1 do + tmpRed[i-1] = tmpRed[i] + tmpGreen[i-1] = tmpGreen[i] + tmpBlue[i-1] = tmpBlue[i] + end + + for i = #tmpRed-1,centerIndex,-1 do + tmpRed[i+1] = tmpRed[i] + tmpGreen[i+1] = tmpGreen[i] + tmpBlue[i+1] = tmpBlue[i] + end + + -- set the new value for the center module + tmpRed[centerIndex] = redEnergy / maxEnergy + tmpGreen[centerIndex] = greenEnergy / maxEnergy + tmpBlue[centerIndex] = blueEnergy / maxEnergy + + for i = 1,num_modules do + red[i] = weighted_avg(tmpRed, 2*i) + green[i] = weighted_avg(tmpGreen, 2*i) + blue[i] = weighted_avg(tmpBlue, 2*i) + end + + -- return the 3 color arrays + return red, green, blue +end + +function init(nmod, cmod) + num_modules = nmod + center_module = cmod + + for i = 1,nmod do + red[i] = 0 + green[i] = 0 + blue[i] = 0 + end + + for i = 1,2*(nmod+1) do + tmpRed[i] = 0 + tmpGreen[i] = 0 + tmpBlue[i] = 0 + end + + -- don't use fading + return 0 +end