diff 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
line wrap: on
line diff
--- a/gamelib/config.py	Wed Nov 25 21:41:08 2009 +0000
+++ b/gamelib/config.py	Wed Nov 25 21:50:54 2009 +0000
@@ -2,6 +2,8 @@
 
 from ConfigParser import RawConfigParser
 from optparse import OptionParser
+import sys
+import os
 
 class Config(object):
     """Container for various global configuration knobs and levers."""
@@ -11,8 +13,6 @@
         'level_name': {'type': 'string', 'default': 'two_weeks'},
         }
 
-    config_filename = 'config.ini'
-
     def configure(self, params=None):
         self._config = RawConfigParser(dict(
                 [(k, v['default']) for k, v in self.valid_options.items() if 'default' in v]
@@ -22,10 +22,19 @@
         self._config.read(self.config_filename)
         self._process_params()
 
+    def ensure_dir_exists(self, folder):
+        """Ensure the given folder exists."""
+        if os.path.exists(folder):
+            assert os.path.isdir(folder)
+        else:
+            os.makedirs(folder)
+
     def _set_up_params(self, params):
         parser = OptionParser()
         parser.add_option("-c", "--config", metavar="FILE", dest="config_filename",
                           help="read configuration from FILE")
+        parser.add_option("-p", "--prefs-folder", metavar="PREFS_FOLDER", dest="prefs_folder",
+                          help="store preferences and save games in PREFS_FOLDER")
         parser.add_option("-l", "--level", metavar="LEVEL", dest="level_name",
                           help="select level LEVEL")
         parser.add_option("--sound", action="store_const", const="on", dest="sound",
@@ -33,7 +42,19 @@
         parser.add_option("--no-sound", action="store_const", const="off", dest="sound",
                           help="disable sound")
         (self._opts, _) = parser.parse_args(params or [])
-        self.config_filename = self._opts.config_filename or self.config_filename
+        self.prefs_folder = self._opts.prefs_folder or self._default_prefs_dir()
+        self.ensure_dir_exists(self.prefs_folder)
+        self.save_folder = os.path.join(self.prefs_folder, "savegames")
+        self.ensure_dir_exists(self.save_folder)
+        self.config_filename = self._opts.config_filename or os.path.join(self.prefs_folder, "config.ini")
+
+    def _default_prefs_dir(self):
+        """Return a default preference folder name."""
+        app = "foxassault"
+        if sys.platform.startswith("win") and "APPDATA" in os.environ:
+            return os.path.join(os.environ["APPDATA"], app)
+        else:
+            return os.path.join(os.path.expanduser("~"), ".%s" % app)
 
     def _process_params(self):
         for name in self.valid_options: