From 26c98ba56e72beaf8a99eafbedd2b0c64ac13954 Mon Sep 17 00:00:00 2001 From: Ian C Date: Sat, 27 May 2006 23:24:02 +0000 Subject: Updates --- particle.bmx | 652 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 334 insertions(+), 318 deletions(-) (limited to 'particle.bmx') diff --git a/particle.bmx b/particle.bmx index 40a9c24..6e8d469 100644 --- a/particle.bmx +++ b/particle.bmx @@ -1,318 +1,334 @@ -' 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 dx0 + 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