Mercurial > sypikslang
annotate gamelib/game_base.py @ 88:74ce25ec2073
Autosave & load support
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Wed, 09 May 2012 20:07:14 +0200 |
parents | b503ccb0a86e |
children | 245ef50de84d |
rev | line source |
---|---|
88 | 1 import sys |
2 import os | |
45
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
3 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
4 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
5 def get_subclasses(base_class, leaf_only=True): |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
6 subclasses = [] |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
7 for cls in base_class.__subclasses__(): |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
8 if leaf_only and cls.__subclasses__(): |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
9 # Not a leaf class, and only want leaves |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
10 continue |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
11 subclasses.append(cls) |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
12 return subclasses |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
13 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
14 |
88 | 15 def get_save_filename(): |
16 """Determine the base filename for auto saves""" | |
17 app = "sypikslang" | |
18 if sys.platform.startswith('win'): | |
19 if "APPDATA" in os.environ: | |
20 base = os.path.join(os.environ["APPDATA"], app) | |
21 else: | |
22 base = os.path.join(os.path.expanduser("~"), "." + app) | |
23 elif 'XDG_DATA_HOME' in os.environ: | |
24 base = os.path.join(os.environ["XDG_DATA_HOME"], app) | |
25 else: | |
26 base = os.path.join(os.path.expanduser("~"), ".local", "share", app) | |
27 if not os.path.exists(base): | |
28 os.makedirs(base, mode=0770) | |
29 if os.path.isdir(base): | |
30 return os.path.join(base, 'gamestate.json') | |
31 print 'save game directory is not a directory %s' % base | |
32 return None | |
33 | |
34 | |
45
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
35 class Science(object): |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
36 NAME = None |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
37 PREREQUISITES = () |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
38 ACQUISITION_CHANCE = 1.0 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
39 SCIENCE_TYPE = None |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
40 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
41 def __init__(self, points=0): |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
42 self.points = points |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
43 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
44 def spend_point(self): |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
45 self.points += 1 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
46 |
58
52913ba12988
Check for multiple points in can_spend
Neil Muller <drnlmuller@gmail.com>
parents:
47
diff
changeset
|
47 def can_spend(self, lab, spend): |
45
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
48 return True |
46
d3d277a42ac6
Less getattr/isinstance silliness.
Jeremy Thurgood <firxen@gmail.com>
parents:
45
diff
changeset
|
49 |
d3d277a42ac6
Less getattr/isinstance silliness.
Jeremy Thurgood <firxen@gmail.com>
parents:
45
diff
changeset
|
50 @classmethod |
73
b503ccb0a86e
Only one schematic per turn, please.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
51 def depends_on(self, sciences): |
b503ccb0a86e
Only one schematic per turn, please.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
52 for science_class, _ in self.PREREQUISITES: |
b503ccb0a86e
Only one schematic per turn, please.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
53 if any(isinstance(science, science_class) for science in sciences): |
b503ccb0a86e
Only one schematic per turn, please.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
54 return True |
b503ccb0a86e
Only one schematic per turn, please.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
55 return False |
b503ccb0a86e
Only one schematic per turn, please.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
56 |
b503ccb0a86e
Only one schematic per turn, please.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
57 @classmethod |
46
d3d277a42ac6
Less getattr/isinstance silliness.
Jeremy Thurgood <firxen@gmail.com>
parents:
45
diff
changeset
|
58 def save_name(cls): |
d3d277a42ac6
Less getattr/isinstance silliness.
Jeremy Thurgood <firxen@gmail.com>
parents:
45
diff
changeset
|
59 return "%s.%s" % (cls.SCIENCE_TYPE, cls.__name__) |
47 | 60 |
61 def save_data(self): | |
62 return (self.save_name(), self.points) |