' Missile Lock ' ' Copyright (C) 2006 Ian Cowburn (ianc@noddybox.co.uk) ' ' This program is free software; you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation; either version 2 of the License, or ' (at your option) any later version. ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY; without even the implied warranty of ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ' GNU General Public License for more details. ' ' You should have received a copy of the GNU General Public License ' along with this program; if not, write to the Free Software ' Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ' ' ------------------------------------------------------------------------- ' ' $Id$ ' Strict Import "global.bmx" Type TParticle Field life:Int Field i:TImage Field x:Double Field y:Double Field a:Double Field dx:Double Field dy:Double Field ai:Double Field s:Double Field si:Double Field r:Int Field g:Int Field b:Int Function Image:TParticle(i:TImage, x:Double, y:Double, dx:Double, dy:Double, r:Int, g:Int, b:Int) Local o:TParticle=New TParticle o.life=120 o.x=x o.y=y o.a=1 o.ai=-0.01 o.dx=dx o.dy=dy o.s=1 o.si=0 o.i=i o.r=r o.g=g o.b=b Return o End Function Function ScaleImage:TParticle(i:TImage, x:Double, y:Double, dx:Double, dy:Double, si:Double, r:Int, g:Int, b:Int) Local o:TParticle=New TParticle o.life=120 o.x=x o.y=y o.a=1 o.ai=-0.01 o.dx=dx o.dy=dy o.s=1 o.si=si o.i=i o.r=r o.g=g o.b=b Return o End Function Method Update:Int() SetAlpha(a) SetScale(s,s) SetColor(r,g,b) DrawImage(i,x,y) x:+dx y:+dy life:-1 a:+ai s:+si Return life>0 End Method End Type Type Particles Global plist:TList Function Init() plist=CreateList() End Function Function Clear() plist.Clear() End Function Function AddImage(i:TImage, x:Double, y:Double, dx:Double=0, dy:Double=0) plist.AddLast(TParticle.Image(i,x,y,dx,dy,255,255,255)) End Function Function AddScaledImage(i:TImage, x:Double, y:Double, si:Double=0.1, dx:Double=0, dy:Double=0) plist.AddLast(TParticle.ScaleImage(i,x,y,dx,dy,si,255,255,255)) End Function Function AddExplosion(x:Double, y:Double) For Local f:Int=0 To 20 plist.AddLast(TParticle.Image(GFX.star,x,y,Rnd(-2,2),Rnd(-2,2),Rand(100,255),Rand(100,255),Rand(100,255))) Next End Function Function AddBigExplosion(x:Double, y:Double) plist.AddLast(TParticle.ScaleImage(GFX.exhaust,x,y,0,0,0.3,255,0,0)) For Local f:Int=0 To 50 plist.AddLast(TParticle.Image(GFX.star,x,y,Rnd(-2,2),Rnd(-2,2),Rand(100,255),Rand(100,255),Rand(100,255))) Next End Function Function Draw() Local l:TEasyLink=TEasyLink.Create(plist) While l.Value() Local p:TParticle=TParticle(l.Value()) If (p.Update()) l.MoveNext() Else l.Remove() EndIf Wend SetAlpha(1) SetScale(1,1) SetColor(255,255,255) End Function End Type