Mercurial > rinkhals
comparison gamelib/config.py @ 486:8897a436a8cb
Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Wed, 25 Nov 2009 21:50:54 +0000 |
parents | 03d5cb669298 |
children |
comparison
equal
deleted
inserted
replaced
485:6f0385ebcb4f | 486:8897a436a8cb |
---|---|
1 # level.py | 1 # level.py |
2 | 2 |
3 from ConfigParser import RawConfigParser | 3 from ConfigParser import RawConfigParser |
4 from optparse import OptionParser | 4 from optparse import OptionParser |
5 import sys | |
6 import os | |
5 | 7 |
6 class Config(object): | 8 class Config(object): |
7 """Container for various global configuration knobs and levers.""" | 9 """Container for various global configuration knobs and levers.""" |
8 | 10 |
9 valid_options = { | 11 valid_options = { |
10 'sound': {'type': 'boolean', 'default': 'true'}, | 12 'sound': {'type': 'boolean', 'default': 'true'}, |
11 'level_name': {'type': 'string', 'default': 'two_weeks'}, | 13 'level_name': {'type': 'string', 'default': 'two_weeks'}, |
12 } | 14 } |
13 | |
14 config_filename = 'config.ini' | |
15 | 15 |
16 def configure(self, params=None): | 16 def configure(self, params=None): |
17 self._config = RawConfigParser(dict( | 17 self._config = RawConfigParser(dict( |
18 [(k, v['default']) for k, v in self.valid_options.items() if 'default' in v] | 18 [(k, v['default']) for k, v in self.valid_options.items() if 'default' in v] |
19 )) | 19 )) |
20 self._config.add_section('Options') | 20 self._config.add_section('Options') |
21 self._set_up_params(params) | 21 self._set_up_params(params) |
22 self._config.read(self.config_filename) | 22 self._config.read(self.config_filename) |
23 self._process_params() | 23 self._process_params() |
24 | 24 |
25 def ensure_dir_exists(self, folder): | |
26 """Ensure the given folder exists.""" | |
27 if os.path.exists(folder): | |
28 assert os.path.isdir(folder) | |
29 else: | |
30 os.makedirs(folder) | |
31 | |
25 def _set_up_params(self, params): | 32 def _set_up_params(self, params): |
26 parser = OptionParser() | 33 parser = OptionParser() |
27 parser.add_option("-c", "--config", metavar="FILE", dest="config_filename", | 34 parser.add_option("-c", "--config", metavar="FILE", dest="config_filename", |
28 help="read configuration from FILE") | 35 help="read configuration from FILE") |
36 parser.add_option("-p", "--prefs-folder", metavar="PREFS_FOLDER", dest="prefs_folder", | |
37 help="store preferences and save games in PREFS_FOLDER") | |
29 parser.add_option("-l", "--level", metavar="LEVEL", dest="level_name", | 38 parser.add_option("-l", "--level", metavar="LEVEL", dest="level_name", |
30 help="select level LEVEL") | 39 help="select level LEVEL") |
31 parser.add_option("--sound", action="store_const", const="on", dest="sound", | 40 parser.add_option("--sound", action="store_const", const="on", dest="sound", |
32 help="enable sound") | 41 help="enable sound") |
33 parser.add_option("--no-sound", action="store_const", const="off", dest="sound", | 42 parser.add_option("--no-sound", action="store_const", const="off", dest="sound", |
34 help="disable sound") | 43 help="disable sound") |
35 (self._opts, _) = parser.parse_args(params or []) | 44 (self._opts, _) = parser.parse_args(params or []) |
36 self.config_filename = self._opts.config_filename or self.config_filename | 45 self.prefs_folder = self._opts.prefs_folder or self._default_prefs_dir() |
46 self.ensure_dir_exists(self.prefs_folder) | |
47 self.save_folder = os.path.join(self.prefs_folder, "savegames") | |
48 self.ensure_dir_exists(self.save_folder) | |
49 self.config_filename = self._opts.config_filename or os.path.join(self.prefs_folder, "config.ini") | |
50 | |
51 def _default_prefs_dir(self): | |
52 """Return a default preference folder name.""" | |
53 app = "foxassault" | |
54 if sys.platform.startswith("win") and "APPDATA" in os.environ: | |
55 return os.path.join(os.environ["APPDATA"], app) | |
56 else: | |
57 return os.path.join(os.path.expanduser("~"), ".%s" % app) | |
37 | 58 |
38 def _process_params(self): | 59 def _process_params(self): |
39 for name in self.valid_options: | 60 for name in self.valid_options: |
40 opt = getattr(self._opts, name) | 61 opt = getattr(self._opts, name) |
41 if opt is not None: | 62 if opt is not None: |