Mercurial > sypikslang
annotate gamelib/lab.py @ 6:826b44731323
Start of basic lab implementation.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sun, 06 May 2012 12:48:12 +0200 |
parents | |
children | b132a56ae4d4 |
rev | line source |
---|---|
6
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
1 from gamelib import research, products |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
2 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
3 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
4 def is_subclass(item, superclass): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
5 return ( |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
6 isinstance(item, type) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
7 and issubclass(item, superclass) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
8 and not item is superclass) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
9 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
10 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
11 def list_products(): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
12 for item in dir(products): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
13 # Ugh! |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
14 item = getattr(products, item) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
15 if is_subclass(item, products.Product): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
16 yield item |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
17 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
18 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
19 def list_research(): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
20 for item in dir(research): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
21 # Ugh! |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
22 item = getattr(research, item) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
23 if is_subclass(item, research.ResearchArea): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
24 yield item |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
25 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
26 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
27 class Lab(object): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
28 def __init__(self): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
29 self.science = [] |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
30 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
31 def spend_points(self, things, basic_research): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
32 for thing in things: |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
33 assert thing in self.science |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
34 thing.spend_points(1) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
35 if isinstance(thing, research.ResearchArea): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
36 self.find_new_product(thing) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
37 self.try_basic_research(basic_research) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
38 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
39 def _get_science(self, science_class): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
40 for science in self.science: |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
41 if isinstance(science, science_class): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
42 return science |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
43 return None |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
44 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
45 def _meet_requirements(self, science_class): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
46 for science, level in science_class.PREREQUISITES: |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
47 my_science = self._get_science(science) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
48 if my_science is None: |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
49 return False |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
50 if my_science.points < level: |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
51 return False |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
52 return True |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
53 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
54 def find_new_products(self, research_area): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
55 available_products = [] |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
56 for product_class in list_products(): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
57 if self._get_science(product_class): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
58 continue |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
59 if self._meet_requirements(product_class): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
60 available_products.append(product_class) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
61 return available_products |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
62 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
63 def find_new_research(self, basic_research): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
64 available_research = [] |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
65 for research_class in list_research(): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
66 if self._get_science(research_class): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
67 continue |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
68 if self._meet_requirements(research_class): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
69 available_research.append(research_class) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
70 return available_research |