Mercurial > sypikslang
annotate gamelib/lab.py @ 15:8865ba0c9c38
Add cost to products
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Sun, 06 May 2012 17:04:10 +0200 |
parents | 9d61abb3cfaf |
children | 10d3db1f1e08 |
rev | line source |
---|---|
14 | 1 # -*- test-case-name: gamelib.tests.test_lab -*- |
6
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
2 |
14 | 3 from gamelib import research, products |
6
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
4 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
5 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
6 class Lab(object): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
7 def __init__(self): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
8 self.science = [] |
14 | 9 self.new_research = research.ResearchArea.__subclasses__() |
10 self.new_products = products.Product.__subclasses__() | |
6
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
11 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
12 def spend_points(self, things, basic_research): |
9 | 13 new_stuff = [] |
6
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
14 for thing in things: |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
15 assert thing in self.science |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
16 thing.spend_points(1) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
17 if isinstance(thing, research.ResearchArea): |
9 | 18 new_stuff.extend(self.find_new_product(thing)[:1]) |
19 new_stuff.extend(self.try_basic_research(basic_research)[:1]) | |
20 return new_stuff | |
6
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
21 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
22 def _get_science(self, science_class): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
23 for science in self.science: |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
24 if isinstance(science, science_class): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
25 return science |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
26 return None |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
27 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
28 def _meet_requirements(self, science_class): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
29 for science, level in science_class.PREREQUISITES: |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
30 my_science = self._get_science(science) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
31 if my_science is None: |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
32 return False |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
33 if my_science.points < level: |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
34 return False |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
35 return True |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
36 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
37 def find_new_products(self, research_area): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
38 available_products = [] |
14 | 39 for product_class in self.new_products: |
6
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
40 if self._meet_requirements(product_class): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
41 available_products.append(product_class) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
42 return available_products |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
43 |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
44 def find_new_research(self, basic_research): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
45 available_research = [] |
14 | 46 for research_class in self.new_research: |
6
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
47 if self._meet_requirements(research_class): |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
48 available_research.append(research_class) |
826b44731323
Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
49 return available_research |