I wrote this before I found that I needed a sprite explosion routine. This one creates an explosion using pixels...
LOCAL e AS TExplosion
e.Initialise()
SYSTEMPOINTER TRUE
WHILE TRUE
SMOOTHSHADING FALSE
e.Display()
ALPHAMODE -1.0
PRINT "Number of 4x4 pixel rectangles : "+BOUNDS(e.explosionList[],0),0,0,TRUE
SHOWSCREEN
e.Process(0.1)
MOUSESTATE mx%,my%,b1%,b2%
IF b1%
e.Add(-1,mx%,my%,0.1,5.5,16+RND(64))
ENDIF
WEND
TYPE tExplosionData
spriteID%
x
y
moveAngle
moveSpeed
turnAngle
turnSpeed
width%
height%
fadeSpeed
alpha
ENDTYPE
TYPE TExplosion
explosionList[] AS tExplosionData
FUNCTION Initialise%:
self.Destroy()
RETURN TRUE
ENDFUNCTION
FUNCTION Destroy%:
DIM self.explosionList[0]
ENDFUNCTION
FUNCTION Add%:spriteID%,x,y,fadeSpeed,moveSpeed,amount%
LOCAL e AS tExplosionData
LOCAL recXSize%=5,recYSize%=5
e.spriteID%=spriteID%
IF e.spriteID%>=0
GETSPRITESIZE e.spriteID%,e.width%,e.height%
e.turnAngle=RND(359)
ELSE
e.width%=recXSize%
e.height%=recYSize%
e.turnAngle=0.0
ENDIF
e.fadeSpeed=fadeSpeed
e.alpha=-1.0
WHILE amount%>0
e.moveAngle=RND(359)
e.moveSpeed=moveSpeed+RND(moveSpeed*2)
e.x=x+RND(e.width%*2)-e.width%
e.y=y+RND(e.height%*2)-e.height%
DIMPUSH self.explosionList[],e
DEC amount%
WEND
RETURN TRUE
ENDFUNCTION
FUNCTION Display%:
LOCAL loop AS tExplosionData
FOREACH loop IN self.explosionList[]
ALPHAMODE loop.alpha
IF loop.spriteID%>=0
ROTOZOOMSPRITE loop.spriteID%,loop.x-(loop.width%/2),loop.y-(loop.height%/2),loop.turnAngle,1.0
ELSE
DRAWRECT loop.x-(loop.width%/2),loop.y-(loop.height%/2),loop.width%,loop.height%,RGB(255,0,0)
ENDIF
NEXT
ENDFUNCTION
FUNCTION Process%:speed
LOCAL loop AS tExplosionData
FOREACH loop IN self.explosionList[]
IF loop.alpha>=-0.01
DELETE loop
ELSE
INC loop.x,SIN(loop.moveAngle)*loop.moveSpeed*speed
INC loop.y,COS(loop.moveAngle)*loop.moveSpeed*speed
INC loop.alpha,speed*loop.fadeSpeed
INC loop.turnAngle,speed*loop.moveSpeed
IF loop.turnAngle>=360.0 THEN DEC loop.turnAngle,360.0
ENDIF
NEXT
ENDFUNCTION
FUNCTION IsEmpty%:
IF BOUNDS(self.explosionList[],0)=0
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ENDFUNCTION
ENDTYPE
Very interesting and usefull!!!... :nw: :nw:
Yes, really useful!
Looking for giving it a good use!
Glad you like it!
You shoulda used spritez, you reinvented the wheel ;P
[attachment deleted by admin]
Very nice effect "Fire" whit the sprite ...
Its super fast too :)
That sample in my message above will be included in the next spritez update.
I did post this one as a "help" for someone, i put it together as a sample now.
Yes, I should have used SpriteZ really :)