rem Particles Functionality

rem Standard Setup Code for all examples
sync on : sync rate 0 : color backdrop rgb(0,128,0)
set text font "arial" : set text size 16
set text to bold : set text transparent

rem Load images
ImageNumberA=1 : load image "snow.bmp",ImageNumberA
ImageNumberB=2 : load image "fire.bmp",ImageNumberB
ImageNumberC=3 : load image "spec.bmp",ImageNumberC

rem Make special particle effects
ParticleNumberA=1 : make snow particles ParticleNumberA, ImageNumberA, 500,-5,5,5, 10,10,10
ParticleNumberB=2 : make fire particles ParticleNumberB, ImageNumberB, 500, 5,5,5, 10,10,10

rem Make textured particle effects
ParticleNumberC=3
make particles ParticleNumberC, ImageNumberC, 10, 10.0
position particles ParticleNumberC, -3, 0, 10
gosub _usingvectors

rem Make colored particle effects in the air
ParticleNumberD=4
make particles ParticleNumberD, 0, 10, 10.0
position particles ParticleNumberD, 3, 2, 10
set particle emissions ParticleNumberD, 1
set particle speed ParticleNumberD, 0.005
set particle velocity ParticleNumberD, 10

rem Setup camera
position camera 0,1,0
point camera 0,1,400

rem Main loop
desc$="Particle Effects"
while mouseclick()=0

rem Camera control to view particles
if upkey()=1 then move camera 0.1
if downkey()=1 then move camera -0.1
if leftkey()=1 then turn camera left 1
if rightkey()=1 then turn camera right 1

rem Spark across floor using mouse
rot#=wrapvalue(rot#+1.0)
color particles ParticleNumberC, rnd(255), rnd(255), rnd(255)
position particles ParticleNumberC, (mousex()-320)/50.0, 0, 10
rotate particles ParticleNumberC, 0, 0, rot#

rem Trigger random particle commands
if rnd(50)=1 then show particles ParticleNumberD
if rnd(50)=1 then hide particles ParticleNumberD
if rnd(5)=1 then set particle emissions ParticleNumberC, 2+rnd(8)
if rnd(5)=1 then set particle speed ParticleNumberC, (2+rnd(1))/100.0
if rnd(5)=1 then set particle velocity ParticleNumberC, 4+rnd(2)
if rnd(5)=1 then set particle gravity ParticleNumberC, rnd(5)
if rnd(5)=1 then set particle life ParticleNumberC, 50+rnd(50)
if rnd(5)=1 then set particle floor ParticleNumberC, rnd(1)
if rnd(5)=1 then set particle chaos ParticleNumberC, rnd(10)/10.0
if rnd(5)=1 then color particles ParticleNumberD, rnd(255), rnd(255), 0

rem Expressions
set cursor 0,0
print "PARTICLES DATA"
print "exist:";particles exist(ParticleNumberC)
if particles exist(ParticleNumberC)=1
 print "x:";particles position x(ParticleNumberC)
 print "y:";particles position y(ParticleNumberC)
 print "z:";particles position z(ParticleNumberC)
endif

rem Show Framerate
text 20,screen height()-40,desc$
fps$="DBPro Fps: "+str$(screen fps())
text screen width()-20-text width(fps$),screen height()-40,fps$

rem Update screen
sync

rem End loop
endwhile

rem Delete particles
delete particles ParticleNumberA
delete particles ParticleNumberB
delete particles ParticleNumberC
delete particles ParticleNumberD

rem End program
end

_usingvectors:

VectorNumber=1 : ParticlesNumber=3
result==make vector3(VectorNumber)
set vector3 VectorNumber, -3, 0, 10
position particles ParticlesNumber, VectorNumber
set vector3 VectorNumber, 0, 0, 45
rotate particles ParticlesNumber, VectorNumber
set vector3 to particles position VectorNumber, ParticlesNumber
set vector3 to particles rotation VectorNumber, ParticlesNumber
rot#=z vector3(VectorNumber)
result=delete vector3(VectorNumber)

return