annotate gamelib/scenes/game_widgets.py @ 837:bdebe693453f pyntnclick

Track total sentence
author Neil Muller <neil@dip.sun.ac.za>
date Tue, 29 Jan 2013 21:45:27 +0200
parents 43b49f1de828
children
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
769
43b49f1de828 Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents: 759 765
diff changeset
4 from pyntnclick.i18n import _
549
098ea4ea0d0d Rename imports
Neil Muller <neil@dip.sun.ac.za>
parents: 544
diff changeset
5 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
6
681
497b6d7c55e7 Reimplement JIM-style in gamelib
Neil Muller <neil@dip.sun.ac.za>
parents: 655
diff changeset
7 from gamelib.custom_widgets import JimLabel
266
80cb577e38f2 Non-interactive things no longer highlight the cursor.
Jeremy Thurgood <firxen@gmail.com>
parents: 263
diff changeset
8
242
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 class Door(Thing):
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
11 """A door somewhere"""
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
12
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
13 DEST = "map"
252
dfc89bc64fdb Start of walkthrough "unit test" and associated fixes and tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 242
diff changeset
14 SCENE = None
dfc89bc64fdb Start of walkthrough "unit test" and associated fixes and tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 242
diff changeset
15
dfc89bc64fdb Start of walkthrough "unit test" and associated fixes and tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 242
diff changeset
16 def __init__(self):
dfc89bc64fdb Start of walkthrough "unit test" and associated fixes and tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 242
diff changeset
17 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
18 Thing.__init__(self)
242
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
19
519
8f3c82c685a4 Fix is_interactive() by adding tool param.
Jeremy Thurgood <firxen@gmail.com>
parents: 500
diff changeset
20 def is_interactive(self, tool=None):
242
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
21 return True
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
22
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
23 def interact_without(self):
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
24 """Go to map."""
692
d6ded808cc33 Much scene management refactoring.
Jeremy Thurgood <firxen@gmail.com>
parents: 681
diff changeset
25 self.game.change_scene("map")
242
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 get_description(self):
765
2f1952748cdb merge i18n and Russian translation
Stefano Rivera <stefano@rivera.za.net>
parents: 525
diff changeset
28 return _('An open doorway leads to the rest of the ship.')
242
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
29
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
30 def interact_default(self, item):
435
19aff54b2e73 Many small fixes.
Jeremy Thurgood <firxen@gmail.com>
parents: 360
diff changeset
31 return self.interact_without()
242
12c4f87ea424 Unify doors a bit
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
32
360
452230d78541 Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents: 354
diff changeset
33
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
34 def make_jim_dialog(mesg, game):
360
452230d78541 Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents: 354
diff changeset
35 "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
36 if game.data.get_jim_state() == 'online':
681
497b6d7c55e7 Reimplement JIM-style in gamelib
Neil Muller <neil@dip.sun.ac.za>
parents: 655
diff changeset
37 return Result(widget=JimLabel(game.gd, mesg))
360
452230d78541 Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents: 354
diff changeset
38 else:
452230d78541 Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents: 354
diff changeset
39 return None
452230d78541 Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents: 354
diff changeset
40
452230d78541 Use make_jim_dialog everywhere
Neil Muller <neil@dip.sun.ac.za>
parents: 354
diff changeset
41
837
bdebe693453f Track total sentence
Neil Muller <neil@dip.sun.ac.za>
parents: 769
diff changeset
42 def make_sentence_dialog(prisoner, game):
bdebe693453f Track total sentence
Neil Muller <neil@dip.sun.ac.za>
parents: 769
diff changeset
43 return make_jim_dialog(
bdebe693453f Track total sentence
Neil Muller <neil@dip.sun.ac.za>
parents: 769
diff changeset
44 _("Prisoner %(id)s, your total sentence is now %(sen)d years.") % {
bdebe693453f Track total sentence
Neil Muller <neil@dip.sun.ac.za>
parents: 769
diff changeset
45 "id": prisoner, 'sen': game.data.get_total_sentence()}, game)
bdebe693453f Track total sentence
Neil Muller <neil@dip.sun.ac.za>
parents: 769
diff changeset
46
bdebe693453f Track total sentence
Neil Muller <neil@dip.sun.ac.za>
parents: 769
diff changeset
47
350
125cb389ab90 Hook up poster. Add cameras to crew_quarters and bridge
Neil Muller <neil@dip.sun.ac.za>
parents: 296
diff changeset
48 class BaseCamera(Thing):
464
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
49 "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
50
464
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
51 INITIAL = 'online'
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
52 INITIAL_DATA = {
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
53 'state': 'online',
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
54 }
499
cfd9c2bb4474 Make poster only work if JIM is online
Neil Muller <neil@dip.sun.ac.za>
parents: 464
diff changeset
55
464
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
56 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
57 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
58 if status == 'online':
765
2f1952748cdb merge i18n and Russian translation
Stefano Rivera <stefano@rivera.za.net>
parents: 525
diff changeset
59 return _("A security camera watches over the room")
500
e49e4fe76241 Alter security camera description and is_interactive to match JIM's state
Stefano Rivera <stefano@rivera.za.net>
parents: 499
diff changeset
60 elif status == 'looping':
769
43b49f1de828 Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents: 759 765
diff changeset
61 return _("The security camera is currently offline but should be"
43b49f1de828 Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents: 759 765
diff changeset
62 " 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
63 else:
765
2f1952748cdb merge i18n and Russian translation
Stefano Rivera <stefano@rivera.za.net>
parents: 525
diff changeset
64 return _("The security camera is powered down")
500
e49e4fe76241 Alter security camera description and is_interactive to match JIM's state
Stefano Rivera <stefano@rivera.za.net>
parents: 499
diff changeset
65
519
8f3c82c685a4 Fix is_interactive() by adding tool param.
Jeremy Thurgood <firxen@gmail.com>
parents: 500
diff changeset
66 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
67 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
68
464
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
69 def interact_with_escher_poster(self, item):
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
70 # 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
71 if self.state.get_jim_state() == 'online':
769
43b49f1de828 Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents: 759 765
diff changeset
72 ai_response = make_jim_dialog(_("3D scene reconstruction failed."
43b49f1de828 Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents: 759 765
diff changeset
73 " Critical error."
43b49f1de828 Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents: 759 765
diff changeset
74 " Entering emergency shutdown."),
43b49f1de828 Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents: 759 765
diff changeset
75 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
76 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
77 return ai_response
cfd9c2bb4474 Make poster only work if JIM is online
Neil Muller <neil@dip.sun.ac.za>
parents: 464
diff changeset
78
759
386475464202 Inspect game state for Thing.set_interact() instead of setting it manually everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents: 692
diff changeset
79 def select_interact(self):
386475464202 Inspect game state for Thing.set_interact() instead of setting it manually everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents: 692
diff changeset
80 if 'bridge' not in self.state:
386475464202 Inspect game state for Thing.set_interact() instead of setting it manually everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents: 692
diff changeset
81 # We aren't completely set up yet
386475464202 Inspect game state for Thing.set_interact() instead of setting it manually everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents: 692
diff changeset
82 return self.INITIAL
386475464202 Inspect game state for Thing.set_interact() instead of setting it manually everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents: 692
diff changeset
83 return self.state.get_jim_state()
386475464202 Inspect game state for Thing.set_interact() instead of setting it manually everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents: 692
diff changeset
84
464
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
85 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
86 ai_status = self.state.get_jim_state()
464
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
87 if ai_status != self.get_data('status'):
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
88 self.set_data('status', ai_status)
759
386475464202 Inspect game state for Thing.set_interact() instead of setting it manually everywhere.
Jeremy Thurgood <firxen@gmail.com>
parents: 692
diff changeset
89 self.set_interact()
464
54853e61b149 Blinken cameras
Stefano Rivera <stefano@rivera.za.net>
parents: 435
diff changeset
90 super(BaseCamera, self).animate()