Mercurial > sypikslang
view 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 |
line wrap: on
line source
# -*- test-case-name: gamelib.tests.test_lab -*- from gamelib import research, products class Lab(object): def __init__(self): self.science = [] self.new_research = research.ResearchArea.__subclasses__() self.new_products = products.Product.__subclasses__() def spend_points(self, things, basic_research): new_stuff = [] for thing in things: assert thing in self.science thing.spend_points(1) if isinstance(thing, research.ResearchArea): new_stuff.extend(self.find_new_product(thing)[:1]) new_stuff.extend(self.try_basic_research(basic_research)[:1]) return new_stuff def _get_science(self, science_class): for science in self.science: if isinstance(science, science_class): return science return None def _meet_requirements(self, science_class): for science, level in science_class.PREREQUISITES: my_science = self._get_science(science) if my_science is None: return False if my_science.points < level: return False return True def find_new_products(self, research_area): available_products = [] for product_class in self.new_products: if self._meet_requirements(product_class): available_products.append(product_class) return available_products def find_new_research(self, basic_research): available_research = [] for research_class in self.new_research: if self._meet_requirements(research_class): available_research.append(research_class) return available_research