comparison gamelib/scenes/bridge.py @ 255:2bd28030e8e4

Hook up parts of the bridge computer system
author Neil Muller <neil@dip.sun.ac.za>
date Fri, 27 Aug 2010 18:13:12 +0200
parents dfc89bc64fdb
children 5213ee33ec1b
comparison
equal deleted inserted replaced
254:ca0c2875ad8f 255:2bd28030e8e4
1 """Bridge where the final showdown with the AI occurs.""" 1 """Bridge where the final showdown with the AI occurs."""
2 2
3 import random 3 import random
4 4
5 from albow.music import change_playlist, get_music, PlayList 5 from albow.music import change_playlist, get_music, PlayList
6 from albow.resource import get_image
6 7
7 from gamelib.cursor import CursorSprite 8 from gamelib.cursor import CursorSprite
8 from gamelib.state import Scene, Item, Thing, Result, InteractText, \ 9 from gamelib.state import Scene, Item, Thing, Result, InteractText, \
9 InteractNoImage, InteractRectUnion, InteractAnimated 10 InteractNoImage, InteractRectUnion, InteractAnimated
10 from gamelib.statehelpers import GenericDescThing 11 from gamelib.statehelpers import GenericDescThing
205 206
206 def __init__(self, state): 207 def __init__(self, state):
207 super(ChairDetail, self).__init__(state) 208 super(ChairDetail, self).__init__(state)
208 self.add_thing(SuperconductorThing()) 209 self.add_thing(SuperconductorThing())
209 210
211
212 # classes related the computer detail
213
214
215 class LogTab(Thing):
216 """Tab for log screen"""
217
218 NAME = 'bridge_comp.screen'
219
220 INTERACTS = {
221 'log tab' : InteractNoImage(100, 53, 94, 37)
222 }
223 INITIAL = 'log tab'
224 COMPUTER = 'bridge_comp_detail'
225
226 def is_interactive(self):
227 return self.state.detail_views[self.COMPUTER].get_data('tab') == 'alert'
228
229 def interact_without(self):
230 if not self.is_interactive():
231 return
232 self.state.detail_views[self.COMPUTER].set_data('tab', 'log')
233
234
235 class AlertTab(Thing):
236 """Tab for alert screen"""
237
238 NAME = 'bridge_comp.alert_tab'
239
240 INTERACTS = {
241 'alert tab' : InteractNoImage(12, 53, 88, 37)
242 }
243 INITIAL = 'alert tab'
244 COMPUTER = 'bridge_comp_detail'
245
246 def is_interactive(self):
247 return self.state.detail_views[self.COMPUTER].get_data('tab') == 'log'
248
249 def interact_without(self):
250 if not self.is_interactive():
251 return
252 self.state.detail_views[self.COMPUTER].set_data('tab', 'alert')
253
254
255 class CompUpButton(Thing):
256 """Up button on log screen"""
257
258 NAME = 'bridge_comp.up_button'
259
260 INTERACTS = {
261 'up' : InteractNoImage(594, 82, 30, 58)
262 }
263 INITIAL = 'up'
264 COMPUTER = 'bridge_comp_detail'
265
266 def is_interactive(self):
267 tab = self.state.detail_views[self.COMPUTER].get_data('tab')
268 page = self.state.detail_views[self.COMPUTER].get_data('log page')
269 return tab == 'log' and page > 0
270
271 def interact_without(self):
272 if not self.is_interactive():
273 return
274 page = self.state.detail_views[self.COMPUTER].get_data('log page')
275 self.state.detail_views[self.COMPUTER].set_data('log page', page-1)
276
277
278 class CompDownButton(Thing):
279 """Down button on log screen"""
280
281 NAME = 'bridge_comp.down_button'
282
283 INTERACTS = {
284 'down' : InteractNoImage(594, 293, 30, 58)
285 }
286 INITIAL = 'down'
287 COMPUTER = 'bridge_comp_detail'
288
289 def is_interactive(self):
290 tab = self.state.detail_views[self.COMPUTER].get_data('tab')
291 page = self.state.detail_views[self.COMPUTER].get_data('log page')
292 max_page = self.state.detail_views[self.COMPUTER].get_data('max page')
293 return tab == 'log' and (page + 1) < max_page
294
295 def interact_without(self):
296 if not self.is_interactive():
297 return
298 page = self.state.detail_views[self.COMPUTER].get_data('log page')
299 self.state.detail_views[self.COMPUTER].set_data('log page', page+1)
300
301
210 class BridgeCompDetail(Scene): 302 class BridgeCompDetail(Scene):
211 303
212 FOLDER = 'bridge' 304 FOLDER = 'bridge'
213 BACKGROUND = 'comp_detail_1.png'
214 NAME = 'bridge_comp_detail' 305 NAME = 'bridge_comp_detail'
215 306
216 SIZE = (300, 300) 307 SIZE = (640, 400)
308
309 ALERT = 'comp_detail_1.png'
310
311 LOGS = ['comp_log_1.png', 'comp_log_2.png',
312 'comp_log_end.png']
313
314 BACKGROUND = ALERT
315
316
317 INITIAL_DATA = {
318 'tab' : 'alert',
319 'log page' : 0,
320 'max page' : len(LOGS),
321 }
217 322
218 def __init__(self, state): 323 def __init__(self, state):
219 super(BridgeCompDetail, self).__init__(state) 324 super(BridgeCompDetail, self).__init__(state)
220 325
326 self.add_thing(LogTab())
327 self.add_thing(AlertTab())
328 self.add_thing(CompUpButton())
329 self.add_thing(CompDownButton())
330 self._alert = get_image(self.FOLDER, self.ALERT)
331 self._logs = [get_image(self.FOLDER, x) for x in self.LOGS]
332
333 def draw_background(self, surface):
334 if self.get_data('tab') == 'alert':
335 self._background = self._alert
336 else:
337 self._background = self._logs[self.get_data('log page')]
338 super(BridgeCompDetail, self).draw_background(surface)
339
221 340
222 SCENES = [Bridge] 341 SCENES = [Bridge]
223 DETAIL_VIEWS = [ChairDetail, BridgeCompDetail] 342 DETAIL_VIEWS = [ChairDetail, BridgeCompDetail]