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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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