' Hardwire ' ' Copyright 2005 Ian Cowburn ' ' $Id$ ' Strict Import "types.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 Dust:TParticle(x:Int, y:Int) Local o:TParticle=New TParticle o.life=50 o.x=x o.y=y o.a=1 o.ai=-0.05 o.dx=0 o.dy=0 o.s=1 o.si=0.1 o.i=GameGFX.dust Return o End Function 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.1 o.s=1 o.si=0 o.i=i Return o End Function Method Update:Int() SetAlpha(a) SetScale(s,s) 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 AddDust(x:Int, y:Int) plist.AddLast(TParticle.Dust(x,y)) End Function Function AddImage(i:TImage, x:Int, y:Int) plist.AddLast(TParticle.Image(i,x,y)) End Function Function Draw() 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) End Function End Type Type TTextParticle Field txt:String 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 Field fnt:TBitmapFont Function Create:TTextParticle(fnt:TBitmapFont, txt:String, x:Double, y:Double, dx:Double, dy:Double, r:Int, g:Int, b:Int, a:Double, ai:Double, s:Double, si:Double) Local o:TTextParticle=New TTextParticle If x=-1 x=GraphicsWidth()/2 EndIf o.x=x o.y=y o.a=a o.ai=ai o.dx=dx o.dy=dy o.s=s o.si=si o.txt=txt o.r=r o.g=g o.b=b o.fnt=fnt Return o End Function Method Update:Int() SetAlpha(a) SetScale(s,s) fnt.CentreOn(txt,x,y,r,g,b) x:+dx y:+dy a:+ai s:+si Return a>0 End Method End Type Type TextParticles Global plist:TList Global sy:Int Const sx:Int=646 Function Init() plist=CreateList() sy=300 End Function Function Clear() plist.Clear() sy=300 End Function Function Big(txt:String, r:Int, g:Int, b:Int) plist.AddLast(TTextParticle.Create(GameGFX.font,txt,-1,GraphicsHeight()-GameGFX.font.MaxHeight()/2,0,0,r,g,b,1,-0.01,1,0)) plist.AddLast(TTextParticle.Create(GameGFX.font,txt,-1,GraphicsHeight()-GameGFX.font.MaxHeight()/2,0,0,r,g,b,1,-0.02,1,0.1)) End Function Function Score(txt:String) Local r:Int=Rand(128,255) Local g:Int=Rand(128,255) Local b:Int=Rand(128,255) plist.AddLast(TTextParticle.Create(GameGFX.font,txt,sx,sy,0,0,r,g,b,1,-0.01,1,0)) plist.AddLast(TTextParticle.Create(GameGFX.font,txt,sx,sy,0,0,r,g,b,1,-0.02,1,0.1)) sy:+GameGFX.font.MaxHeight() If sy>GraphicsHeight()-20 sy=300 EndIf End Function Function Draw() Local l:TEasyLink=TEasyLink.Create(plist) While l.Value() Local p:TTextParticle=TTextParticle(l.Value()) If (p.Update()) l.MoveNext() Else l.Remove() EndIf Wend SetColor(255,255,255) SetAlpha(1) SetScale(1,1) End Function End Type