Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/boards/python/watercycle.py
blob: afdcf92c7c1fa5130e5029759422082e6a5a58ba (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
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