Mercurial > skaapsteker
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)