Code archives/3D Graphics - Misc/Particle Systems

This code has been declared by its author to be Public Domain code.

Download source code

Particle Systems by Rob2002
Download the full versions here:

Version Two

Or if the files are unavailable, use the code below:
; Particle Test No.1 : using spray
; by Rob Cummings (rob@redflame.net)

; If there is sufficient demand I'll make more
; Each spawn returns the entity so you're able To texture And create a particle in one call!

Include "partyinclude.bb"

Graphics3D 640,480,16,2
camera=CreateCamera()
light=CreateLight()
MoveEntity camera,0,0,-100

;SYNTAX: spawn(x,y,z,size,scalefactor,life#,fadebias#,vx#,vy#,vz#,roll#,gravity#)

fire=LoadTexture("fire.png",2)
smoke=LoadTexture("smoke.jpg",2)


While Not KeyHit(1)
	
	;controlled spawn rate
	If time<0
		time=2
		EntityTexture spawn(-60,-60,0,1,0.1,120,0.02,Rnd(-0.1),Rnd(0.5)+0.5,Rnd(-1,1),Rnd(-5,5),0),smoke
		EntityTexture spawn(0,-60,0,2+Rnd(2),0,100,0.01,Rnd(-.2,.2),Rnd(1)+1,Rnd(-.2,.2),Rnd(-10,10),-.025),fire
		EntityTexture spawn(60,-60,0,Rnd(2)+0.5,-0.01,100,0.02,Cos(MilliSecs()/8),Rnd(1)+1,Sin(MilliSecs()/8),Rnd(-10,10),-.025),smoke
		EntityTexture spawn(-80,60,0,Rnd(1)+2,0.3,80,0.01,Rnd(1)+2,Sin(MilliSecs()/16)-1,Sin(MilliSecs()/8),-15,.05),fire
	Else
		time=time-1
	EndIf
	
	
	updateparty
	UpdateWorld
	RenderWorld
	Text 0,0,"numparticles:"+pno
	Flip 
	
Wend
End

;And HERE is the include file:

; PARTICLE PARTY INCLUDE
;
Global pno

Type party
	Field x#,y#,z#,ax#,ay#,az,vx#,vy#,vz#,gravity#,roll#,vroll#
	Field life#,delaytime#,fadebias#,scalefactor#,scale#,blendmode
	Field ent
End Type

Function spawn(x#,y#,z#,scale#,scalefactor#,life#,fadebias#,vx#,vy#,vz#,vroll#,gravity#)
	p.party=New party
	p\ent=CreateSprite()
	EntityBlend p\ent,2
	p\life=life
	p\vx=vx
	p\vy=vy
	p\gravity=gravity
	p\fadebias=fadebias
	p\vroll=vroll
	p\scalefactor=scalefactor
	p\scale=scale
	p\blendmode=blendmode
	PositionEntity p\ent,x,y,z
	ScaleSprite p\ent,scale,scale
	Return p\ent
End Function

Function updateparty()
	pno=0
	For p.party=Each party
		If p\life=0
			FreeEntity p\ent
			Delete p
		Else
			pno=pno+1
			p\life=p\life-1
			p\vy=p\vy+p\gravity
			p\roll=p\roll+p\vroll
			p\scale=p\scale+p\scalefactor
			If p\scale<0 Then p\scale=0

			ScaleSprite p\ent,p\scale,p\scale
			EntityAlpha p\ent,p\life*p\fadebias
			RotateSprite p\ent,p\roll
			MoveEntity p\ent,p\vx,p\vy,p\vz

		EndIf
	Next
End Function

Comments

None.

Code Archives Forum