ÎÌÌÌ̈ˆˆ¬ªªª¬ˆˆˆ¬ÌÌ̬ÌÀ̬ÌÀ̬ÌÀÌÌÌìÌÀÀî̬ÀÌÀ¬ÀÀÀ¬ÀÀÀ¬ÀÀÎÌÌÌ̈ˆˆ¬ªªª¬ˆˆˆ¬ÌÌ̬ÌÌ̬ÌÀ̬ÌÀÌÌÌìÌÀÀî̬ÀÌ̬ÀÀÀ¬ÀÀÀ¬ÀÀ¬ÌÌ̬ªªª¬ª¬ª¬ªÊ̬ªªªŒˆˆˆÌÀÌÎÌÌÎ̬̪ªÀ쬪ÀÀÀÌîÀìîÌÌîî¬ÌÌ̬ªªª¬ª¬ª¬ªÊ̬ªªªŒˆˆˆÌÀÌÎÌÌÎ̬̪ªÀ쬪ÀÀÀÌîÀìîÌÌîî >×>Ì À ÌÀ À À ÀÀ ÌÌÀ ÀÀ À À ÌÀÌÀÌ À À ÀÀ ÌÀÌÀ ÀÌ Ì ÌÌÌÀ ÀÀ ppppppp€pp€€€€€€€€€€pp€€pp€€€€pp€€p€€€€p€p€€€€p€p€pppppp€pp€pppppp€pp€€pppp€pp€pp€p€€€ppppp€p€€p€ppppp€p€pp€pppp€pp€p€ppp€pp€ppp€pp€pp€pppp€pp€p€ppp€pppp€p€pp€€€€€€€€€pp€pp€p€€ppppppp€€ppp€€ppp€€p€pppp€ppp€pp€€p€p€pppppppp€ppp€p€ppppppppppp€ppppppp€p€€€€€ppppppp€€€pp€pppppppp€pppppp€pp€€pp€€ppp€€€pp€€p€€ppp€€€ppp€pp€€pp€€€€€p€pp€€p€€p€ p��€€€��p€ppp€€p€€€€€€€ppp€€p€€pp€  p�p€€€€€p�p€p€€€€pp€€€€€€ppp€€€€€€€€€€pp€pp�€ppppp€�pp€p€€€€€€pppp€€pp€pppppp€€€ppppp€€€pp€€€€€pppppppppppp€pp  p€€€ppppp€€€p€pp€€€€pppppppp€p€  p€€€ppppp€€€p€p€€€p€pppp€pp€p€pp�€ppppp€�pp€p€€p€€pppppp€€€p€p�p€€€€€p�pp€€€p€€€€€€€€€pp  p��€€€��p€p€€€€€p€ pp€€€pp€p€€€p€€p€pppppp€pp€€€€€€€€p€pp€pp€€€€€€€€pp€p€€p€p€€€p€€€€p€p€p€€€€€€pp€p€pp€€€€pp€€€p€p€€€€€€€€€ppp€€p€pp€€€€€pp€p€ppp€€€€ppp€€p€€pppppppp€€p€€€€€€00�00ppp€ppp€pä-- title: Water Ripples -- author: Marioio -- desc: Simulation of water ripples -- site: https://marioio333.neocities.org/ -- license: MIT License (change this to your license of choice) -- version: 1.0 -- script: lua previous = {} current = {} cols = 240 rows = 136 damping = 0.90 random_drop_rate = 90 t = 0 -- Mouse MOUSE_STATES = { IDDLE = 0, CLICKING = 1, HOLDING = 2, } mous = { x = 0, y = 0, state = MOUSE_STATES.IDDLE, } function BOOT() -- Initialize arrays for i=1,cols do previous[i] = {} current[i] = {} for j = 1,rows do previous[i][j] = 0 current[i][j] = 0 end end current[120][80] = 255 end function TIC() INPUT() UPDATE() DRAW() swapArrays() end function INPUT() mous.x, mous.y, clicking = mouse() if clicking then mous.state = math.min(mous.state+1,2) else mous.state = MOUSE_STATES.IDDLE end if mous.state == MOUSE_STATES.CLICKING and mous.x > 1 and mous.x < 239 and mous.y > 1 and mous.y < 135 then current[mous.x][mous.y] = 255 end end -- INPUT function UPDATE() -- random drop t = t+1 if t > random_drop_rate then t = 0 x = math.random(2, cols-1) y = math.random(2, rows-1) current[x][y] = 255 end -- Calculate next step of the ripple for i=2,cols-1 do for j = 2,rows-1 do current[i][j] = (previous[i-1][j] + previous[i+1][j] + previous[i][j+1] + previous[i][j-1])/2 -current[i][j] current[i][j] = current[i][j]*damping end end end -- UPDATE function DRAW() cls(0) for i=1,cols do for j = 1,rows do color = 0 local v = current[i][j] * 6 if math.abs(current[i][j]) > 0.5 then color = map(v,0,255,8,12) end pix(i,j,color) end end print("Click!",5,5,12) end -- DRAW function swapArrays() temp = previous previous = current current = temp end function map(n, oldMin, oldMax, newMin, newMax) percentage = (n-oldMin)/(oldMax-oldMin) return newMin+ percentage * (newMax-newMin) end