Link stats to damage classes.
authorEevee <git@veekun.com>
Thu, 27 May 2010 04:58:18 +0000 (21:58 -0700)
committerEevee <git@veekun.com>
Wed, 2 Jun 2010 07:17:27 +0000 (00:17 -0700)
pokedex/data/csv/stats.csv
pokedex/db/tables.py

index c3d0238..49be037 100644 (file)
@@ -1,7 +1,7 @@
-id,name
-1,HP
-2,Attack
-3,Defense
-4,Special Attack
-5,Special Defense
-6,Speed
+id,damage_class_id,name
+1,,HP
+2,2,Attack
+3,2,Defense
+4,3,Special Attack
+5,3,Special Defense
+6,,Speed
index cc68c5f..2d9c0b8 100644 (file)
@@ -492,7 +492,27 @@ class Pokemon(TableBase):
             if pokemon_stat.stat.name == stat_name:
                 return pokemon_stat
 
-        return None
+        raise KeyError(u'No stat named %s' % stat_name)
+
+    @property
+    def better_damage_class(self):
+        u"""Returns the MoveDamageClass that this Pokémon is best suited for,
+        based on its attack stats.
+
+        If the attack stats are about equal (within 5), returns None.  The
+        value None, not the damage class called 'None'.
+        """
+        phys = self.stat(u'Attack')
+        spec = self.stat(u'Special Attack')
+
+        diff = phys.base_stat - spec.base_stat
+
+        if diff > 5:
+            return phys.stat.damage_class
+        elif diff < -5:
+            return spec.stat.damage_class
+        else:
+            return None
 
 class PokemonAbility(TableBase):
     __tablename__ = 'pokemon_abilities'
@@ -614,6 +634,7 @@ class Region(TableBase):
 class Stat(TableBase):
     __tablename__ = 'stats'
     id = Column(Integer, primary_key=True, nullable=False)
+    damage_class_id = Column(Integer, ForeignKey('move_damage_classes.id'), nullable=True)
     name = Column(Unicode(16), nullable=False)
 
 class SuperContestCombo(TableBase):
@@ -883,6 +904,8 @@ Region.version_group_regions = relation(VersionGroupRegion, backref='region',
                                         order_by='VersionGroupRegion.version_group_id')
 Region.version_groups = association_proxy('version_group_regions', 'version_group')
 
+Stat.damage_class = relation(MoveDamageClass, backref='stats')
+
 SuperContestCombo.first = relation(Move, primaryjoin=SuperContestCombo.first_move_id==Move.id,
                                         backref='super_contest_combo_first')
 SuperContestCombo.second = relation(Move, primaryjoin=SuperContestCombo.second_move_id==Move.id,