# HG changeset patch # User Jeremy Thurgood # Date 1304697264 -7200 # Node ID 851c8726696c31f142dec4faf5f8b5105bd145d4 # Parent 6cc0d54df531bcdd4ae4ba4e289397444f73dca0 More cleanup. Mostly using utils.c* instead of doing things the long way. diff -r 6cc0d54df531 -r 851c8726696c skaapsteker/level.py --- 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): diff -r 6cc0d54df531 -r 851c8726696c skaapsteker/levelscene.py --- 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) diff -r 6cc0d54df531 -r 851c8726696c skaapsteker/sprites/base.py --- 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) diff -r 6cc0d54df531 -r 851c8726696c skaapsteker/sprites/player.py --- 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')