Mercurial > boomslang
comparison gamelib/scenes/bridge.py @ 603:3ce19d33b51f pyntnclick
Rename state to game to not cause confusion with the other state
author | Neil Muller <neil@dip.sun.ac.za> |
---|---|
date | Sat, 11 Feb 2012 20:09:47 +0200 |
parents | 59f1ee3f5632 |
children | dd12337423ab |
comparison
equal
deleted
inserted
replaced
602:1aac5a3b17e1 | 603:3ce19d33b51f |
---|---|
160 } | 160 } |
161 | 161 |
162 INITIAL = 'chair' | 162 INITIAL = 'chair' |
163 | 163 |
164 def get_description(self): | 164 def get_description(self): |
165 return self.state.current_scene.things['bridge.massagechair_base'] \ | 165 return self.game.current_scene.things['bridge.massagechair_base'] \ |
166 .get_description() | 166 .get_description() |
167 | 167 |
168 def is_interactive(self, tool=None): | 168 def is_interactive(self, tool=None): |
169 return False | 169 return False |
170 | 170 |
189 | 189 |
190 def get_description(self): | 190 def get_description(self): |
191 return "A stethoscope hangs from the neck of the skeleton." | 191 return "A stethoscope hangs from the neck of the skeleton." |
192 | 192 |
193 def interact_without(self): | 193 def interact_without(self): |
194 self.state.add_inventory_item('stethoscope') | 194 self.game.add_inventory_item('stethoscope') |
195 self.scene.remove_thing(self) | 195 self.scene.remove_thing(self) |
196 # Fill in the doctor's rect | 196 # Fill in the doctor's rect |
197 self.scene.doctor.rect.append(self.rect) | 197 self.scene.doctor.rect.append(self.rect) |
198 return Result("You pick up the stethoscope and verify that the" | 198 return Result("You pick up the stethoscope and verify that the" |
199 " doctor's heart has stopped. Probably a while ago.") | 199 " doctor's heart has stopped. Probably a while ago.") |
212 INVENTORY_IMAGE = 'superconductor_fixed.png' | 212 INVENTORY_IMAGE = 'superconductor_fixed.png' |
213 CURSOR = CursorSprite('superconductor_fixed.png') | 213 CURSOR = CursorSprite('superconductor_fixed.png') |
214 | 214 |
215 def interact_with_duct_tape(self, item): | 215 def interact_with_duct_tape(self, item): |
216 taped_superconductor = TapedSuperconductor('taped_superconductor') | 216 taped_superconductor = TapedSuperconductor('taped_superconductor') |
217 self.state.add_item(taped_superconductor) | 217 self.game.add_item(taped_superconductor) |
218 self.state.replace_inventory_item(self.name, taped_superconductor.name) | 218 self.game.replace_inventory_item(self.name, taped_superconductor.name) |
219 return Result("You rip off a piece of duct tape and stick it on the" | 219 return Result("You rip off a piece of duct tape and stick it on the" |
220 " superconductor. It almost sticks to itself, but you" | 220 " superconductor. It almost sticks to itself, but you" |
221 " successfully avoid disaster.") | 221 " successfully avoid disaster.") |
222 | 222 |
223 | 223 |
231 } | 231 } |
232 | 232 |
233 INITIAL = 'superconductor' | 233 INITIAL = 'superconductor' |
234 | 234 |
235 def interact_without(self): | 235 def interact_without(self): |
236 self.state.add_inventory_item('superconductor') | 236 self.game.add_inventory_item('superconductor') |
237 self.state.current_scene.things['bridge.massagechair_base'] \ | 237 self.game.current_scene.things['bridge.massagechair_base'] \ |
238 .set_data('contains_superconductor', False) | 238 .set_data('contains_superconductor', False) |
239 self.scene.remove_thing(self) | 239 self.scene.remove_thing(self) |
240 return (Result("The superconductor module unclips easily."), | 240 return (Result("The superconductor module unclips easily."), |
241 make_jim_dialog(("Prisoner %s. That chair you've destroyed" | 241 make_jim_dialog(("Prisoner %s. That chair you've destroyed" |
242 " was property of the ship's captain. " | 242 " was property of the ship's captain. " |
243 "You will surely be punished." | 243 "You will surely be punished." |
244 % PLAYER_ID), self.state)) | 244 % PLAYER_ID), self.game)) |
245 | 245 |
246 | 246 |
247 class StarField(Thing): | 247 class StarField(Thing): |
248 | 248 |
249 NAME = 'bridge.stars' | 249 NAME = 'bridge.stars' |
358 def interact_default(self, item): | 358 def interact_default(self, item): |
359 if self.scene.get_data('ai status') == 'online': | 359 if self.scene.get_data('ai status') == 'online': |
360 return (Result('You feel a shock from the panel.'), | 360 return (Result('You feel a shock from the panel.'), |
361 make_jim_dialog("Prisoner %s. Please step away from the" | 361 make_jim_dialog("Prisoner %s. Please step away from the" |
362 " panel. You are not an authorized" | 362 " panel. You are not an authorized" |
363 " technician." % PLAYER_ID, self.state)) | 363 " technician." % PLAYER_ID, self.game)) |
364 | 364 |
365 | 365 |
366 class ChairDetail(Scene): | 366 class ChairDetail(Scene): |
367 | 367 |
368 FOLDER = 'bridge' | 368 FOLDER = 'bridge' |
386 } | 386 } |
387 INITIAL = 'log tab' | 387 INITIAL = 'log tab' |
388 COMPUTER = 'bridge_comp_detail' | 388 COMPUTER = 'bridge_comp_detail' |
389 | 389 |
390 def is_interactive(self, tool=None): | 390 def is_interactive(self, tool=None): |
391 return self.state.detail_views[self.COMPUTER].get_data('tab') != 'log' | 391 return self.game.detail_views[self.COMPUTER].get_data('tab') != 'log' |
392 | 392 |
393 def interact_without(self): | 393 def interact_without(self): |
394 self.state.detail_views[self.COMPUTER].set_data('tab', 'log') | 394 self.game.detail_views[self.COMPUTER].set_data('tab', 'log') |
395 self.state.detail_views[self.COMPUTER].set_background() | 395 self.game.detail_views[self.COMPUTER].set_background() |
396 return Result(soundfile='beep550.ogg') | 396 return Result(soundfile='beep550.ogg') |
397 | 397 |
398 | 398 |
399 class AlertTab(Thing): | 399 class AlertTab(Thing): |
400 """Tab for alert screen""" | 400 """Tab for alert screen""" |
406 } | 406 } |
407 INITIAL = 'alert tab' | 407 INITIAL = 'alert tab' |
408 COMPUTER = 'bridge_comp_detail' | 408 COMPUTER = 'bridge_comp_detail' |
409 | 409 |
410 def is_interactive(self, tool=None): | 410 def is_interactive(self, tool=None): |
411 return (self.state.detail_views[self.COMPUTER].get_data('tab') | 411 return (self.game.detail_views[self.COMPUTER].get_data('tab') |
412 != 'alert') | 412 != 'alert') |
413 | 413 |
414 def interact_without(self): | 414 def interact_without(self): |
415 self.state.detail_views[self.COMPUTER].set_data('tab', 'alert') | 415 self.game.detail_views[self.COMPUTER].set_data('tab', 'alert') |
416 self.state.detail_views[self.COMPUTER].set_background() | 416 self.game.detail_views[self.COMPUTER].set_background() |
417 return Result(soundfile='beep550.ogg') | 417 return Result(soundfile='beep550.ogg') |
418 | 418 |
419 | 419 |
420 class NavTab(Thing): | 420 class NavTab(Thing): |
421 """Tab for the Navigation screen""" | 421 """Tab for the Navigation screen""" |
427 } | 427 } |
428 INITIAL = 'nav tab' | 428 INITIAL = 'nav tab' |
429 COMPUTER = 'bridge_comp_detail' | 429 COMPUTER = 'bridge_comp_detail' |
430 | 430 |
431 def is_interactive(self, tool=None): | 431 def is_interactive(self, tool=None): |
432 return self.state.detail_views[self.COMPUTER].get_data('tab') != 'nav' | 432 return self.game.detail_views[self.COMPUTER].get_data('tab') != 'nav' |
433 | 433 |
434 def interact_without(self): | 434 def interact_without(self): |
435 self.state.detail_views[self.COMPUTER].set_data('tab', 'nav') | 435 self.game.detail_views[self.COMPUTER].set_data('tab', 'nav') |
436 self.state.detail_views[self.COMPUTER].set_background() | 436 self.game.detail_views[self.COMPUTER].set_background() |
437 return Result(soundfile='beep550.ogg') | 437 return Result(soundfile='beep550.ogg') |
438 | 438 |
439 | 439 |
440 class DestNavPageLine(Thing): | 440 class DestNavPageLine(Thing): |
441 """The destination navigation lines.""" | 441 """The destination navigation lines.""" |
454 # Whether JIM blocks this | 454 # Whether JIM blocks this |
455 self.ai_blocked = ai_blocked | 455 self.ai_blocked = ai_blocked |
456 self.set_interact('line') | 456 self.set_interact('line') |
457 | 457 |
458 def is_interactive(self, tool=None): | 458 def is_interactive(self, tool=None): |
459 return self.state.detail_views[self.COMPUTER].get_data('tab') == 'nav' | 459 return self.game.detail_views[self.COMPUTER].get_data('tab') == 'nav' |
460 | 460 |
461 def interact_without(self): | 461 def interact_without(self): |
462 if self.state.scenes['bridge'].get_data('ai status') == 'online': | 462 if self.game.scenes['bridge'].get_data('ai status') == 'online': |
463 return make_jim_dialog("You are not authorized to change the" | 463 return make_jim_dialog("You are not authorized to change the" |
464 " destination.", self.state) | 464 " destination.", self.game) |
465 if not self.ai_blocked: | 465 if not self.ai_blocked: |
466 return Result("There's no good reason to choose to go to the" | 466 return Result("There's no good reason to choose to go to the" |
467 " penal colony.") | 467 " penal colony.") |
468 if self.state.scenes['bridge'].get_data('ai status') == 'looping': | 468 if self.game.scenes['bridge'].get_data('ai status') == 'looping': |
469 return Result("You could change the destination, but when JIM" | 469 return Result("You could change the destination, but when JIM" |
470 " recovers, it'll just get reset.") | 470 " recovers, it'll just get reset.") |
471 if self.state.scenes['bridge'].get_data('ai status') == 'dead': | 471 if self.game.scenes['bridge'].get_data('ai status') == 'dead': |
472 return Result("You change the destination.", | 472 return Result("You change the destination.", |
473 soundfile="beep550.ogg", end_game=True) | 473 soundfile="beep550.ogg", end_game=True) |
474 | 474 |
475 | 475 |
476 class CompUpButton(Thing): | 476 class CompUpButton(Thing): |
483 } | 483 } |
484 INITIAL = 'up' | 484 INITIAL = 'up' |
485 COMPUTER = 'bridge_comp_detail' | 485 COMPUTER = 'bridge_comp_detail' |
486 | 486 |
487 def is_interactive(self, tool=None): | 487 def is_interactive(self, tool=None): |
488 tab = self.state.detail_views[self.COMPUTER].get_data('tab') | 488 tab = self.game.detail_views[self.COMPUTER].get_data('tab') |
489 page = self.state.detail_views[self.COMPUTER].get_data('log page') | 489 page = self.game.detail_views[self.COMPUTER].get_data('log page') |
490 return tab == 'log' and page > 0 | 490 return tab == 'log' and page > 0 |
491 | 491 |
492 def interact_without(self): | 492 def interact_without(self): |
493 page = self.state.detail_views[self.COMPUTER].get_data('log page') | 493 page = self.game.detail_views[self.COMPUTER].get_data('log page') |
494 self.state.detail_views[self.COMPUTER].set_data('log page', page - 1) | 494 self.game.detail_views[self.COMPUTER].set_data('log page', page - 1) |
495 self.state.detail_views[self.COMPUTER].set_background() | 495 self.game.detail_views[self.COMPUTER].set_background() |
496 return Result(soundfile='beep550.ogg') | 496 return Result(soundfile='beep550.ogg') |
497 | 497 |
498 | 498 |
499 class CompDownButton(Thing): | 499 class CompDownButton(Thing): |
500 """Down button on log screen""" | 500 """Down button on log screen""" |
506 } | 506 } |
507 INITIAL = 'down' | 507 INITIAL = 'down' |
508 COMPUTER = 'bridge_comp_detail' | 508 COMPUTER = 'bridge_comp_detail' |
509 | 509 |
510 def is_interactive(self, tool=None): | 510 def is_interactive(self, tool=None): |
511 tab = self.state.detail_views[self.COMPUTER].get_data('tab') | 511 tab = self.game.detail_views[self.COMPUTER].get_data('tab') |
512 page = self.state.detail_views[self.COMPUTER].get_data('log page') | 512 page = self.game.detail_views[self.COMPUTER].get_data('log page') |
513 max_page = self.state.detail_views[self.COMPUTER].get_data('max page') | 513 max_page = self.game.detail_views[self.COMPUTER].get_data('max page') |
514 return tab == 'log' and (page + 1) < max_page | 514 return tab == 'log' and (page + 1) < max_page |
515 | 515 |
516 def interact_without(self): | 516 def interact_without(self): |
517 page = self.state.detail_views[self.COMPUTER].get_data('log page') | 517 page = self.game.detail_views[self.COMPUTER].get_data('log page') |
518 self.state.detail_views[self.COMPUTER].set_data('log page', page + 1) | 518 self.game.detail_views[self.COMPUTER].set_data('log page', page + 1) |
519 self.state.detail_views[self.COMPUTER].set_background() | 519 self.game.detail_views[self.COMPUTER].set_background() |
520 return Result(soundfile='beep550.ogg') | 520 return Result(soundfile='beep550.ogg') |
521 | 521 |
522 | 522 |
523 class MonitorCamera(BaseCamera): | 523 class MonitorCamera(BaseCamera): |
524 "A camera on the bridge" | 524 "A camera on the bridge" |
616 # Much fiddling to do the right thing when we reinsert it | 616 # Much fiddling to do the right thing when we reinsert it |
617 del self.things[thing.name] | 617 del self.things[thing.name] |
618 thing.scene = None | 618 thing.scene = None |
619 | 619 |
620 def _get_nav_page(self): | 620 def _get_nav_page(self): |
621 if not self.state.scenes['engine'].get_data('engine online'): | 621 if not self.game.scenes['engine'].get_data('engine online'): |
622 return self._nav_messages['engine offline'] | 622 return self._nav_messages['engine offline'] |
623 elif (not self.state.scenes['mess'].get_data('life support status') | 623 elif (not self.game.scenes['mess'].get_data('life support status') |
624 == 'fixed'): | 624 == 'fixed'): |
625 return self._nav_messages['life support'] | 625 return self._nav_messages['life support'] |
626 else: | 626 else: |
627 for thing in self._nav_lines: | 627 for thing in self._nav_lines: |
628 if thing.name not in self.things: | 628 if thing.name not in self.things: |
629 self.add_thing(thing) | 629 self.add_thing(thing) |
630 return self._nav_messages['final'] | 630 return self._nav_messages['final'] |
631 | 631 |
632 def _draw_alerts(self, surface): | 632 def _draw_alerts(self, surface): |
633 xpos, ypos = self.ALERT_OFFSET | 633 xpos, ypos = self.ALERT_OFFSET |
634 if self.state.scenes['bridge'].get_data('ai status') == 'looping': | 634 if self.game.scenes['bridge'].get_data('ai status') == 'looping': |
635 surface.blit(self._alert_messages['ai looping'], (xpos, ypos)) | 635 surface.blit(self._alert_messages['ai looping'], (xpos, ypos)) |
636 ypos += (self._alert_messages['ai looping'].get_size()[1] | 636 ypos += (self._alert_messages['ai looping'].get_size()[1] |
637 + self.ALERT_SPACING) | 637 + self.ALERT_SPACING) |
638 if self.state.scenes['bridge'].get_data('ai status') == 'dead': | 638 if self.game.scenes['bridge'].get_data('ai status') == 'dead': |
639 surface.blit(self._alert_messages['ai offline'], (xpos, ypos)) | 639 surface.blit(self._alert_messages['ai offline'], (xpos, ypos)) |
640 ypos += (self._alert_messages['ai offline'].get_size()[1] | 640 ypos += (self._alert_messages['ai offline'].get_size()[1] |
641 + self.ALERT_SPACING) | 641 + self.ALERT_SPACING) |
642 if not self.state.scenes['engine'].get_data('engine online'): | 642 if not self.game.scenes['engine'].get_data('engine online'): |
643 surface.blit(self._alert_messages['engine offline'], (xpos, ypos)) | 643 surface.blit(self._alert_messages['engine offline'], (xpos, ypos)) |
644 ypos += (self._alert_messages['engine offline'].get_size()[1] | 644 ypos += (self._alert_messages['engine offline'].get_size()[1] |
645 + self.ALERT_SPACING) | 645 + self.ALERT_SPACING) |
646 if (self.state.scenes['mess'].get_data('life support status') | 646 if (self.game.scenes['mess'].get_data('life support status') |
647 == 'broken'): | 647 == 'broken'): |
648 surface.blit(self._alert_messages['life support'], (xpos, ypos)) | 648 surface.blit(self._alert_messages['life support'], (xpos, ypos)) |
649 ypos += (self._alert_messages['life support'].get_size()[1] | 649 ypos += (self._alert_messages['life support'].get_size()[1] |
650 + self.ALERT_SPACING) | 650 + self.ALERT_SPACING) |
651 if (self.state.scenes['mess'].get_data('life support status') | 651 if (self.game.scenes['mess'].get_data('life support status') |
652 == 'replaced'): | 652 == 'replaced'): |
653 surface.blit(self._alert_messages['life support partial'], | 653 surface.blit(self._alert_messages['life support partial'], |
654 (xpos, ypos)) | 654 (xpos, ypos)) |
655 ypos += (self._alert_messages['life support partial'].get_size()[1] | 655 ypos += (self._alert_messages['life support partial'].get_size()[1] |
656 + self.ALERT_SPACING) | 656 + self.ALERT_SPACING) |