Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
 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
Exemple #4
0
    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
Exemple #5
0
    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
Exemple #6
0
    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
Exemple #7
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)
Exemple #8
0
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
Exemple #9
0
    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)
Exemple #10
0
    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)
Exemple #11
0
    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)
Exemple #12
0
 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
Exemple #13
0
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
Exemple #14
0
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')
Exemple #15
0
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)
Exemple #16
0
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
	'''
Exemple #17
0
 def ss(x, y, w, h):
     c = ika.Canvas(w, h)
     srcimage.Blit(c, -x, -y)
     return ika.Image(c)