# HG changeset patch # User Jeremy Thurgood # Date 1336417668 -7200 # Node ID d3d277a42ac60b18e087d9c8ff4cb4af84ccee55 # Parent 1e8f7e694f0ce8caeb8ced88bd0dd4c1fb648572 Less getattr/isinstance silliness. diff -r 1e8f7e694f0c -r d3d277a42ac6 gamelib/game_base.py --- a/gamelib/game_base.py Mon May 07 20:44:27 2012 +0200 +++ b/gamelib/game_base.py Mon May 07 21:07:48 2012 +0200 @@ -24,3 +24,7 @@ def can_spend(self, lab): return True + + @classmethod + def save_name(cls): + return "%s.%s" % (cls.SCIENCE_TYPE, cls.__name__) diff -r 1e8f7e694f0c -r d3d277a42ac6 gamelib/lab.py --- a/gamelib/lab.py Mon May 07 20:44:27 2012 +0200 +++ b/gamelib/lab.py Mon May 07 21:07:48 2012 +0200 @@ -23,21 +23,21 @@ self._choose_initial_science() def _load_data(self, init_data): - for name, points in init_data['science'].iteritems(): - science_type, cls = name.split('.') - if science_type == 'product': - science = getattr(products, cls) - elif science_type == 'research': - science = getattr(research, cls) - else: - raise ValueError("Unknown science type: %s" % (science_type,)) - self._gain_science(science(points)) + sciences = init_data['science'].copy() + for science in self.new_products + self.new_research: + # Check if this science is one we should know. + points = sciences.pop(science.save_name(), None) + if points is not None: + # It is! Learn it. + self._gain_science(science(points)) + if sciences: + # We're supposed to know an unknowable thing. :-( + raise ValueError("Unknown science: %s" % (sciences.keys(),)) def save_data(self): data = {'science': {}} for science in self.science: - name = "%s.%s" % (science.SCIENCE_TYPE, type(science).__name__) - data['science'][name] = science.points + data['science'][science.save_name()] = science.points return data def _choose_initial_science(self):