1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
' 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
|