Whitemambaa

Splash

Jul 2nd, 2013
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.52 KB | None | 0 0
  1. --By xXxMoNkEyMaNxXx (Whitemambaa)
  2. local arg={...}
  3.  
  4. local next=next
  5. local time=os.time
  6. local tick=os.clock
  7.  
  8. local sqrt=math.sqrt
  9. local ceil=math.ceil
  10.  
  11. local match=string.match
  12.  
  13. local remove=table.remove
  14.  
  15. local pull=os.pullEvent
  16. local setAlarm=os.setAlarm
  17.  
  18. local paint=term.write
  19. local setBGC=term.setBackgroundColour
  20. local setPos=term.setCursorPos
  21.  
  22.  
  23. local speed=8
  24. local length=1.5
  25. local palette={colours.black,colours.grey,colours.lightGrey,colours.white}
  26.  
  27. local size={term.getSize()}
  28. local maxAge=(sqrt(size[1]*size[1]+size[2]*size[2])+length)/speed
  29. local splashes={}
  30.  
  31. local function draw(t)
  32.     local radii={}
  33.     for i=1,#splashes do
  34.         radii[i]=(t-splashes[i].t)*speed
  35.     end
  36.     for x=1,size[1] do
  37.         for y=1,size[2] do
  38.             local prod=1
  39.             for i=1,#splashes do
  40.                 local s=splashes[i]
  41.                 local d=(radii[i]-sqrt((s[1]-x)^2+(s[2]-y)^2))/length
  42.                 local dsq=d*d
  43.                 if dsq<1 then
  44.                     prod=prod*(1-sqrt(1-dsq))
  45.                 end
  46.             end
  47.             setPos(x,y)
  48.             if prod<1 then
  49.                 setBGC(palette[ceil(#palette*(1-prod))])
  50.             else
  51.                 setBGC(32768)
  52.             end
  53.             paint' '
  54.         end
  55.     end
  56. end
  57.  
  58. local enabled=true
  59. while enabled do
  60.     local event={pull()}
  61.     local now=tick()
  62.     for i=#splashes,1,-1 do
  63.         if now-splashes[i].t>=maxAge then
  64.             remove(splashes,i)
  65.         end
  66.     end
  67.     if event[1]=="mouse_click" then
  68.         if #splashes==0 then
  69.             setAlarm((time()+0.001)%24)
  70.         end
  71.         splashes[#splashes+1]={event[3],event[4],t=now}
  72.     end
  73.     if #splashes>0 then
  74.         draw(now)
  75.         if event[1]=="alarm" then
  76.             setAlarm((time()+0.001)%24)
  77.         end
  78.     end
  79. end
Advertisement
Add Comment
Please, Sign In to add comment