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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14
9d61abb3cfaf Better subclass handling.
Jeremy Thurgood <firxen@gmail.com>
parents: 9
diff changeset
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
9d61abb3cfaf Better subclass handling.
Jeremy Thurgood <firxen@gmail.com>
parents: 9
diff changeset
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
9d61abb3cfaf Better subclass handling.
Jeremy Thurgood <firxen@gmail.com>
parents: 9
diff changeset
9 self.new_research = research.ResearchArea.__subclasses__()
9d61abb3cfaf Better subclass handling.
Jeremy Thurgood <firxen@gmail.com>
parents: 9
diff changeset
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
b132a56ae4d4 Lab tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 6
diff changeset
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
b132a56ae4d4 Lab tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 6
diff changeset
18 new_stuff.extend(self.find_new_product(thing)[:1])
b132a56ae4d4 Lab tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 6
diff changeset
19 new_stuff.extend(self.try_basic_research(basic_research)[:1])
b132a56ae4d4 Lab tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 6
diff changeset
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
9d61abb3cfaf Better subclass handling.
Jeremy Thurgood <firxen@gmail.com>
parents: 9
diff changeset
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
9d61abb3cfaf Better subclass handling.
Jeremy Thurgood <firxen@gmail.com>
parents: 9
diff changeset
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