particles.bmx 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. '===============================================================================
  2. ' Little Shooty Test Thing
  3. ' Code & Stuff by Richard Olpin ([email protected])
  4. '===============================================================================
  5. ' particles.bmx
  6. '===============================================================================
  7. Global particles:TList=New TList
  8. Global particle_density=8
  9. Global spark1,spark2,spark3,explosion, smoke
  10. Global mult_img, score_decal
  11. Type TParticle
  12. Field link:TLink
  13. Field img
  14. Field life
  15. Field frame
  16. Field x#,y#,xs#,ys#
  17. Field scale#, ss#
  18. Field speed#,gravity#=0
  19. Field bounce=0
  20. Field ang#, rs#=0.0;
  21. Field alpha#=1.0, as#=0.0
  22. '-------------------------------------------------------------------
  23. ' Move / Draw
  24. '-------------------------------------------------------------------
  25. Method Update()
  26. ' Move ---------------------------------------------------------
  27. x:+xs ; If x<0 Or x>WIDTH Then kill()
  28. y:+ys ; If y<0 Or y>HEIGHT Then kill()
  29. ys:+gravity
  30. ang:+rs;
  31. alpha:+as
  32. scale:+ss
  33. ' Draw ---------------------------------------------------------
  34. SetScale scale, scale
  35. SetRotation ang
  36. SetAlpha alpha
  37. SetBlend ALPHABLEND
  38. DrawImage img,x,y,frame
  39. life:-1
  40. If life<=0 Then particles.remove(Self)
  41. End Method
  42. Method hit()
  43. expl=1
  44. particles.remove(Self)
  45. End Method
  46. Method kill()
  47. particles.remove(Self)
  48. End Method
  49. '-------------------------------------------------------------------
  50. Function Init()
  51. spark1=LoadImage("gfx/spark1.png", MASKEDIMAGE|FILTEREDIMAGE)
  52. spark2=LoadImage("gfx/spark2.png", MASKEDIMAGE|FILTEREDIMAGE)
  53. spark3=LoadImage("gfx/spark3.png", MASKEDIMAGE|FILTEREDIMAGE)
  54. explosion=LoadImage("gfx/expl.png", MASKEDIMAGE|FILTEREDIMAGE)
  55. smoke=LoadImage("gfx/smoke.png", MASKEDIMAGE|FILTEREDIMAGE)
  56. score_decal = LoadAnimImage("gfx/bonusdecals.png",128,64,0,5, MASKEDIMAGE|FILTEREDIMAGE)
  57. mult_img = LoadAnimImage("gfx/multdecals.png",128,64,0,10, MASKEDIMAGE|FILTEREDIMAGE)
  58. End Function
  59. '-------------------------------------------------------------------
  60. Function CreateExplosion(x,y)
  61. For Local s = 0 To particle_density
  62. TParticle.CreateSpark(explosion,x,y, 0.5 ,0 ,6 ,0.1 , Rand(50,100) )
  63. TParticle.CreateSpark(spark1, x,y, 0.5 ,0 ,7 ,0.2 , Rand(30,80) )
  64. TParticle.CreateSpark(spark2, x,y, 0.25,0 ,10 ,0.3, Rand(50,100))
  65. Next
  66. TParticle.Createspark(explosion, x,y,0.5,0.1,0,0, Rand(50,100))
  67. EndFunction
  68. Function PlayerExplosion(x,y)
  69. For Local s = 0 To particle_density*2
  70. TParticle.CreateSpark(explosion,x,y, 0.5 ,0 ,10 ,0.1 , Rand(150,200) )
  71. TParticle.CreateSpark(spark1, x,y, 0.5 ,0 ,12 ,0.2 , Rand(130,180) )
  72. TParticle.CreateSpark(spark2, x,y, 0.25,0 ,14 ,0.3, Rand(150,200))
  73. Next
  74. For Local i=1 To 6
  75. TParticle.Createspark(explosion, x+Rand(-64,64),y+Rand(-64,64),Rnd(0.25,1),0.2,Rand(4),0, Rand(150,300))
  76. Next
  77. EndFunction
  78. Function CreateSpark:Tparticle(img,x#,y#,sc#,si#,sp#,gr#, lf)
  79. Local particle:Tparticle=New Tparticle
  80. particle.img=img
  81. particle.x=x
  82. particle.y=y
  83. particle.alpha=1
  84. particle.as=-0.03
  85. particle.scale=sc
  86. particle.ss=si
  87. particle.speed=sp
  88. particle.ang = Rnd(360)
  89. particle.xs = Sin(particle.ang)*sp
  90. particle.ys = Cos(particle.ang)*sp
  91. particle.rs#=Rnd(0,2)
  92. particle.life=lf
  93. particle.gravity = gr
  94. particles.AddLast particle
  95. End Function
  96. Function ShowBonus:Tparticle( x#,y#,frame )
  97. Local particle:Tparticle=New Tparticle
  98. particle.img=score_decal
  99. particle.frame=frame
  100. particle.x=x
  101. particle.y=y
  102. particle.alpha=1
  103. particle.as=-0.02
  104. particle.scale=0.5
  105. particle.ss=0.01
  106. particle.ang = 0
  107. particle.xs = 0
  108. particle.ys = -1
  109. particle.rs#=0
  110. particle.life=60
  111. particle.gravity=0
  112. particles.AddLast particle
  113. End Function
  114. Function ShowMult:Tparticle( x#,y#,frame )
  115. Local particle:Tparticle=New Tparticle
  116. particle.img=mult_img
  117. particle.frame=frame
  118. particle.x=x
  119. particle.y=y
  120. particle.alpha=1
  121. particle.as=-0.02
  122. particle.scale=0.1
  123. particle.ss=0.2
  124. particle.ang = 0
  125. particle.xs = Rnd(-4,4)
  126. particle.ys = Rnd(-4,4)
  127. particle.rs#=Rnd(6)
  128. particle.life=100
  129. particle.gravity=0
  130. particles.AddLast particle
  131. End Function
  132. End Type
  133. '----------------------------------------------------------------------
  134. ' End of file
  135. '---------------------------------------------------------------------