Mercurial > boomslang
annotate pyntnclick/main.py @ 795:42cfafa20437 pyntnclick
Add the rest of the commit
author | Neil Muller <neil@dip.sun.ac.za> |
---|---|
date | Sun, 27 Jan 2013 13:01:09 +0200 |
parents | bdaffaa8b6bf |
children | 5ec7905b2365 |
rev | line source |
---|---|
0
f2c3b516741b
Theme is 'Caught'. Start with Skellington 1.9.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
1 '''Game main module. |
f2c3b516741b
Theme is 'Caught'. Start with Skellington 1.9.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
2 |
f2c3b516741b
Theme is 'Caught'. Start with Skellington 1.9.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
3 Contains the entry point used by the run_game.py script. |
f2c3b516741b
Theme is 'Caught'. Start with Skellington 1.9.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
4 |
f2c3b516741b
Theme is 'Caught'. Start with Skellington 1.9.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
5 ''' |
102 | 6 import sys |
769
43b49f1de828
Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents:
758
diff
changeset
|
7 import gettext |
43b49f1de828
Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents:
758
diff
changeset
|
8 import locale |
786
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
9 import os |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
10 from optparse import OptionParser |
102 | 11 |
17 | 12 import pygame |
37 | 13 from pygame.locals import SWSURFACE |
26
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
25
diff
changeset
|
14 |
782
6a3440c8be8d
The title needs to be lazily translated. It's evaluated before we set up gettext
Stefano Rivera <stefano@rivera.za.net>
parents:
772
diff
changeset
|
15 from pyntnclick.i18n import _ |
600
fabce47e542f
Stop using albow (at least for the menu). Breaks the world. Please fix it, kthx
Stefano Rivera <stefano@rivera.za.net>
parents:
599
diff
changeset
|
16 from pyntnclick.engine import Engine |
614
974cc69d3762
Special cases aren't special enough to be named special.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
613
diff
changeset
|
17 from pyntnclick.gamescreen import DefMenuScreen, DefEndScreen, GameScreen |
594 | 18 from pyntnclick.constants import GameConstants, DEBUG_ENVVAR |
569
0587f11ff435
Link up Resource module.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
568
diff
changeset
|
19 from pyntnclick.resources import Resources |
564 | 20 from pyntnclick.sound import Sound |
570
9c3528c2cbe5
Bug fixes for sound hook-up.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
569
diff
changeset
|
21 from pyntnclick import state |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
22 |
691
60bf20849231
Fix detail loading in rect_drawer. Improve error reporting when loading fails
Neil Muller <neil@dip.sun.ac.za>
parents:
673
diff
changeset
|
23 from pyntnclick.tools.rect_drawer import (RectEngine, RectDrawerError, |
60bf20849231
Fix detail loading in rect_drawer. Improve error reporting when loading fails
Neil Muller <neil@dip.sun.ac.za>
parents:
673
diff
changeset
|
24 make_rect_display) |
589
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
25 from pyntnclick.tools.utils import list_scenes |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
26 |
532 | 27 |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
28 class GameDescriptionError(Exception): |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
29 """Raised when an GameDescription is invalid.""" |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
30 |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
31 |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
32 class GameDescription(object): |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
33 |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
34 # initial scene for start of game (unless overridden by debug) |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
35 INITIAL_SCENE = None |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
36 |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
37 # list of game scenes |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
38 SCENE_LIST = None |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
39 |
599
2d2ea51b73ad
Move menu.py and endscreen.py to gamelib. Add default versions for new games
Neil Muller <neil@dip.sun.ac.za>
parents:
598
diff
changeset
|
40 # starting menu |
614
974cc69d3762
Special cases aren't special enough to be named special.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
613
diff
changeset
|
41 SCREENS = { |
974cc69d3762
Special cases aren't special enough to be named special.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
613
diff
changeset
|
42 'menu': DefMenuScreen, |
974cc69d3762
Special cases aren't special enough to be named special.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
613
diff
changeset
|
43 'end': DefEndScreen, |
974cc69d3762
Special cases aren't special enough to be named special.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
613
diff
changeset
|
44 } |
599
2d2ea51b73ad
Move menu.py and endscreen.py to gamelib. Add default versions for new games
Neil Muller <neil@dip.sun.ac.za>
parents:
598
diff
changeset
|
45 |
608
a25cd1c6335a
Pass screens through engine by name
Neil Muller <neil@dip.sun.ac.za>
parents:
603
diff
changeset
|
46 START_SCREEN = 'menu' |
599
2d2ea51b73ad
Move menu.py and endscreen.py to gamelib. Add default versions for new games
Neil Muller <neil@dip.sun.ac.za>
parents:
598
diff
changeset
|
47 |
749
a453731e4531
Game-defined scene module
Stefano Rivera <stefano@rivera.za.net>
parents:
739
diff
changeset
|
48 # Modules |
a453731e4531
Game-defined scene module
Stefano Rivera <stefano@rivera.za.net>
parents:
739
diff
changeset
|
49 RESOURCE_MODULE = 'data' |
a453731e4531
Game-defined scene module
Stefano Rivera <stefano@rivera.za.net>
parents:
739
diff
changeset
|
50 SCENE_MODULE = 'gamelib.scenes' |
569
0587f11ff435
Link up Resource module.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
568
diff
changeset
|
51 |
750
ef4bda7d623d
Better state and inventory management.
Jeremy Thurgood <firxen@gmail.com>
parents:
749
diff
changeset
|
52 def __init__(self): |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
53 if self.INITIAL_SCENE is None: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
54 raise GameDescriptionError("A game must have an initial scene.") |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
55 if not self.SCENE_LIST: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
56 raise GameDescriptionError("A game must have a non-empty list" |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
57 " of scenes.") |
614
974cc69d3762
Special cases aren't special enough to be named special.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
613
diff
changeset
|
58 if 'game' in self.SCREENS: |
974cc69d3762
Special cases aren't special enough to be named special.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
613
diff
changeset
|
59 raise GameDescriptionError("The 'game' screen is reserved for the" |
974cc69d3762
Special cases aren't special enough to be named special.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
613
diff
changeset
|
60 " game itself.") |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
61 self._initial_scene = self.INITIAL_SCENE |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
62 self._scene_list = self.SCENE_LIST |
569
0587f11ff435
Link up Resource module.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
568
diff
changeset
|
63 self._resource_module = self.RESOURCE_MODULE |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
64 self._debug_rects = False |
614
974cc69d3762
Special cases aren't special enough to be named special.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
613
diff
changeset
|
65 self._screens = self.SCREENS.copy() |
974cc69d3762
Special cases aren't special enough to be named special.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
613
diff
changeset
|
66 self._screens['game'] = GameScreen |
769
43b49f1de828
Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents:
758
diff
changeset
|
67 self.constants = self.game_constants() |
43b49f1de828
Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents:
758
diff
changeset
|
68 |
43b49f1de828
Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents:
758
diff
changeset
|
69 locale.setlocale(locale.LC_ALL, "") |
784
29c5badeef98
Use getdefaultlocale, with a envvar list, so that it'll take LANGUAGE first, over LANG
Stefano Rivera <stefano@rivera.za.net>
parents:
782
diff
changeset
|
70 lang = locale.getdefaultlocale(['LANGUAGE', 'LC_ALL', 'LC_CTYPE', |
29c5badeef98
Use getdefaultlocale, with a envvar list, so that it'll take LANGUAGE first, over LANG
Stefano Rivera <stefano@rivera.za.net>
parents:
782
diff
changeset
|
71 'LANG'])[0] |
769
43b49f1de828
Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents:
758
diff
changeset
|
72 self.resource = Resources(self._resource_module, lang) |
792
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
73 gettext.bindtextdomain(self.constants.short_name, |
769
43b49f1de828
Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents:
758
diff
changeset
|
74 self.resource.get_resource_path('locale')) |
792
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
75 gettext.textdomain(self.constants.short_name) |
769
43b49f1de828
Merge i18n for before the pyntnclick split
Stefano Rivera <stefano@rivera.za.net>
parents:
758
diff
changeset
|
76 |
786
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
77 self._check_translations() |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
78 |
564 | 79 self.sound = Sound(self.resource) |
594 | 80 self.debug_options = [] |
673
f67bc162d69e
Working resume button
Stefano Rivera <stefano@rivera.za.net>
parents:
661
diff
changeset
|
81 self.running = False |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
82 |
786
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
83 def _check_translations(self): |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
84 """Check for outdated mo files""" |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
85 popath = self.resource.get_resource_path('po') |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
86 mopath = self.resource.get_resource_path('locale') |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
87 for candidate in os.listdir(popath): |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
88 if candidate.endswith('.po'): |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
89 polang = candidate.split('.', 1)[0] |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
90 pofile = os.path.join(popath, candidate) |
792
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
91 mofile = gettext.find(self.constants.short_name, mopath, |
786
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
92 (polang,)) |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
93 if mofile is None: |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
94 print 'Missing mo file for %s' % pofile |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
95 continue |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
96 if os.stat(pofile).st_mtime > os.stat(mofile).st_mtime: |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
97 print 'po file %s is newer than mo file %s' % (pofile, |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
98 mofile) |
fb8c146017a9
Add warnings for 'po file is older than mo file' and 'mo file missing'
Neil Muller <neil@dip.sun.ac.za>
parents:
785
diff
changeset
|
99 |
792
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
100 def initial_state(self, game_state=None): |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
101 """Create a copy of the initial game state.""" |
792
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
102 initial_state = state.Game(self, self.game_state_class()(game_state)) |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
103 initial_state.set_debug_rects(self._debug_rects) |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
104 for scene in self._scene_list: |
612
cfc16ded7b34
Fix scene/screen confusion
Neil Muller <neil@dip.sun.ac.za>
parents:
608
diff
changeset
|
105 initial_state.load_scenes(scene) |
792
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
106 if initial_state.data['current_scene'] is None: |
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
107 initial_state.data.set_current_scene(self._initial_scene) |
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
108 initial_state.change_scene(initial_state.data['current_scene']) |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
109 return initial_state |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
110 |
792
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
111 def game_state_class(self): |
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
112 return state.GameState |
750
ef4bda7d623d
Better state and inventory management.
Jeremy Thurgood <firxen@gmail.com>
parents:
749
diff
changeset
|
113 |
576
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
570
diff
changeset
|
114 def game_constants(self): |
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
570
diff
changeset
|
115 return GameConstants() |
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
570
diff
changeset
|
116 |
556
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
117 def option_parser(self): |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
118 parser = OptionParser() |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
119 parser.add_option("--no-sound", action="store_false", default=True, |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
120 dest="sound", help="disable sound") |
594 | 121 # We flag these, so we can warn the user that these require debug mode |
122 self.debug_options = ['--scene', '--no-rects', '--rect-drawer', | |
123 '--list-scenes', '--details'] | |
576
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
570
diff
changeset
|
124 if self.constants.debug: |
556
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
125 parser.add_option("--scene", type="str", default=None, |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
126 dest="scene", help="initial scene") |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
127 parser.add_option("--no-rects", action="store_false", default=True, |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
128 dest="rects", help="disable debugging rects") |
589
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
129 parser.add_option("--rect-drawer", action="store_true", |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
130 default=False, dest="rect_drawer", |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
131 help="Launch the rect drawing helper tool. Specify the" |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
132 " scene with --scene") |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
133 parser.add_option("--list-scenes", action="store_true", |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
134 default=False, dest='list_scenes', help="List all scenes" |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
135 " that can be used with --scene and exit.") |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
136 parser.add_option("--detail", type="str", default=None, |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
137 dest="detail", help="Detailed view for rect_drawer") |
556
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
138 return parser |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
139 |
594 | 140 def warn_debug(self, option): |
141 """Warn the user that he needs debug mode""" | |
142 print '%s is only valid in debug mode' % option | |
143 print 'set %s to enable debug mode' % DEBUG_ENVVAR | |
144 print | |
145 | |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
146 def main(self): |
556
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
147 parser = self.option_parser() |
594 | 148 # This is a bit hack'ish, but works |
149 if not self.constants.debug: | |
150 for option in self.debug_options: | |
151 if option in sys.argv: | |
152 self.warn_debug(option) | |
782
6a3440c8be8d
The title needs to be lazily translated. It's evaluated before we set up gettext
Stefano Rivera <stefano@rivera.za.net>
parents:
772
diff
changeset
|
153 opts, args = parser.parse_args(sys.argv) |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
154 pygame.display.init() |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
155 pygame.font.init() |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
156 if opts.sound: |
576
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
570
diff
changeset
|
157 self.sound.enable_sound(self.constants) |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
158 else: |
564 | 159 self.sound.disable_sound() |
576
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
570
diff
changeset
|
160 if self.constants.debug: |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
161 if opts.scene is not None: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
162 # debug the specified scene |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
163 self._initial_scene = opts.scene |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
164 self._debug_rects = opts.rects |
590
a77dd4619176
Fix to work when debug is not enabled
Neil Muller <neil@dip.sun.ac.za>
parents:
589
diff
changeset
|
165 if self.constants.debug and opts.list_scenes: |
758
f4853f817a7a
Refactor scene listing, to avoid having to create a window
Stefano Rivera <stefano@rivera.za.net>
parents:
750
diff
changeset
|
166 list_scenes(self.SCENE_MODULE, self._scene_list) |
589
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
167 sys.exit(0) |
590
a77dd4619176
Fix to work when debug is not enabled
Neil Muller <neil@dip.sun.ac.za>
parents:
589
diff
changeset
|
168 if self.constants.debug and opts.rect_drawer: |
589
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
169 if opts.scene is None: |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
170 print 'Need to supply a scene to use the rect drawer' |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
171 sys.exit(1) |
795
42cfafa20437
Add the rest of the commit
Neil Muller <neil@dip.sun.ac.za>
parents:
792
diff
changeset
|
172 gettext.bindtextdomain('pyntnclick_tools', |
42cfafa20437
Add the rest of the commit
Neil Muller <neil@dip.sun.ac.za>
parents:
792
diff
changeset
|
173 self.resource.get_resource_path('locale')) |
661
5dc866e1d71d
Misc pep8 and pyflakes fixes
Neil Muller <neil@dip.sun.ac.za>
parents:
655
diff
changeset
|
174 make_rect_display() |
589
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
175 try: |
691
60bf20849231
Fix detail loading in rect_drawer. Improve error reporting when loading fails
Neil Muller <neil@dip.sun.ac.za>
parents:
673
diff
changeset
|
176 self.engine = RectEngine(self, opts.detail) |
60bf20849231
Fix detail loading in rect_drawer. Improve error reporting when loading fails
Neil Muller <neil@dip.sun.ac.za>
parents:
673
diff
changeset
|
177 except RectDrawerError, e: |
60bf20849231
Fix detail loading in rect_drawer. Improve error reporting when loading fails
Neil Muller <neil@dip.sun.ac.za>
parents:
673
diff
changeset
|
178 print 'RectDrawer failed with: %s' % e |
589
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
179 sys.exit(1) |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
180 else: |
600
fabce47e542f
Stop using albow (at least for the menu). Breaks the world. Please fix it, kthx
Stefano Rivera <stefano@rivera.za.net>
parents:
599
diff
changeset
|
181 pygame.display.set_mode(self.constants.screen, SWSURFACE) |
732
4f34b36ee7c5
Add constants subclass to gamelib, and get the title + icon from it
Stefano Rivera <stefano@rivera.za.net>
parents:
692
diff
changeset
|
182 if self.constants.icon: |
4f34b36ee7c5
Add constants subclass to gamelib, and get the title + icon from it
Stefano Rivera <stefano@rivera.za.net>
parents:
692
diff
changeset
|
183 pygame.display.set_icon(self.resource.get_image( |
4f34b36ee7c5
Add constants subclass to gamelib, and get the title + icon from it
Stefano Rivera <stefano@rivera.za.net>
parents:
692
diff
changeset
|
184 self.constants.icon, basedir='icons')) |
4f34b36ee7c5
Add constants subclass to gamelib, and get the title + icon from it
Stefano Rivera <stefano@rivera.za.net>
parents:
692
diff
changeset
|
185 if self.constants.title: |
782
6a3440c8be8d
The title needs to be lazily translated. It's evaluated before we set up gettext
Stefano Rivera <stefano@rivera.za.net>
parents:
772
diff
changeset
|
186 title = _(self.constants.title).encode('utf-8') |
6a3440c8be8d
The title needs to be lazily translated. It's evaluated before we set up gettext
Stefano Rivera <stefano@rivera.za.net>
parents:
772
diff
changeset
|
187 pygame.display.set_caption(title) |
589
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
188 |
608
a25cd1c6335a
Pass screens through engine by name
Neil Muller <neil@dip.sun.ac.za>
parents:
603
diff
changeset
|
189 self.engine = Engine(self) |
a25cd1c6335a
Pass screens through engine by name
Neil Muller <neil@dip.sun.ac.za>
parents:
603
diff
changeset
|
190 # Initialize the special screens in the engine |
614
974cc69d3762
Special cases aren't special enough to be named special.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
613
diff
changeset
|
191 for name, cls in self._screens.iteritems(): |
608
a25cd1c6335a
Pass screens through engine by name
Neil Muller <neil@dip.sun.ac.za>
parents:
603
diff
changeset
|
192 screen = cls(self) |
a25cd1c6335a
Pass screens through engine by name
Neil Muller <neil@dip.sun.ac.za>
parents:
603
diff
changeset
|
193 self.engine.add_screen(name, screen) |
600
fabce47e542f
Stop using albow (at least for the menu). Breaks the world. Please fix it, kthx
Stefano Rivera <stefano@rivera.za.net>
parents:
599
diff
changeset
|
194 # Should we allow the menu not to be the opening screen? |
608
a25cd1c6335a
Pass screens through engine by name
Neil Muller <neil@dip.sun.ac.za>
parents:
603
diff
changeset
|
195 self.engine.set_screen(self.START_SCREEN) |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
196 try: |
608
a25cd1c6335a
Pass screens through engine by name
Neil Muller <neil@dip.sun.ac.za>
parents:
603
diff
changeset
|
197 self.engine.run() |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
198 except KeyboardInterrupt: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
199 pass |
792
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
200 |
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
201 def get_default_save_location(self): |
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
202 """Return a default save game location.""" |
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
203 app = self.constants.short_name |
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
204 if sys.platform.startswith("win"): |
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
205 if "APPDATA" in os.environ: |
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
206 return os.path.join(os.environ["APPDATA"], app) |
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
207 return os.path.join(os.path.expanduser("~"), "." + app) |
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
208 elif 'XDG_DATA_HOME' in os.environ: |
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
209 return os.path.join(os.environ["XDG_DATA_HOME"], app) |
bdaffaa8b6bf
Loading and saving! (Plus a bunch of other stuff to make it possible.)
Jeremy Thurgood <firxen@gmail.com>
parents:
786
diff
changeset
|
210 return os.path.join(os.path.expanduser("~"), ".local", "share", app) |