Advertisement
xerpi

ParticleLib alpha1 [xerpi]

Aug 1st, 2011
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.74 KB | None | 0 0
  1. particles = {pi2=math.pi*2}
  2. os.cpu(333)
  3.  
  4. function random_color()
  5.     return color.new(math.random(50,255),math.random(50,255),math.random(50,255))
  6. end
  7.  
  8.  
  9. function particles.create(n,max_rad)
  10.     local tab ={initx=ix,inity=iy,status="stop",particles={},rad=max_rad}
  11.     for i = 1, n do
  12.         table.insert(tab.particles,{status="alive",x=0,y=0,vel = math.random(15000,50000)/10000,ang = math.rad(math.random(0,360))})
  13.         tab.particles[i].img = image.create(math.random(500,1000)/100,math.random(200,500)/100,random_color())
  14.         --tab.particles[i].img:clear(color.new(255,0,0))
  15.         tab.particles[i].img:center()
  16.         tab.particles[i].img:rotate(math.deg(tab.particles[i].ang))
  17.     end
  18.     return tab
  19. end
  20.  
  21. function particles.blit(cx,cy,part,rad)
  22.     if part.status != "stop" then
  23.         for i =1, #part.particles do
  24.             if part.particles[i].status != "alive" then continue end
  25.             if part.status == "run" then
  26.                 part.particles[i].x = part.particles[i].x + math.cos(part.particles[i].ang)*part.particles[i].vel
  27.                 part.particles[i].y = part.particles[i].y + math.sin(part.particles[i].ang)*part.particles[i].vel
  28.                 local x = (part.particles[i].x+cx)
  29.                 local y = (part.particles[i].y+cy)
  30.                 if x >= 480 or x <= 0 or y >= 272 or y <= 0 or math.sqrt(part.particles[i].x*part.particles[i].x+part.particles[i].y*part.particles[i].y) >= rad then
  31.                     part.particles[i].status = "dead"      
  32.                 end
  33.             end
  34.             part.particles[i].img:blit(cx+part.particles[i].x,cy+part.particles[i].y)
  35.         end
  36.     end
  37. end
  38.  
  39.  
  40. function particles.init(part)
  41.     part.status = "run"
  42. end
  43. function particles.pause(part)
  44.     part.status = "pause"
  45. end
  46. function particles.stop(part)
  47.     part.status = "stop"
  48. end
  49. function particles.reset(part)
  50.     for i =1, #part.particles do
  51.         part.particles[i].status = "alive"
  52.         part.particles[i].x = 0
  53.         part.particles[i].y = 0
  54.     end
  55. end
  56.  
  57. my_part = particles.create(90,100)
  58.  
  59. lol=  {x=240,y=136,rad=50}
  60.  
  61.  
  62. while true do
  63. controls.read()
  64.  
  65. if math.abs(controls.analogx())>=50 then lol.x=lol.x+controls.analogx()/50 end
  66. if math.abs(controls.analogy())>=50 then lol.y=lol.y+controls.analogy()/50 end
  67. if lol.x>=480 then lol.x = 479 end
  68. if lol.y>=272 then lol.y = 271 end
  69. if lol.x<=0 then lol.x = 0 end
  70. if lol.y<=0 then lol.y = 0 end
  71.  
  72. draw.circle(lol.x,lol.y,lol.rad,color.new(0,255,0))
  73. draw.line(lol.x-5,lol.y,lol.x+5,lol.y,color.new(0,255,0))
  74. draw.line(lol.x,lol.y-5,lol.x,lol.y+5,color.new(0,255,0))
  75.  
  76. if controls.press("cross") then
  77.     particles.reset(my_part)
  78.     particles.init(my_part)
  79. end
  80. if controls.press("square") then
  81.     particles.pause(my_part)
  82. end
  83. if controls.r() then lol.rad=lol.rad+1 end
  84. if controls.l() then lol.rad=lol.rad-1 end
  85.  
  86. particles.blit(lol.x,lol.y,my_part,lol.rad)
  87.  
  88. screen.print(430,3,"@"..screen.fps())
  89. if controls.select() then a() end
  90. screen.flip()
  91. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement