diff skaapsteker/sprites/base.py @ 621:851c8726696c

More cleanup. Mostly using utils.c* instead of doing things the long way.
author Jeremy Thurgood <firxen@gmail.com>
date Fri, 06 May 2011 17:54:24 +0200
parents 1386cae4cc15
children da331c80ec08
line wrap: on
line diff
--- a/skaapsteker/sprites/base.py	Fri May 06 16:59:23 2011 +0200
+++ b/skaapsteker/sprites/base.py	Fri May 06 17:54:24 2011 +0200
@@ -6,12 +6,13 @@
 from pygame import Rect
 import pygame.transform
 
+from .. import data
+from .. import dialogue
+from .. import sound
 from ..physics import Sprite
 from ..constants import Layers
 from ..engine import OpenDialog, AddSpriteEvent, OpenNotification
-from .. import data
-from .. import dialogue
-from .. import sound
+from ..utils import cadd, csub, cmul, cdiv
 
 
 TILE_SIZE = (64, 64)
@@ -26,6 +27,10 @@
     OpenNotification.post(text=text)
 
 
+def tile_midbottom(pos):
+    return cadd(cmul(pos, TILE_SIZE), cdiv(TILE_SIZE, (2, 1)))
+
+
 class GameSprite(Sprite):
     image_dir = 'sprites/'
     image_file = None
@@ -41,7 +46,7 @@
 
     def setup_image_data(self, pos):
         self.image = data.load_image(self.image_dir + self.image_file)
-        self.rect = self.image.get_rect(midbottom=(pos[0]*TILE_SIZE[0]+TILE_SIZE[0]/2, (pos[1]+1)*TILE_SIZE[1]))
+        self.rect = self.image.get_rect(midbottom=tile_midbottom(pos))
         self.collide_rect = self.rect.move(0, 0)
 
 
@@ -96,7 +101,7 @@
         if isinstance(pos, pygame.Rect):
             self.collide_rect.midbottom = pos.midbottom
         else:
-            self.collide_rect.midbottom = (pos[0]*TILE_SIZE[0]+TILE_SIZE[0]/2, (pos[1]+1)*TILE_SIZE[1])
+            self.collide_rect.midbottom = tile_midbottom(pos)
         self._update_image()
         self.setup(**opts)
 
@@ -116,8 +121,8 @@
         cur_pos = self.collide_rect.midbottom
 
         cand_rect = cand_image.get_rect()
-        cand_rect_offset = cand_rect.centerx - cand_collide_rect.centerx, cand_rect.bottom - cand_collide_rect.bottom
-        cand_rect.midbottom = cur_pos[0] + cand_rect_offset[0], cur_pos[1] + cand_rect_offset[1]
+        cand_rect_offset = csub(cand_rect.midbottom, cand_collide_rect.midbottom)
+        cand_rect.midbottom = cadd(cur_pos, cand_rect_offset)
         cand_collide_rect.midbottom = cur_pos
 
         if not self.check_collide_rect(cand_collide_rect, cand_rect, cand_image) and not force:
@@ -337,11 +342,11 @@
             self.hits = (hits, Geography)
 
         if self.facing == "left":
-            shift = (-self.PROJECTILE_SIZE[0] / 2, self.PROJECTILE_SIZE[1])
-            dv = (-self.VELOCITY[0], self.VELOCITY[1])
+            shift = cdiv(self.PROJECTILE_SIZE, (-2, 1))
+            dv = cmul(self.VELOCITY, (-1, 1))
         else:
-            shift = (self.PROJECTILE_SIZE[0] / 2, self.PROJECTILE_SIZE[1])
-            dv = (self.VELOCITY[0], self.VELOCITY[1])
+            shift = cdiv(self.PROJECTILE_SIZE, (2, 1))
+            dv = cmul(self.VELOCITY, (1, 1))
 
         self.rect.move_ip(shift)
         self.collide_rect.move_ip(shift)
@@ -410,10 +415,10 @@
         self.collide_rect = self.image.get_bounding_rect(1)
         self.floor_rect = Rect(self.collide_rect.topleft, (self.collide_rect.width, 2))
         self.rect = self.image.get_rect()
-        self.rect_offset = self.collide_rect.left - self.rect.left, self.rect.top - self.rect.top
-        self.collide_rect.topleft = pos[0] * TILE_SIZE[0] + self.rect_offset[0], pos[1] * TILE_SIZE[1] + self.rect_offset[1]
-        self.floor_rect.topleft = pos[0] * TILE_SIZE[0] + self.rect_offset[0], pos[1] * TILE_SIZE[1] + self.rect_offset[1]
-        self.rect.topleft = pos[0] * TILE_SIZE[0], pos[1] * TILE_SIZE[1]
+        self.rect_offset = csub(self.collide_rect.topleft, self.rect.topleft)
+        self.rect.topleft = cmul(pos, TILE_SIZE)
+        self.collide_rect.topleft = cadd(self.rect.topleft, self.rect_offset)
+        self.floor_rect.topleft = cadd(self.rect.topleft, self.rect_offset)
 
     def get_debug_color(self):
         if self.floor or self.block:
@@ -465,7 +470,7 @@
 
     def setup_image_data(self, pos):
         self.image = pygame.Surface((0, 0))
-        self.rect = self.image.get_rect(midbottom=(pos[0]*TILE_SIZE[0]+TILE_SIZE[0]/2, (pos[1]+1)*TILE_SIZE[1]))
+        self.rect = self.image.get_rect(midbottom=tile_midbottom(pos))
         self.collide_rect = self.rect.move(0, 0)