Hi,
I've written this (see below) and I'm sure it could be written better. In particular I think there are better ways of detroying extended classes (some way to do it from the Base class that cleas up all the counters?). Thanks to anyone who can help with this.
'Set Up Graphics Window
Const G_WIDTH = 800
Const G_HEIGHT = 600
Graphics G_WIDTH,G_HEIGHT,16,85
' Define a type for a visual
Type Visual
' Maintain List
Global VCount
Global VisualItemList:TList
'Global angRotate#
Field x#,y#
Field alpha#
Field rotation
Field gfxHandle
Function Create:Visual(tx,ty)
v:Visual = New Visual
v.SetXY(tx,ty)
End Function
Method SetXY:Visual(tx,ty)
x = tx
y = ty
End Method
Function UpdateAll:Visual ()
If VisualItemList = Null Then Return
For v:Visual= EachIn VisualItemList
v.Update
v.Draw
Next
End Function
Method New ()
If VisualItemList = Null Then VisualItemList = New TList
VisualItemList.AddLast Self
VCount = VCount + 1
alpha# = 1
End Method
Method Destroy ()
VisualItemList.Remove Self
VCount = VCount - 1
End Method
Method Update()
DrawText "UPDATE BASE", MouseX(), MouseY() + 40
End Method
Method Draw()
SetBlend ALPHABLEND
SetAlpha alpha#
'angRotate = angRotate + 0.1
'SetTransform angRotate,1,2
DrawOval x,y,10,10
End Method
End Type
Type Particle Extends Visual
Global PCount
Field dx#,dy#
Function Create:Particle(tx,ty)
p:Particle = New Particle
p.SetXY(tx,ty)
p.SetParticle()
End Function
Method SetParticle()
dx# = (Rndfloat#() - 0.5) * 5
dy# = (Rndfloat#() - 0.5) * 5
PCount = PCount + 1
End method
Method Update()
x = x + dx#
y = y + dy#
UpdateLife()
DrawText "UPDATE PARTICLE", MouseX(), MouseY() + 60
Super.Update()
End Method
Method UpdateLife()
If alpha# <= 0
PCount = PCount - 1
Super.Destroy
endif
alpha# = alpha# - 0.005
End Method
End Type
Type BounceParticle Extends Particle
Global BCount
Function Create:Particle(tx,ty)
b:BounceParticle = New BounceParticle
b.SetXY(tx,ty)
b.SetParticle()
BCount = BCount + 1
End Function
Method Update()
If x + dx# > G_WIDTH Or x + dx# < 0
dx# = -dx#
endif
If y + dy# > G_HEIGHT Or y + dy# < 0
dy# = -dy#
EndIf
alpha# = alpha# - 0.005
If alpha# <= 0
BCount = BCount - 1
EndIf
DrawText "UPDATE BOUNCE", MouseX(), MouseY() + 80
Super.Update()
End Method
End Type
While KeyDown(KEY_ESCAPE) = False
Cls
SetColor 255, 255, 255
DrawText "X", MouseX(), MouseY()
If MouseDown(1)
If Rand(0,1) = 0
BounceParticle.Create(MouseX(),MouseY())
else
Particle.Create(MouseX(),MouseY())
endif
EndIf
Visual.UpdateAll()
SetBlend SOLIDBLEND
SetAlpha 1
DrawText "Visuals : " + Visual.VCount , 20, 20
DrawText "Particles : " + Particle.PCount , 20, 40
DrawText "Bouncers : " + BounceParticle.BCount , 20, 60
FlushMem
Flip
Wend
End
|