Ejemplo n.º 1
0
    def setFromImage(self, img, x, y, pals, palNum, indexed=False):
        # Check for normal tile
        newTile = None
        imgData = img.load()
        if indexed:
            newTile = [
                    array('B',
                        [ imgData[i,j]
                            for j in xrange(y, self._tileSize + y) ])
                        for i in xrange(x, self._tileSize + x) ]
        else:
            newTile = [
                    array('B',
                        [ pals.getColorFromRGB(palNum,imgData[i,j])
                            for j in xrange(y, self._tileSize + y) ])
                        for i in xrange(x, self._tileSize + x) ]
        # Note: newTile is an array of columns

        # Check for non-flipped tile
        try:
            tIndex = self._usedDict[EbModule.hashArea(newTile)]
            return (False, False, tIndex)
        except KeyError:
            pass

        # Check for only horizontally flipped tile
        try:
            tIndex = self._usedDict[EbModule.hashArea(reversed(newTile))]
            return (False, True, tIndex)
        except KeyError:
            pass

        # Check for vertically and horizontally flipped tile
        for col in newTile:
            col.reverse()
        try:
            tIndex = self._usedDict[EbModule.hashArea(reversed(newTile))]
            return (True, True, tIndex)
        except KeyError:
            pass

        # Check for only vertically flipped tile
        tH = EbModule.hashArea(newTile)
        try:
            tIndex = self._usedDict[tH]
            return (True, False, tIndex)
        except KeyError:
            pass

        # We need to add a new tile
        if self._usedTiles >= self._numTiles:
            # TODO ERROR: Not enough room for a new tile
            return (False, False, 0)
        # Remember, newTile is still vflipped
        self._tiles.append(newTile)
        self._usedDict[tH] = self._usedTiles
        self._usedTiles += 1
        return (True, False, self._usedTiles-1)
Ejemplo n.º 2
0
 def fromImage(self, img):
     self._width, self._height = img.size
     self._sprite = []
     imgData = img.load()
     for x in range(0, self._width):
         col = array('B', [0]*self._height)
         for y in range(0, self._height):
             col[y] = imgData[x,y]
         self._sprite.append(col)
     self._spriteHash = EbModule.hashArea(self._sprite)
Ejemplo n.º 3
0
 def readFromBlock(self, block, width, height, loc=0):
     self._width = width
     self._height = height
     self._sprite = map(lambda x: array('B', [0] * height),
             range(0, width))
     offset = loc
     for q in range(0, height/32):
         for r in range(0, width/32):
             for a in range(0, 4):
                 for j in range(0, 4):
                     EbModule.read4BPPArea(self._sprite, block, offset,
                             (j + r * 4) * 8, (a + q * 4) * 8)
                     offset += 32
     self._spriteHash = EbModule.hashArea(self._sprite)