view gamelib/game_base.py @ 73:b503ccb0a86e

Only one schematic per turn, please.
author Jeremy Thurgood <firxen@gmail.com>
date Wed, 09 May 2012 00:25:58 +0200
parents 52913ba12988
children 74ce25ec2073
line wrap: on
line source



def get_subclasses(base_class, leaf_only=True):
    subclasses = []
    for cls in base_class.__subclasses__():
        if leaf_only and cls.__subclasses__():
            # Not a leaf class, and only want leaves
            continue
        subclasses.append(cls)
    return subclasses


class Science(object):
    NAME = None
    PREREQUISITES = ()
    ACQUISITION_CHANCE = 1.0
    SCIENCE_TYPE = None

    def __init__(self, points=0):
        self.points = points

    def spend_point(self):
        self.points += 1

    def can_spend(self, lab, spend):
        return True

    @classmethod
    def depends_on(self, sciences):
        for science_class, _ in self.PREREQUISITES:
            if any(isinstance(science, science_class) for science in sciences):
                return True
        return False

    @classmethod
    def save_name(cls):
        return "%s.%s" % (cls.SCIENCE_TYPE, cls.__name__)

    def save_data(self):
        return (self.save_name(), self.points)