summaryrefslogtreecommitdiff
path: root/particle.bmx
blob: 62693819e0a0f0f7958e276db5c7aebbd87666ec (plain)
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