annotate gamelib/scenes/game_widgets.py @ 655:c77d6aa29bee pyntnclick

Some code to kinda demonstrate the ever so cunning state handling plan
author Neil Muller <neil@dip.sun.ac.za>
date Sun, 12 Feb 2012 13:56:59 +0200
parents 3ce19d33b51f
children 497b6d7c55e7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
242
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
1 """Generic, game specific widgets"""
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
2
263
3b4a78422201 Shuffled a bunch of stuff into more appropriate places.
Jeremy Thurgood <firxen@gmail.com>
parents: 252
diff changeset
3
549
098ea4ea0d0d Rename imports
Neil Muller <neil@dip.sun.ac.za>
parents: 544
diff changeset
4 from pyntnclick.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
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
6
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
7 class Door(Thing):
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
8 """A door somewhere"""
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
9
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
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
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
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
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
18 return True
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
19
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
20 def interact_without(self):
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
21 """Go to map."""
603
3ce19d33b51f Rename state to game to not cause confusion with the other state
Neil Muller <neil@dip.sun.ac.za>
parents: 549
diff changeset
22 self.game.set_current_scene("map")
242
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
23
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
24 def get_description(self):
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
25 return 'An open doorway leads to the rest of the ship.'
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
26
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
27 def interact_default(self, item):
435
19aff54b2e73 Many small fixes.
Jeremy Thurgood <firxen@gmail.com>
parents: 360
diff changeset
28 return self.interact_without()
242
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
29
360
452230d78541 Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents: 354
diff changeset
30
655
c77d6aa29bee Some code to kinda demonstrate the ever so cunning state handling plan
Neil Muller <neil@dip.sun.ac.za>
parents: 603
diff changeset
31 def make_jim_dialog(mesg, game):
360
452230d78541 Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents: 354
diff changeset
32 "Utility helper function"
655
c77d6aa29bee Some code to kinda demonstrate the ever so cunning state handling plan
Neil Muller <neil@dip.sun.ac.za>
parents: 603
diff changeset
33 if game.data.get_jim_state() == 'online':
360
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
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
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
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
42 INITIAL = 'online'
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
43 INITIAL_DATA = {
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
44 'state': 'online',
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
45 }
499
cfd9c2bb4474 Make poster only work if JIM is online
Neil Muller <neil@dip.sun.ac.za>
parents: 464
diff changeset
46
464
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
47 def get_description(self):
655
c77d6aa29bee Some code to kinda demonstrate the ever so cunning state handling plan
Neil Muller <neil@dip.sun.ac.za>
parents: 603
diff changeset
48 status = self.state.get_jim_state()
500
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':
544
f79d1d3df8e8 pep8 cleanup
Neil Muller <neil@dip.sun.ac.za>
parents: 525
diff changeset
52 return "The security camera is currently offline but should be" \
f79d1d3df8e8 pep8 cleanup
Neil Muller <neil@dip.sun.ac.za>
parents: 525
diff changeset
53 " working soon"
500
e49e4fe76241 Alter security camera description and is_interactive to match JIM's state
Stefano Rivera <stefano@rivera.za.net>
parents: 499
diff changeset
54 else:
e49e4fe76241 Alter security camera description and is_interactive to match JIM's state
Stefano Rivera <stefano@rivera.za.net>
parents: 499
diff changeset
55 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
56
519
8f3c82c685a4 Fix is_interactive() by adding tool param.
Jeremy Thurgood <firxen@gmail.com>
parents: 500
diff changeset
57 def is_interactive(self, tool=None):
655
c77d6aa29bee Some code to kinda demonstrate the ever so cunning state handling plan
Neil Muller <neil@dip.sun.ac.za>
parents: 603
diff changeset
58 return self.state.get_jim_state() == 'online'
499
cfd9c2bb4474 Make poster only work if JIM is online
Neil Muller <neil@dip.sun.ac.za>
parents: 464
diff changeset
59
464
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
60 def interact_with_escher_poster(self, item):
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
61 # Order matters here, because of helper function
655
c77d6aa29bee Some code to kinda demonstrate the ever so cunning state handling plan
Neil Muller <neil@dip.sun.ac.za>
parents: 603
diff changeset
62 if self.state.get_jim_state() == 'online':
544
f79d1d3df8e8 pep8 cleanup
Neil Muller <neil@dip.sun.ac.za>
parents: 525
diff changeset
63 ai_response = make_jim_dialog("3D scene reconstruction failed."
f79d1d3df8e8 pep8 cleanup
Neil Muller <neil@dip.sun.ac.za>
parents: 525
diff changeset
64 " Critical error. Entering emergency shutdown.",
603
3ce19d33b51f Rename state to game to not cause confusion with the other state
Neil Muller <neil@dip.sun.ac.za>
parents: 549
diff changeset
65 self.game)
655
c77d6aa29bee Some code to kinda demonstrate the ever so cunning state handling plan
Neil Muller <neil@dip.sun.ac.za>
parents: 603
diff changeset
66 self.game.data.loop_ai()
499
cfd9c2bb4474 Make poster only work if JIM is online
Neil Muller <neil@dip.sun.ac.za>
parents: 464
diff changeset
67 return ai_response
cfd9c2bb4474 Make poster only work if JIM is online
Neil Muller <neil@dip.sun.ac.za>
parents: 464
diff changeset
68
464
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
69 def animate(self):
655
c77d6aa29bee Some code to kinda demonstrate the ever so cunning state handling plan
Neil Muller <neil@dip.sun.ac.za>
parents: 603
diff changeset
70 ai_status = self.state.get_jim_state()
464
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
71 if ai_status != self.get_data('status'):
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
72 self.set_data('status', ai_status)
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
73 self.set_interact(ai_status)
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
74 super(BaseCamera, self).animate()