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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
|
# PythonTest Board module
import gnome
import gnome.canvas
import gcompris
import gcompris.utils
import gcompris.skin
import gtk
import gtk.gdk
class Gcompris_watercycle:
"""The Cycle Water activity"""
def __init__(self, gcomprisBoard):
self.gcomprisBoard = gcomprisBoard
self.canvasitems = {}
print("Gcompris_watercycle __init__.")
def start(self):
self.gcomprisBoard.level=1
self.gcomprisBoard.maxlevel=1
self.gcomprisBoard.sublevel=1
self.gcomprisBoard.number_of_sublevel=1
# The basic tick for object moves
self.timerinc = 50
# Need to manage the timers to quit properly
self.boat_timer = 0
self.sun_timer = 0
self.vapor_timer = 0
self.cloud_timer = 0
gcompris.bar_set(0)
gcompris.set_background(self.gcomprisBoard.canvas.root(),
"watercycle/background.png")
gcompris.bar_set_level(self.gcomprisBoard)
# The Sun
self.canvasitems[1] = self.gcomprisBoard.canvas.root().add(
gnome.canvas.CanvasPixbuf,
pixbuf = gcompris.utils.load_pixmap("watercycle/sun.png"),
x=10.0,
y=70.0
)
self.canvasitems[1].connect("event", self.sun_item_event)
self.sun_direction = -1
self.sun_on = 0
# The sun mask object
self.canvasitems[2] = self.gcomprisBoard.canvas.root().add(
gnome.canvas.CanvasRect,
x1=10.0,
y1=89.0,
x2=90.0,
y2=155.0,
fill_color_rgba=0x0099FFFF,
width_units=0.0
)
# The tuxboat
self.canvasitems[3] = self.gcomprisBoard.canvas.root().add(
gnome.canvas.CanvasPixbuf,
pixbuf = gcompris.utils.load_pixmap("gcompris/misc/tuxboat.png"),
x=10.0,
y=470.0
)
# The rain
self.canvasitems[5] = self.gcomprisBoard.canvas.root().add(
gnome.canvas.CanvasPixbuf,
pixbuf = gcompris.utils.load_pixmap("watercycle/rain.png"),
x=40.0,
y=40.0
)
self.canvasitems[5].hide()
self.rain_on = 0
# The cloud
self.canvasitems[4] = self.gcomprisBoard.canvas.root().add(
gnome.canvas.CanvasPixbuf,
pixbuf = gcompris.utils.load_pixmap("gcompris/misc/cloud.png"),
x=10.0,
y=10.0
)
self.canvasitems[4].hide()
self.canvasitems[4].connect("event", self.cloud_item_event)
self.cloud_on = 0
# The vapor
self.canvasitems[6] = self.gcomprisBoard.canvas.root().add(
gnome.canvas.CanvasPixbuf,
pixbuf = gcompris.utils.load_pixmap("watercycle/vapor.png"),
x=35.0,
y=150.0
)
self.canvasitems[6].hide()
# Ready GO
self.move_boat()
print("Gcompris_watercycle start.")
def end(self):
# Remove all the timer first
if self.boat_timer :
gtk.timeout_remove(self.boat_timer)
if self.sun_timer :
gtk.timeout_remove(self.sun_timer)
if self.vapor_timer :
gtk.timeout_remove(self.vapor_timer)
if self.cloud_timer :
gtk.timeout_remove(self.cloud_timer)
# Remove the canvas item we added during this plugin
for item in self.canvasitems.values():
item.destroy()
print("Gcompris_watercycle end.")
def ok(self):
print("Gcompris_watercycle ok.")
def repeat(self):
print("Gcompris_watercycle repeat.")
def config(self):
print("Gcompris_watercycle config.")
def key_press(self, keyval):
return
def move_boat(self):
self.canvasitems[3].move(1, 0)
if( self.canvasitems[3].get_bounds()[2] < 790 ) :
self.boat_timer = gtk.timeout_add(self.timerinc, self.move_boat)
def move_cloud(self):
if(self.cloud_on):
self.canvasitems[4].show()
else:
self.canvasitems[4].hide()
if(self.rain_on):
self.canvasitems[5].show()
else:
self.canvasitems[5].hide()
self.canvasitems[4].move(1, 0);
self.canvasitems[5].move(1, 0);
if( self.canvasitems[4].get_bounds()[0] > 800 ) :
self.canvasitems[4].move(-800, 0);
self.canvasitems[5].move(-800, 0);
self.cloud_on = 0
self.show_rain = 0
self.canvasitems[4].hide()
self.canvasitems[5].hide()
else:
self.cloud_timer = gtk.timeout_add(self.timerinc, self.move_cloud)
def move_vapor(self):
if(self.vapor_on):
self.canvasitems[6].show()
else:
self.canvasitems[6].hide()
self.canvasitems[6].move(0, -1);
if( self.canvasitems[6].get_bounds()[1] < 20 ) :
self.canvasitems[6].move(0, +100);
self.vapor_timer = gtk.timeout_add(self.timerinc, self.move_vapor)
def move_sun(self):
self.canvasitems[1].move(0, self.sun_direction);
if( (self.canvasitems[1].get_bounds()[1] > 0 and
self.canvasitems[1].get_bounds()[1] < 70 ) ) :
self.sun_timer = gtk.timeout_add(self.timerinc, self.move_sun)
else :
if(self.sun_direction < 0) :
# Stop the sun
self.sun_timer = gtk.timeout_add(15000, self.move_sun)
# Start the vapor
self.vapor_timer = gtk.timeout_add(5000 , self.move_vapor)
self.vapor_on = 1
# Start the cloud
if(not self.cloud_on):
self.cloud_timer = gtk.timeout_add(10000, self.move_cloud)
self.cloud_on = 1
else :
self.vapor_on = 0
self.sun_on = 0
self.sun_direction = self.sun_direction * -1
def pause(self, pause):
print("Gcompris_watercycle pause. %i" % pause)
def set_level(self, level):
print("Gcompris_watercycle set level. %i" % level)
def sun_item_event(self, widget, event=None):
if event.type == gtk.gdk.BUTTON_PRESS:
if event.button == 1:
if not self.sun_on :
self.sun_timer = gtk.timeout_add(self.timerinc, self.move_sun)
self.sun_on = 1
return gtk.TRUE
return gtk.FALSE
def cloud_item_event(self, widget, event=None):
if event.type == gtk.gdk.BUTTON_PRESS:
if event.button == 1:
self.rain_on = 1
return gtk.TRUE
return gtk.FALSE
|