Mercurial > boomslang
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] |