Mercurial > sypikslang
annotate gamelib/game_base.py @ 87:d93e1ea2bd0d
Fix method name assumption bug
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Wed, 09 May 2012 20:06:44 +0200 |
parents | b503ccb0a86e |
children | 74ce25ec2073 |
rev | line source |
---|---|
45
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
1 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
2 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
3 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
|
4 subclasses = [] |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
5 for cls in base_class.__subclasses__(): |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
6 if leaf_only and cls.__subclasses__(): |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
7 # 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
|
8 continue |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
9 subclasses.append(cls) |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
10 return subclasses |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
11 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
12 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
13 class Science(object): |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
14 NAME = None |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
15 PREREQUISITES = () |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
16 ACQUISITION_CHANCE = 1.0 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
17 SCIENCE_TYPE = None |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
18 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
19 def __init__(self, points=0): |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
20 self.points = points |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
21 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
22 def spend_point(self): |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
23 self.points += 1 |
1e8f7e694f0c
Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
24 |
58
52913ba12988
Check for multiple points in can_spend
Neil Muller <drnlmuller@gmail.com>
parents:
47
diff
changeset
|
25 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
|
26 return True |
46
d3d277a42ac6
Less getattr/isinstance silliness.
Jeremy Thurgood <firxen@gmail.com>
parents:
45
diff
changeset
|
27 |
d3d277a42ac6
Less getattr/isinstance silliness.
Jeremy Thurgood <firxen@gmail.com>
parents:
45
diff
changeset
|
28 @classmethod |
73
b503ccb0a86e
Only one schematic per turn, please.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
29 def depends_on(self, sciences): |
b503ccb0a86e
Only one schematic per turn, please.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
30 for science_class, _ in self.PREREQUISITES: |
b503ccb0a86e
Only one schematic per turn, please.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
31 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
|
32 return True |
b503ccb0a86e
Only one schematic per turn, please.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
33 return False |
b503ccb0a86e
Only one schematic per turn, please.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
34 |
b503ccb0a86e
Only one schematic per turn, please.
Jeremy Thurgood <firxen@gmail.com>
parents:
58
diff
changeset
|
35 @classmethod |
46
d3d277a42ac6
Less getattr/isinstance silliness.
Jeremy Thurgood <firxen@gmail.com>
parents:
45
diff
changeset
|
36 def save_name(cls): |
d3d277a42ac6
Less getattr/isinstance silliness.
Jeremy Thurgood <firxen@gmail.com>
parents:
45
diff
changeset
|
37 return "%s.%s" % (cls.SCIENCE_TYPE, cls.__name__) |
47 | 38 |
39 def save_data(self): | |
40 return (self.save_name(), self.points) |