class Building(pygame.sprite.Sprite):
    anchor = 0,0 # standard anchor point is top tile
    check_free = (standard_check_free,)
    
    def __init__(self, pos):
        self.top_index = pos[0] - self.anchor[0], pos[1] - self.anchor[1]
        indexes = make_indexes(self.top_index, self.size)
        pygame.sprite.Sprite.__init__(self, self.groups)
        self.xlen, self.ylen = self.size
        
        self.make_geometry()
        self.sprites = []
        x,y = ga.stationGrid.get_tl(self.top_index)
        self.ig = IsoGrid((TX,TY),
            (ga.stationGrid.get_mt(self.top_index)))
            
        self.mark_tiles(indexes)
        self.make_sidetiles()
        BuildingPiece(self.imageset[0], self.ig.get_bl((self.xlen-1, self.ylen-1)),self)
        for n in range(self.xlen-1):
            l, b = self.ig.get_bl((n, self.ylen-1))
            BuildingPiece(self.imageset[n+1], (l,b),self)
        for n in range(self.ylen-1):
            l, b = self.ig.get_mb((self.xlen-1,n))
            BuildingPiece(self.imageset[n+self.xlen], (l-1, b),self)
            
    def mark_tiles(self,indexes):
        for x,y in indexes:
            ga.station.free_tiles[x][y] = False
            ga.station.buildings[x][y] = self
        
    
    def get_piecepos(self, x,y):
        xpos = self.rect.left + self.topx + x * TX - y * TX
        ypos = self.rect.top + x * TY + y * TY
        return xpos, ypos + TH
        
    def make_geometry(self):
        w = (self.xlen + self.ylen) * TX
        h = (self.xlen + self.ylen) * TY
        left, top = ga.stationGrid.get_tl(self.top_index)
        self.topx = (self.ylen-1)*TX
        left = left - self.topx
        self.rect = pygame.Rect((left,top),(w,h))
        
    def make_sidetiles(self):
        self.sidetiles = []
        xi, yi = self.top_index
        self.sidetiles.extend((xi +x, yi -1) for x in range(self.xlen))
        self.sidetiles.extend((xi + self.xlen, yi + y) for y in range(self.ylen))
        self.sidetiles.extend((xi +x, yi + self.ylen) for x in range(self.xlen))
        self.sidetiles.extend((xi -1, yi + y) for y in range(self.ylen))
        
    def destroy(self):
        for s in self.sprites:
            s.kill()
        for x,y in make_indexes(self.top_index, self.size):
            ga.station.free_tiles[x][y] = True
            ga.station.buildings[x][y] = None
        self.kill()
    
    def get_roadentry(self):
        for i in self.sidetiles:
            b = ga.station.buildings[i[0]][i[1]]
            if isinstance(b, Road):
                return i
Ejemplo n.º 2
0
    isoG = IsoGrid((TX,TY),(xoffset,yoffset))
    
    r = pygame.Rect((0,0),(TW,rect.height))
    r.bottomleft = isoG.get_left((x-1,y-1)),rect.height
    midpiece = cut(image,r)
    
    xpieces = []
    for n in range(x-1):
        l,b = isoG.get_bl((n,y-1))
        r.height = b
        r.width = TX
        r.bottomleft = l,b
        xpieces.append(cut(image,r))
    ypieces = []
    for n in range(y-1):
        l,b = isoG.get_mb((x-1,n))
        r.height = b
        r.width = TX
        r.bottomleft = l -1, b
        ypieces.append(cut(image,r))
        
    return tuple([midpiece,] + xpieces + ypieces)

def cut(surface, rect):
    print surface.get_size()
    print rect
    return surface.subsurface(rect).copy()

def colortint(image, color):
    overlay = pygame.Surface(image.get_size())
    overlay.fill(color)