def LoadFrames(x,y,img, tileWidth, tileHeight, numtiles, padding = 0): """ This is a simple function that takes any image that's formatted like a tileset and rips the tiles into a list which is then returned. img: image to rip from tileWidth/tileHeight: tileWidth and tileHeight of a single tile span: how many tiles per row numtiles: number of tiles to rip padding: number of pixels between tiles """ tiles=[] bigImage = ika.Canvas(img) numFramesWide = int(bigImage.width /(tileWidth + padding)) i2 = 0 i3 = 0 for i in range(numtiles): tile = ika.Canvas(tileWidth, tileHeight) bigImage.Clip( x+(i2*tileWidth + i2*padding), y+(i3*tileHeight+i3*padding) , tileWidth , tileHeight) #bigImage.Blit(tile, -1-((tileWidth+1)*(i%span)), -1-((tileHeight+1)*(i%span)), ika.Opaque) bigImage.Blit(tile, 0, 0, ika.Opaque) tiles.append(ika.Image(tile)) i2+=1 if i2 >= numFramesWide: i3+=1 i2=0 #ika.Exit(str(tiles)) return tiles
def LoadFrames(x, y, img, width, height, span, xdist, ydist, numtiles): """ This is a simple function that takes any image that's formatted like a tileset and rips the tiles into a list which is then returned. img: image to rip from width/height: width and height of a single tile span: how many tiles per row numtiles: number of tiles to rip """ tiles = [] bigImage = ika.Canvas(img) i2 = 0 i3 = 0 for i in range(numtiles): tile = ika.Canvas(width, height) bigImage.Clip((x + ((i2 * width) + (i2 * xdist))), (y + ((i3 * height) + (i3 * ydist))), width, height) #bigImage.Blit(tile, -1-((width+1)*(i%span)), -1-((height+1)*(i%span)), ika.Opaque) bigImage.Blit(tile, 0, 0, ika.Opaque) tiles.append(ika.Image(tile)) i2 += 1 if i2 >= span: i3 += 1 i2 = 0 #ika.Exit(str(tiles)) return tiles
def __init__(self, stencilName, imageName, speed=(0.2, 0.05), tint=ika.RGB(255, 255, 255)): self.image = ika.Canvas(imageName) #ika.Image(imageName) self.pos = [0.0, 0.0] self.speed = speed self.canvas = ika.Canvas(320, 240) self.stencil = ika.Canvas(stencilName) self.tint = tint self.first = True
def __init__(self, text, x=None, y=None, duration=200, delay=0, r=255, g=255, b=255): self.r = r self.g = g self.b = b self.delay = delay font = system.engine.font width = font.StringWidth(text) height = font.height if x is None: self.x = (ika.Video.xres - width) / 2 else: self.x = x if y is None: self.y = ika.Video.yres - height - 40 else: self.y = y canv = ika.Canvas(width, height) canv.DrawText(font, 0, 0, text) self.img = ika.Image(canv) self.opacity = 0 self.duration = duration self.update = self._update().next
def __init__(self, srcimage, bordersize, stretch = 0): def ss(x, y, w, h): ''' Grabs a subsection of a canvas at (x,y) of size (w,h), creates an image from it, and returns it ''' c = ika.Canvas(w, h) srcimage.Blit(c, -x, -y) return ika.Image(c) if isinstance(srcimage, str): srcimage = ika.Canvas(srcimage) edgex = srcimage.width - (bordersize * 2) edgey = srcimage.height - (bordersize * 2) self.iLeft = ss(0, bordersize, bordersize, edgey) self.iRight = ss(edgex + bordersize, bordersize, bordersize, edgey) self.iTop = ss(bordersize, 0, edgex, bordersize) self.iBottom = ss(bordersize, edgey + bordersize, edgex, bordersize) self.iTopleft = ss(0, 0, bordersize, bordersize) self.iTopright = ss(edgex + bordersize, 0, bordersize, bordersize) self.iBottomleft = ss(0, edgey + bordersize, bordersize, bordersize) self.iBottomright = ss(edgex + bordersize, edgey + bordersize, bordersize, bordersize) self.iCentre = ss(bordersize, bordersize, edgex, edgey) self.border = bordersize if stretch: self.Blit = ika.Video.ScaleBlit else: self.Blit = ika.Video.TileBlit
def __init__(self, srcimage, bordersize, stretch=0): def ss(x, y, w, h): c = ika.Canvas(w, h) srcimage.Blit(c, -x, -y) return ika.Image(c) if isinstance(srcimage, str): srcimage = ika.Canvas(srcimage) edgex = srcimage.width - (bordersize * 2) edgey = srcimage.height - (bordersize * 2) self.iLeft = ss(0, bordersize, bordersize, edgey) self.iRight = ss(edgex + bordersize, bordersize, bordersize, edgey) self.iTop = ss(bordersize, 0, edgex, bordersize) self.iBottom = ss(bordersize, edgey + bordersize, edgex, bordersize) self.iTopleft = ss(0, 0, bordersize, bordersize) self.iTopright = ss(edgex + bordersize, 0, bordersize, bordersize) self.iBottomleft = ss(0, edgey + bordersize, bordersize, bordersize) self.iBottomright = ss(edgex + bordersize, edgey + bordersize, bordersize, bordersize) self.iCentre = ss(bordersize, bordersize, edgex, edgey) self.border = self.iLeft.width * 2 if stretch: self.Blit = ika.Video.ScaleBlit else: self.Blit = ika.Video.TileBlit
def ss(x, y, w, h): ''' Grabs a subsection of a canvas at (x,y) of size (w,h), creates an image from it, and returns it ''' c = ika.Canvas(w, h) srcimage.Blit(c, -x, -y) return ika.Image(c)
def rip_tiles(image, width, height, span, tilecount): """This is a simple function that takes any image that is formatted like a tileset and rips the tiles into a list which is then returned. image - image to rip from width/height - width and height of a single tile span - how many tiles per row tilecount - number of tiles to rip """ tiles = [] big_image = ika.Canvas(image) for i in range(tilecount): tile = ika.Canvas(width, height) big_image.Blit(tile, -1 - (i % span * (width + 1)), -1 - (i / span * (height + 1)), ika.Opaque) tiles.append(ika.Image(tile)) return tiles
def __init__(self, font, t='>'): width = font.StringWidth(t) height = font.height hotspot = width, height / 2 Cursor.__init__(self, width, height, hotspot) c = ika.Canvas(self.width, self.height) c.DrawText(font, 0, 0, t) self._img = ika.Image(c)
def __init__(self, font, t = '>'): Cursor.__init__(self) self.width = font.StringWidth(t) self.height = font.height self.hotspot = self.width, self.height / 2 c = ika.Canvas(self.width, self.height) c.DrawText(font, 0, 0, t) self.img = ika.Image(c)
def createFromImageStrip(canvas, numFrames, delay = 10, hotspot = None): assert canvas.height % numFrames == 0, \ "Image's height is not an even multiple of the number of frames." frames = [None] * numFrames # cut up the canvas, and create our images for i in range(numFrames): c = ika.Canvas(self.width, self.height) canvas.Blit(c, 0, -(i * self.height), ika.Opaque) frames[i] = ika.Image(c) return AnimatedCursor(frames, delay, hotspot)
def __init__(self, text, x=None, y=None, duration=200, font=None): super(Caption, self).__init__() if not font: font = engine.font width = font.StringWidth(text) height = font.height self.x = x or (ika.Video.xres - width) / 2 self.y = y or ika.Video.yres - height - 30 canvas = ika.Canvas(width, height) canvas.DrawText(font, 0, 0, text) self.img = ika.Image(canvas) self.opacity = 0 self.duration = duration self.update = self._update().next
def RipTiles(image, width, height, span=None, tilecount=None): """This is a simple function that takes any image that is formatted like a tileset and rips the tiles into a list which is then returned. image - image to rip from width/height - width and height of a single tile span - how many tiles per row tilecount - number of tiles to rip """ tiles = [] big_image = ika.Canvas(image) # do some figurin:) ~infey if span == None and tilecount == None: span = (big_image.width - 1) / (width + 1) tilecount = span * ((big_image.height - 1) / (height + 1)) for i in range(tilecount): tile = ika.Canvas(width, height) big_image.Blit(tile, -1 - (i % span * (width + 1)), -1 - (i / span * (height + 1)), ika.Opaque) tiles.append(ika.Image(tile)) return tiles
def Map2Img(mapName, tileset): ika.Log('Saving map ' + mapName) ika.Map.Switch('maps/' + mapName) canvas = ika.Canvas(ika.Map.width, ika.Map.height) for y in range(int(ika.Map.height/16)): for x in range(int(ika.Map.width/16)): for l in range(ika.Map.layercount): t=ika.Map.GetTile(x,y,l) tileset[t].Blit(canvas, x*16, y*16, ika.Matte) #canvas.Save('map2img/' + mapName + '.png') for y in range(ika.Map.height): for x in range(ika.Map.width): canvas.SetPixel(x,y, pixeldict[ canvas.GetPixel(x,y) == black ]) canvas.Save('stencils/' + mapName + '.png')
def init(saveGame=None): global killList, camera, player, saveData, stencil stencil = ika.Canvas(320,240) # clean everything killList = entities[:] clearKillQueue() _clear() if saveGame is not None: saveData.clear() saveData.update(saveGame.flags) mapSwitch(saveGame.mapName, fade=False) else: mapSwitch(config.START_MAP, fade=False) if not player: player = Player() addEntity(player) if saveData: player.x, player.y, player.layer = saveGame.pos saveGame.setCurrent() # set stats, flags else: player.x, player.y = config.START_POSITION player.layer = ika.Map.FindLayerByName( ika.Map.GetMetaData()['entityLayer'] ) #temp hack player.items.append(player.spear.item) player.items.append(player.sword.item) camera = Camera() camera.center() addThing(HPBar(), EXPBar(), ShellsIndicator(), camera)
def LoadFrames(x,y,img, tileWidth, tileHeight, xdist,ydist): """ This is a simple function that takes any image that's formatted like a tileset and rips the tiles into a list which is then returned. img: image to rip from width/height: width and height of a single tile span: how many tiles per row numtiles: number of tiles to rip """ tiles=[] bigImage = ika.Canvas(img) #i2 = 0 #i3 = 0 x = 1 #for padding y = 1 numFramesWide = int(bigImage.width /(tileWidth + 1)) numFramesTall = int(bigImage.height/(tileHeight + 1) ##labelList = ["left", "right", "standing", "other"] for i in numFramesTall: ##framelist = [] for j in numFramesWide: #pull frame frame = bigImage.Clip(x, y, x + tileWidth, y + tileHeight) #test if frame all same color color = frame.GetPixel(0,0) testX, testY = 1, 0 same = False while frame.GetPixel(testX, testY) == color: if testX != tileWidth - 1: testX +=1 else: testX = 0 if testY != tileHeight - 1: testY += 1 else: #conclude that every pixel has been checked and all same color same = True break if same is True: #if every pixel in new frame same color break #add frame - only reached if all pixels not same color tiles.append(frame) ''' if i > len(labelList): num = i - len(labelList) label = labelList[len(labelList)] + str(num) else: label = labelList[i] tileDict[label] = framelist ''' x += tileWidth + 1 #1 for padding y += height + 1 return tiles ##come up with a way to dump useless trailing frames-- ##probably just see if every pixel for frame is same color as top left pixel in same frame '''
def ss(x, y, w, h): c = ika.Canvas(w, h) srcimage.Blit(c, -x, -y) return ika.Image(c)