Mercurial > mamba
annotate mamba/options.py @ 536:7fd6ecb72fd7
Add some stuff about the level editor
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Sun, 18 Sep 2011 01:18:48 +0200 |
parents | d759f49c477d |
children | fca61cd8fc33 |
rev | line source |
---|---|
39 | 1 # global options that are set on startup |
2 | |
3 import optparse | |
4 import os | |
166
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
5 import sys |
39 | 6 from mamba.constants import DEFAULTS |
7 | |
8 | |
9 class OptionGetter(object): | |
10 """Object grabber.""" | |
11 | |
12 def __init__(self, options): | |
13 self._options = options | |
14 self._finalized = False | |
15 | |
16 def set_option(self, name, value): | |
17 if self._finalized: | |
18 raise RuntimeError("Cannot set option %r to %r after" | |
19 "options are finalized." % (name, value)) | |
20 self._options[name] = value | |
21 | |
22 def finalize(self): | |
23 self._finalized = True | |
24 | |
25 def __getattr__(self, name): | |
26 if name in self._options: | |
27 return self._options[name] | |
28 raise AttributeError("Unknown option %r" % (name,)) | |
29 | |
30 options = OptionGetter(DEFAULTS.copy()) | |
31 | |
32 | |
33 def parse_args(args, options=options): | |
34 options.set_option('debug', 'DEBUG' in os.environ) | |
35 | |
36 parser = optparse.OptionParser() | |
37 parser.add_option("--no-sound", action="store_false", default=True, | |
38 dest="sound", help="disable sound") | |
166
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
39 parser.add_option("--save-location", default=_get_default_save_location(), |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
40 dest="save_location", help="Saved game location") |
39 | 41 |
42 if options.debug: | |
43 parser.add_option("--level", type="str", default=None, | |
44 dest="level", help="Initial level") | |
45 parser.add_option('--edit', action="store_true", default=False, | |
46 dest="edit", help="Edit given level") | |
362
cc8be536a7fc
Add ability to play uncurated levels via the command line.
Simon Cross <hodgestar@gmail.com>
parents:
166
diff
changeset
|
47 parser.add_option("--uncurated", type="str", default=None, |
cc8be536a7fc
Add ability to play uncurated levels via the command line.
Simon Cross <hodgestar@gmail.com>
parents:
166
diff
changeset
|
48 dest="uncurated", help="Load uncurated level " |
cc8be536a7fc
Add ability to play uncurated levels via the command line.
Simon Cross <hodgestar@gmail.com>
parents:
166
diff
changeset
|
49 "from the web by name.") |
366
d759f49c477d
Option for printing list of uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents:
362
diff
changeset
|
50 parser.add_option("--list-uncurated", action="store_true", |
d759f49c477d
Option for printing list of uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents:
362
diff
changeset
|
51 default=False, dest="list_uncurated", |
d759f49c477d
Option for printing list of uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents:
362
diff
changeset
|
52 help="List uncurated levels.") |
39 | 53 |
54 opts, _ = parser.parse_args(args) | |
55 | |
56 options.set_option('sound', opts.sound) | |
166
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
57 options.set_option('save_location', opts.save_location) |
39 | 58 |
59 if options.debug: | |
60 options.set_option('level', opts.level) | |
362
cc8be536a7fc
Add ability to play uncurated levels via the command line.
Simon Cross <hodgestar@gmail.com>
parents:
166
diff
changeset
|
61 options.set_option('uncurated', opts.uncurated) |
366
d759f49c477d
Option for printing list of uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents:
362
diff
changeset
|
62 options.set_option('list_uncurated', opts.list_uncurated) |
39 | 63 options.set_option('edit', opts.edit) |
64 | |
65 options.finalize() | |
48
a70ded879f46
Move argument checking into mamba.options.
Simon Cross <hodgestar@gmail.com>
parents:
39
diff
changeset
|
66 |
a70ded879f46
Move argument checking into mamba.options.
Simon Cross <hodgestar@gmail.com>
parents:
39
diff
changeset
|
67 |
a70ded879f46
Move argument checking into mamba.options.
Simon Cross <hodgestar@gmail.com>
parents:
39
diff
changeset
|
68 def check_args(options=options): |
a70ded879f46
Move argument checking into mamba.options.
Simon Cross <hodgestar@gmail.com>
parents:
39
diff
changeset
|
69 """Check options and complain if they're invalid.""" |
a70ded879f46
Move argument checking into mamba.options.
Simon Cross <hodgestar@gmail.com>
parents:
39
diff
changeset
|
70 if options.edit and options.level is None: |
a70ded879f46
Move argument checking into mamba.options.
Simon Cross <hodgestar@gmail.com>
parents:
39
diff
changeset
|
71 print "You must supply --level when using --edit." |
a70ded879f46
Move argument checking into mamba.options.
Simon Cross <hodgestar@gmail.com>
parents:
39
diff
changeset
|
72 return False |
a70ded879f46
Move argument checking into mamba.options.
Simon Cross <hodgestar@gmail.com>
parents:
39
diff
changeset
|
73 return True |
166
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
74 |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
75 |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
76 def _get_default_save_location(): |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
77 """Return a default save game location.""" |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
78 app = "mamba" |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
79 if sys.platform.startswith("win"): |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
80 if "APPDATA" in os.environ: |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
81 return os.path.join(os.environ["APPDATA"], app) |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
82 return os.path.join(os.path.expanduser("~"), "." + app) |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
83 elif 'XDG_DATA_HOME' in os.environ: |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
84 return os.path.join(os.environ["XDG_DATA_HOME"], app) |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
48
diff
changeset
|
85 return os.path.join(os.path.expanduser("~"), ".local", "share", app) |