Mercurial > boomslang
annotate gamelib/scenes/game_widgets.py @ 525:821b322e903b
Separate "scene widgets" from "game-specific widgets".
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Wed, 08 Sep 2010 14:02:11 +0200 |
parents | gamelib/scenes/scene_widgets.py@8f3c82c685a4 |
children | f79d1d3df8e8 2f1952748cdb |
rev | line source |
---|---|
242 | 1 """Generic, game specific widgets""" |
2 | |
263
3b4a78422201
Shuffled a bunch of stuff into more appropriate places.
Jeremy Thurgood <firxen@gmail.com>
parents:
252
diff
changeset
|
3 |
525
821b322e903b
Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
519
diff
changeset
|
4 from gamelib.state import Thing, Result |
266
80cb577e38f2
Non-interactive things no longer highlight the cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
263
diff
changeset
|
5 |
242 | 6 |
7 class Door(Thing): | |
8 """A door somewhere""" | |
9 | |
10 DEST = "map" | |
252
dfc89bc64fdb
Start of walkthrough "unit test" and associated fixes and tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
242
diff
changeset
|
11 SCENE = None |
dfc89bc64fdb
Start of walkthrough "unit test" and associated fixes and tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
242
diff
changeset
|
12 |
dfc89bc64fdb
Start of walkthrough "unit test" and associated fixes and tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
242
diff
changeset
|
13 def __init__(self): |
dfc89bc64fdb
Start of walkthrough "unit test" and associated fixes and tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
242
diff
changeset
|
14 self.NAME = self.SCENE + '.door' |
dfc89bc64fdb
Start of walkthrough "unit test" and associated fixes and tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
242
diff
changeset
|
15 Thing.__init__(self) |
242 | 16 |
519
8f3c82c685a4
Fix is_interactive() by adding tool param.
Jeremy Thurgood <firxen@gmail.com>
parents:
500
diff
changeset
|
17 def is_interactive(self, tool=None): |
242 | 18 return True |
19 | |
20 def interact_without(self): | |
21 """Go to map.""" | |
22 self.state.set_current_scene("map") | |
23 | |
24 def get_description(self): | |
25 return 'An open doorway leads to the rest of the ship.' | |
26 | |
27 def interact_default(self, item): | |
435 | 28 return self.interact_without() |
242 | 29 |
360
452230d78541
Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents:
354
diff
changeset
|
30 |
452230d78541
Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents:
354
diff
changeset
|
31 def make_jim_dialog(mesg, state): |
452230d78541
Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents:
354
diff
changeset
|
32 "Utility helper function" |
452230d78541
Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents:
354
diff
changeset
|
33 if state.scenes['bridge'].get_data('ai status') == 'online': |
452230d78541
Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents:
354
diff
changeset
|
34 return Result(mesg, style='JIM') |
452230d78541
Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents:
354
diff
changeset
|
35 else: |
452230d78541
Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents:
354
diff
changeset
|
36 return None |
452230d78541
Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents:
354
diff
changeset
|
37 |
452230d78541
Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents:
354
diff
changeset
|
38 |
350
125cb389ab90
Hook up poster. Add cameras to crew_quarters and bridge
Neil Muller <neil@dip.sun.ac.za>
parents:
296
diff
changeset
|
39 class BaseCamera(Thing): |
464 | 40 "Base class for the camera puzzles" |
499
cfd9c2bb4474
Make poster only work if JIM is online
Neil Muller <neil@dip.sun.ac.za>
parents:
464
diff
changeset
|
41 |
464 | 42 INITIAL = 'online' |
43 INITIAL_DATA = { | |
44 'state': 'online', | |
45 } | |
499
cfd9c2bb4474
Make poster only work if JIM is online
Neil Muller <neil@dip.sun.ac.za>
parents:
464
diff
changeset
|
46 |
464 | 47 def get_description(self): |
500
e49e4fe76241
Alter security camera description and is_interactive to match JIM's state
Stefano Rivera <stefano@rivera.za.net>
parents:
499
diff
changeset
|
48 status = self.state.scenes['bridge'].get_data('ai status') |
e49e4fe76241
Alter security camera description and is_interactive to match JIM's state
Stefano Rivera <stefano@rivera.za.net>
parents:
499
diff
changeset
|
49 if status == 'online': |
e49e4fe76241
Alter security camera description and is_interactive to match JIM's state
Stefano Rivera <stefano@rivera.za.net>
parents:
499
diff
changeset
|
50 return "A security camera watches over the room" |
e49e4fe76241
Alter security camera description and is_interactive to match JIM's state
Stefano Rivera <stefano@rivera.za.net>
parents:
499
diff
changeset
|
51 elif status == 'looping': |
e49e4fe76241
Alter security camera description and is_interactive to match JIM's state
Stefano Rivera <stefano@rivera.za.net>
parents:
499
diff
changeset
|
52 return "The security camera is currently offline but should be working soon" |
e49e4fe76241
Alter security camera description and is_interactive to match JIM's state
Stefano Rivera <stefano@rivera.za.net>
parents:
499
diff
changeset
|
53 else: |
e49e4fe76241
Alter security camera description and is_interactive to match JIM's state
Stefano Rivera <stefano@rivera.za.net>
parents:
499
diff
changeset
|
54 return "The security camera is powered down" |
e49e4fe76241
Alter security camera description and is_interactive to match JIM's state
Stefano Rivera <stefano@rivera.za.net>
parents:
499
diff
changeset
|
55 |
519
8f3c82c685a4
Fix is_interactive() by adding tool param.
Jeremy Thurgood <firxen@gmail.com>
parents:
500
diff
changeset
|
56 def is_interactive(self, tool=None): |
500
e49e4fe76241
Alter security camera description and is_interactive to match JIM's state
Stefano Rivera <stefano@rivera.za.net>
parents:
499
diff
changeset
|
57 return self.state.scenes['bridge'].get_data('ai status') == 'online' |
499
cfd9c2bb4474
Make poster only work if JIM is online
Neil Muller <neil@dip.sun.ac.za>
parents:
464
diff
changeset
|
58 |
464 | 59 def interact_with_escher_poster(self, item): |
60 # Order matters here, because of helper function | |
499
cfd9c2bb4474
Make poster only work if JIM is online
Neil Muller <neil@dip.sun.ac.za>
parents:
464
diff
changeset
|
61 if self.state.scenes['bridge'].get_data('ai status') == 'online': |
cfd9c2bb4474
Make poster only work if JIM is online
Neil Muller <neil@dip.sun.ac.za>
parents:
464
diff
changeset
|
62 ai_response = make_jim_dialog("3D scene reconstruction failed. Critical error. Entering emergency shutdown.", self.state) |
cfd9c2bb4474
Make poster only work if JIM is online
Neil Muller <neil@dip.sun.ac.za>
parents:
464
diff
changeset
|
63 self.state.scenes['bridge'].set_data('ai status', 'looping') |
cfd9c2bb4474
Make poster only work if JIM is online
Neil Muller <neil@dip.sun.ac.za>
parents:
464
diff
changeset
|
64 return ai_response |
cfd9c2bb4474
Make poster only work if JIM is online
Neil Muller <neil@dip.sun.ac.za>
parents:
464
diff
changeset
|
65 |
464 | 66 def animate(self): |
67 ai_status = self.state.scenes['bridge'].get_data('ai status') | |
68 if ai_status != self.get_data('status'): | |
69 self.set_data('status', ai_status) | |
70 self.set_interact(ai_status) | |
71 super(BaseCamera, self).animate() | |
350
125cb389ab90
Hook up poster. Add cameras to crew_quarters and bridge
Neil Muller <neil@dip.sun.ac.za>
parents:
296
diff
changeset
|
72 |