changeset 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 6cc0d54df531
children da331c80ec08
files skaapsteker/level.py skaapsteker/levelscene.py skaapsteker/sprites/base.py skaapsteker/sprites/player.py
diffstat 4 files changed, 36 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/skaapsteker/level.py	Fri May 06 16:59:23 2011 +0200
+++ b/skaapsteker/level.py	Fri May 06 17:54:24 2011 +0200
@@ -10,6 +10,7 @@
 from .constants import SCREEN, Layers
 from .sprites.base import TILE_SIZE, find_sprite, Geography
 from .widgets.text import Text
+from .utils import cmul, cdiv, cint, cneg
 
 
 
@@ -83,7 +84,7 @@
             image = data.load_image('backgrounds/' + background)
             clip_rect = Rect((0, 0), self.pixel_size)
             if i == 0:
-                clip_rect = Rect((0, 0), (int(self.pixel_size[0] * 0.75), int(self.pixel_size[1] * 0.75)))
+                clip_rect = Rect((0, 0), (cint(cmul(self.pixel_size, 0.75))))
             clip_rect = clip_rect.clip(image.get_rect())
             clip_rect = clip_rect.union(Rect((0, 0), SCREEN))
             clip_rect.midbottom = image.get_rect().midbottom
@@ -102,7 +103,7 @@
         self.tiles = LayeredUpdates()
         tile_data = self.level_data['tiles']
         self.tile_size = (len(tile_data[0]), len(tile_data))
-        self.pixel_size = (self.tile_size[0] * TILE_SIZE[0], self.tile_size[1] * TILE_SIZE[1])
+        self.pixel_size = cmul(self.tile_size, TILE_SIZE)
         for y, row in enumerate(tile_data):
             for x, char in enumerate(row):
                 tile = self.tileset.get_tile(char, (x, y))
@@ -132,11 +133,9 @@
 
 
     def get_background_pos(self, background, viewport):
-        vp_x, vp_y = viewport.size
-        bg_scalable = background.get_rect().inflate(-vp_x, -vp_y).size
-        lev_scalable = Rect((0, 0), self.pixel_size).inflate(-vp_x, -vp_y).size
-        return ((viewport.left * bg_scalable[0]) / lev_scalable[0],
-                (viewport.top * bg_scalable[1]) / lev_scalable[1])
+        bg_scalable = background.get_rect().inflate(cneg(viewport.size)).size
+        lev_scalable = Rect((0, 0), self.pixel_size).inflate(cneg(viewport.size)).size
+        return cdiv(cmul(viewport.topleft, bg_scalable), lev_scalable)
 
 
     def draw_background(self, surface):
--- a/skaapsteker/levelscene.py	Fri May 06 16:59:23 2011 +0200
+++ b/skaapsteker/levelscene.py	Fri May 06 17:54:24 2011 +0200
@@ -16,6 +16,7 @@
 from .sprites import player, base
 from .widgets.text import Text
 from .widgets.bubble import DialogueWidget, NotificationWidget
+from .utils import cadd, csub, cdiv
 
 
 class LevelScene(engine.Scene):
@@ -40,7 +41,7 @@
         # Prepare a Surface for displaying when Dead
         self._dead_overlay = pygame.Surface(constants.SCREEN, flags=SRCALPHA)
         self._dead_overlay.fill((255, 255, 255, 128))
-        death_text_pos = constants.SCREEN[0] / 2, constants.SCREEN[1] / 2
+        death_text_pos = cdiv(constants.SCREEN, 2)
         death_text = Text("You've died.", death_text_pos, size=24)
         death_text.rect.move_ip(-death_text.rect.width / 2, -death_text.rect.height)
         death_text.draw(self._dead_overlay)
@@ -199,12 +200,12 @@
 
         self._draw_fox_status()
 
-        fps_text_pos = self._clip_rect.left + 10, self._clip_rect.top + 10
+        fps_text_pos = cadd(self._clip_rect.topleft, 10)
         fps_text = Text('FPS: %.1f' % engine.get_fps(), fps_text_pos, shadow='white')
         fps_text.draw(self._level_surface)
 
         if self._paused:
-            paused_text_pos = self._clip_rect.centerx - 10, self._clip_rect.centery - 10
+            paused_text_pos = csub(self._clip_rect.center, 10)
             paused_text = Text('Paused', paused_text_pos)
             paused_text.draw(self._level_surface)
 
--- 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)
 
 
--- a/skaapsteker/sprites/player.py	Fri May 06 16:59:23 2011 +0200
+++ b/skaapsteker/sprites/player.py	Fri May 06 17:54:24 2011 +0200
@@ -9,9 +9,10 @@
 from ..constants import Layers, FoxHud, DOUBLE_TAP_TIME
 from ..data import get_files, load_image
 from ..engine import PlayerDied, AddSpriteEvent, OpenNotification
+from ..utils import cadd
 
 from .base import (find_sprite, Monster, NPC, Item, Doorway, TILE_SIZE,
-                   PC_LAYER, MONSTER_LAYER, PROJECTILE_LAYER)
+                   PC_LAYER, MONSTER_LAYER, PROJECTILE_LAYER, tile_midbottom)
 from .projectiles import Fireball, Lightning
 from .items import BreakableItem
 
@@ -257,8 +258,9 @@
         self._me.cur_health = self._me.max_health
 
     def set_pos(self, pos):
-        self.rect.midbottom = pos[0] * TILE_SIZE[0] + self.rect_offset[0], (pos[1] + 1) * TILE_SIZE[1] + self.rect_offset[1]
-        self.collide_rect.midbottom = pos[0] * TILE_SIZE[0], (pos[1] + 1) * TILE_SIZE[1]
+        self.rect.midbottom = cadd(tile_midbottom(pos), self.rect_offset)
+        # self.collide_rect.midbottom = pos[0] * TILE_SIZE[0], (pos[1] + 1) * TILE_SIZE[1] # Is this wrong?
+        self.collide_rect.midbottom = self.rect.midbottom
 
     def action_left(self):
         self.set_facing('left')