-
Notifications
You must be signed in to change notification settings - Fork 8
/
Example - texteffect stack class erase.monkey2
115 lines (101 loc) · 2.34 KB
/
Example - texteffect stack class erase.monkey2
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#Import "<std>"
#Import "<mojo>"
Using std..
Using mojo..
Class texteffect
Field x:Int,y:Int
Field l:Int
Field text:String
Field type:String="begin"
Field cnt:Int
Field time:Float
Field delay:Float=60
Field timeend:Int=60
Field deleteme:Bool=False
Method New(text:String,x:Int,y:Int)
Self.x = x/2
Self.y = y/2
Self.text = text
l = text.Length
End Method
Method update()
time+=1
If time>delay Then
time=0
If type = "begin"
cnt+=1
while text[cnt-1] = 32
If cnt>=l Then exit
cnt+=1
Wend
If cnt>=l Then type = "finished"
End If
End If
If type = "finished"
timeend-=1
If timeend=0 Then deleteme=true
End If
End Method
Method draw(canvas:Canvas)
canvas.PushMatrix()
canvas.Scale(2,2)
canvas.Color = New Color(0.7,0.7,0.7)
Select type
Case "begin"
For Local x2:=0 Until cnt
If x2=cnt-1 Then
Local s:Float=(0.3/delay)*time
canvas.Color = New Color(1-s,1-s,1-s)
End If
canvas.DrawText(text.Mid(x2,1),x+(x2*14),y)
Next
Case "finished"
For Local x2:Int=0 Until l
canvas.DrawText(text.Mid(x2,1),x+(x2*14),y)
Next
End Select
canvas.PopMatrix()
End Method
end Class
Global mytexteffect:Stack<texteffect> = New Stack<texteffect>
Class MyWindow Extends Window
Field t:String[] = New String[]( "This is a test.",
"Monkey 2 is great!",
"Programming",
"Coding Coding..")
Method New()
Title = "Tinted Gradient background Example.."
mytexteffect.Push(New texteffect(t[Rnd(0,t.Length)],Rnd(50,Width-100),Rnd(20,Height-40)))
End Method
Method OnRender( canvas:Canvas ) Override
App.RequestRender() ' Activate this method
'
canvas.Clear(Color.Black)
'
If Millisecs() Mod 15 = 1 Then'
If Rnd()<.5
mytexteffect.Push(New texteffect(t[Rnd(0,t.Length)],Rnd(-50,Width+50),Rnd(0,Height)))
End If
End If
'
For Local i:=Eachin mytexteffect
i.update()
i.draw(canvas)
Next
' remove from stack
Local it:= mytexteffect.All()
While Not it.AtEnd
Local item:=it.Current
If item.deleteme it.Erase() Else it.Bump()
Wend
' if key escape then quit
canvas.Color = Color.White
canvas.DrawText("Press escape to end..",0,0)
If Keyboard.KeyReleased(Key.Escape) Then App.Terminate()
End Method
End Class
Function Main()
New AppInstance
New MyWindow
App.Run()
End Function