Exemplo n.º 1
0
class GameScreen(Screen):
    def __init__(self, levelfile):
        self.level = leveltypes[levelfile.properties.get('leveltype', 'Level')](levelfile)
        self.player = self.level.sprites['Player'].pop()

        self.tileset = Tileset(config.tilepath, config.tilesize)
        self.renderer = Renderer(self.tileset)

        self.redraw = True


    def resize_view(self):
        """Given the window size, set view size and cell size,
        then resize the view and tileset."""
        ww, wh = self.window.view.get_size()
        vw, vh = config.maxviewcells

        # set view size in cells and cell size in pixels
        self.viewcells = min(vw, self.level.width), min(vh, self.level.height)
        self.cellsize = self._get_cell_size((ww, wh), self.viewcells)

        # resize view and tileset, and schedule a full redraw
        self.view = self.window.view.subsurface(self._get_view_rect((ww, wh), self.viewcells))
        self.tileset.resize_tileset(self.cellsize)
        self.redraw = True


    def _get_cell_size(self, (ww, wh), (vw, vh)):
        """Given a window size in pixels, and a view size in cells,
        return the largest cell size that will fit the view in the window."""
        tw, th = self.tileset.dims
        # divide and multiply by tile size, to force cell size to be an exact multiple
        return min(ww / vw / tw * tw, wh / vh / th * th)