-
Notifications
You must be signed in to change notification settings - Fork 0
/
popup.lua
122 lines (92 loc) · 3.76 KB
/
popup.lua
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
116
117
118
119
120
121
122
local font = require("font")
local popup = {}
popup.__index = popup
function popup:create(background,width,height,sound,speed,wait,uiGroup,message,charsForLine)
local pop = {} -- our new object
setmetatable(pop,popup) -- make popup handle lookup
pop.fontTimerOptions =
{
popped = false,
active = false,
popup,
tm = nil,
idx = 0,
speed = 150,
wait = 300,
sound,
fontChars = {},
len,
onEnter,
onExit,
}
pop.fontTimerOptions.speed = speed
pop.fontTimerOptions.wait = wait
pop.fontTimerOptions.popup = display.newImageRect(uiGroup,background,width,height)
pop.fontTimerOptions.popup.isVisible = false
pop.fontTimerOptions.sound = audio.loadSound(sound)
pop.fontTimerOptions.len = message:len()
pop.fontTimerOptions.fontChars = font:showStringMultiline(message,uiGroup,charsForLine,display.contentCenterX,display.contentCenterY - pop.fontTimerOptions.popup.height / 2 + 60,40);
for cI = 1,#pop.fontTimerOptions.fontChars do
pop.fontTimerOptions.fontChars[cI].isVisible = false
end
return pop
end
function popup:show(onEnter,onExit,effects)
if(self.fontTimerOptions.popped == false)
then
self.fontTimerOptions.onEnter = onEnter
self.fontTimerOptions.onExit = onExit
self.fontTimerOptions.popup.x = (display.contentWidth - display.viewableContentWidth) / 2 + display.actualContentWidth / 2
self.fontTimerOptions.popup.y = display.actualContentHeight / 2
self.fontTimerOptions.popup.alpha = 0
self.fontTimerOptions.popup.isVisible = true
self.fontTimerOptions.active = true
self.fontTimerOptions.popped = true
transition.fadeIn( self.fontTimerOptions.popup , { time=effects.fadeIn } )
local showStringDelayed = function()
if(self.fontTimerOptions.active == false)
then
return
end
if (self.fontTimerOptions.idx == self.fontTimerOptions.len) then
self.fontTimerOptions.idx = 0
self.fontTimerOptions.active = false
-- fontTimerOptions.tm = 0
timer.cancel(self.fontTimerOptions.tm)
local remover = function()
for cI = 1,#self.fontTimerOptions.fontChars do
display.remove(self.fontTimerOptions.fontChars[cI])
--todo: add recycle
end
self.fontTimerOptions.fontChars = {}
self.fontTimerOptions.len = 0
transition.fadeOut( self.fontTimerOptions.popup , { time=effects.fadeOut } )
local removePopup = function()
display.remove(self.fontTimerOptions.popup)
timer.cancel(self.fontTimerOptions.tm)
self.fontTimerOptions.popped = false
self.fontTimerOptions.onExit()
end
timer.performWithDelay(effects.fadeOut,removePopup)
end
self.fontTimerOptions.tm = timer.performWithDelay(self.fontTimerOptions.wait,remover)
return
end
self.fontTimerOptions.fontChars[self.fontTimerOptions.idx + 1].isVisible = true
self.fontTimerOptions.soundHandle = audio.play(self.fontTimerOptions.sound,{duration = self.fontTimerOptions.speed})
self.fontTimerOptions.idx = self.fontTimerOptions.idx + 1
end
self.fontTimerOptions.onEnter()
self.fontTimerOptions.tm = timer.performWithDelay(self.fontTimerOptions.speed,showStringDelayed,-1)
end
end
function popup:destroy()
if(self.fontTimerOptions.sound~=nil and self.fontTimerOptions.soundHandle~=nil)
then
audio.stop(self.fontTimerOptions.soundHandle)
audio.dispose( self.fontTimerOptions.sound)
self.fontTimerOptions.soundHandle = nil;
self.fontTimerOptions.sound = nil;
end
end
return popup