def test():
    game = gamebase.GameBase((400,400),30)
    game.start_scale(2)
    count = 0
    tile_img = utils.load_image("iso_cursor_01.png")
    tiles = pygame.sprite.Group()
    ig = IsoGrid((10,5),(100,0))
    r = pygame.Rect((0,0),(18,10))
    for x in range(10):
        for y in range(10):
            s = pygame.sprite.Sprite(tiles)
            s.image = tile_img
            s.rect = tile_img.get_rect()
            s.rect.bottomleft = ig.get_bl((x,y))
    while True:
        game.clock.tick(30)
        events = game.get_events()
        iso_pos = ig.get_iso(game.get_mousepos())
        
        tiles.draw(game.screen)
        r.bottomright = ig.get_br(iso_pos)
        pygame.draw.rect(game.screen,(0,0,0),r,1)
        game.flip()
        game.screen.fill((120,120,120))
        pygame.display.set_caption(str(iso_pos) + str(game.get_mousepos()))
        count += 1
 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)
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
        
        globals()[name] = i
        globals()[name+"set"] = set
        globals()[name+"hint"] = hint
        globals()[name+"badhint"] = badhint
        if cls:
            cls.image = i
            cls.imageset = set
            cls.hint = hint
            cls.badhint = badhint
            
def cut_img(image, (x,y)): # cuts an image into pieces fit for isometric rendering
    rect = image.get_rect()
    xoffset = y*TX -1
    yoffset = rect.height - x*TY - y*TY
    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))