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
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)