' 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=-1, g:Int=-1, b:Int=-1) If r=-1 Then r=Rand(128,255) If g=-1 Then g=Rand(128,255) If b=-1 Then b=Rand(128,255) 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 Type TExplosionBase Field p:TPixmap[4] Function Create:TExplosionBase(base:TImage) Local o:TExplosionBase=New TExplosionBase o.p=New TPixmap[4] o.p[0]=GrabFrom(base,0,0) o.p[1]=GrabFrom(base,16,0) o.p[2]=GrabFrom(base,0,16) o.p[3]=GrabFrom(base,16,16) Return o End Function Function GrabFrom:TPixmap(i:TImage,x:Int, y:Int) Local p:TPixmap=LockImage(i) Local ret:TPixmap=p.Copy() ret=ResizePixmap(ret,16,16) For Local cx:Int=0 Until 16 For Local cy:Int=0 Until 16 ret.WritePixel(cx,cy,p.ReadPixel(x+cx,y+cy)) Next Next UnlockImage(i) Return ret End Function End Type Type TExplosion_Old Field x:Double Field y:Double Field dy:Double Field dx:Double Field p:TPixmap Function Create:TExplosion(p:TPixmap,x:Double,y:Double,dx:Double,dy:Double) Local o:TExplosion=New TExplosion o.x=x o.y=y o.dx=dx o.dy=dy Return o End Function Method Update:Int() DrawPixmap(p,x,y) x:+dx y:+dy dy:+0.05 Return dx>-16 And dx-16 And dx