{ "name": "Stacker", "id": "rQnj49skfNLfzMNG9", "sources": { "main": "export function toggleUseColor(v) {\r\n color = v\r\n}\r\n\r\nexport function hsvPickerColor(h, s, v) {\r\n h_ = h\r\n s_ = s\r\n v_ = v\r\n}\r\n\r\nexport function toggleCenter(v) {\r\n centerOn = v\r\n}\r\n\r\nexport function sliderSpeed(v) {\r\n speed = (.04 + v) * 0.07\r\n msPerFrame = 200 * (1-v);\r\n\r\n}\r\n\r\n\r\ncolorspeed = .1 //set the color change speed (larger number = slower color change)\r\nBlockBrightness = 1 //set brightness for moving block (larger number = brighter)\r\nStackBrightness = 1 //set brightness for stack of blocks (larger number = brighter)\r\n\r\nexport var block = 0\r\nexport var pixels = pixelCount\r\nexport var pixel = array(pixelCount) //create an array to hold the stacked block's color\r\nexport var h\r\nvar center;\r\nvar pos;\r\nvar counter;\r\nvar count;\r\nexport var size = 2;\r\nvar halfSize = size / 2;\r\nvar t1;\r\nvar frameTime;\r\nexport var msPerFrame = 10\r\n\r\ncount = floor(pixelCount)\r\ncenter = floor(count / 2)\r\npos = 0\r\ncounter = 0\r\n\r\nexport function beforeRender(delta) {\r\n if (centerOn == 0 || centerOn == 1) {\r\n block += delta * speed //Build the block speed\r\n h = time(colorspeed) //Set the moving block color\r\n \r\n if (block >= pixels) { // A block landed\r\n block = 0 //Reset block location to the start\r\n pixel[pixels - 1] = h //persist hue of the block that just landed\r\n pixels-- //reduce pixel count each round to create the stacking effect\r\n if (pixels <= 0) pixels = pixelCount //reset the whole thing\r\n }\r\n }\r\n if (centerOn == 1) {\r\n frameTime += delta;\r\n t1 = time(0.03);\r\n \r\n if (frameTime >= msPerFrame) {\r\n pos++;\r\n if (pos > (center-counter)) {\r\n counter+=size\r\n if (counter >= center) counter = 0;\r\n pos = 0;\r\n }\r\n frameTime = 0\r\n }\r\n }\r\n} \r\n\r\nexport function render(index) {\r\n if (centerOn == 0) {\r\n var v = 0 //Set the brightness to 0 so unused blocks are off\r\n \r\n if (index >= pixels) { //If this is the the stack\r\n h = pixel[index] //Display the saved color of stacked blocks\r\n v = StackBrightness //Set the brightness of the stacked blocks\r\n } else if (index == floor(block)) { //If this is the falling block\r\n v = BlockBrightness //Set the brightness of the moving block\r\n }\r\n \r\n if (color == 0) {\r\n hsv(h, 1, v)\r\n }\r\n else if (color == 1) {\r\n hsv(h_, s_, v)\r\n }\r\n }\r\n else if (centerOn == 1) {\r\n h = pixel[index]\r\n v = StackBrightness\r\n index = index % count;\r\n index = center-abs(index-center);\r\n \r\n if (index > (center - counter)) {\r\n if (color == 0) {\r\n hsv(h, 1, v)\r\n }\r\n else if (color == 1) {\r\n hsv(h_,s_,v_); \r\n }\r\n }\r\n else if (abs(index - pos) < halfSize) {\r\n if (centerOn == 0) {\r\n hsv(h,1,v)\r\n }\r\n hsv(h_,s_,v_);\r\n }\r\n else {\r\n rgb(0,0,0);\r\n }\r\n }\r\n} \r\nexport var counter\r\nexport var pixels \r\nexport var pixel \r\n\r\n" }, "preview": "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" }