' 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 noddybox.algorithm Import "global.bmx" Import "gametypes.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 Function Image:TParticle(i:TImage, x:Int, y:Int) Local o:TParticle=New TParticle o.life=120 o.x=x o.y=y o.a=1 o.ai=-0.01 o.dx=0 o.dy=0 o.s=1 o.si=0 o.i=i Return o End Function Function ScaleImage:TParticle(i:TImage, x:Int, y:Int,si:Double) Local o:TParticle=New TParticle o.life=120 o.x=x o.y=y o.a=1 o.ai=-0.01 o.dx=0 o.dy=0 o.s=1 o.si=si o.i=i Return o End Function Method Update:Int() Local p:TAlgoPointD=DoRotateD(x,y,3599-GameState.ang) p.x:-GameState.x p.y:+GameState.y SetAlpha(a) SetScale(s,s) DrawImage(i,p.x,p.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:Int, y:Int) If plist.Count()<1000 plist.AddLast(TParticle.Image(i,x,y)) EndIf End Function Function AddScaledImage(i:TImage, x:Int, y:Int, si:Double=0.1) If plist.Count()<1000 plist.AddLast(TParticle.ScaleImage(i,x,y,si)) EndIf End Function Function Draw() Local r:Double=GetRotation() SetRotation(-GameState.ang/10.0) SetColor(255,255,255) 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) SetRotation(r) End Function End Type