mirror of https://github.com/aseprite/aseprite.git
				
				
				
			Add tilemap tests
This commit is contained in:
		
							parent
							
								
									764bfab41c
								
							
						
					
					
						commit
						52c28bb77b
					
				|  | @ -0,0 +1,266 @@ | |||
| -- Copyright (C) 2019-2020  Igara Studio S.A. | ||||
| -- | ||||
| -- This file is released under the terms of the MIT license. | ||||
| -- Read LICENSE.txt for more information. | ||||
| 
 | ||||
| -- This version of Aseprite doesn't support tilemaps | ||||
| if TilesetMode == nil then return end | ||||
| 
 | ||||
| dofile('./test_utils.lua') | ||||
| 
 | ||||
| local rgba = app.pixelColor.rgba | ||||
| 
 | ||||
| -- Check constants | ||||
| assert(TilemapMode.PIXELS == 0) | ||||
| assert(TilemapMode.TILES == 1) | ||||
| assert(TilesetMode.STACK == 2) | ||||
| assert(TilesetMode.MANUAL == 0) | ||||
| assert(TilesetMode.AUTO == 1) | ||||
| assert(TilesetMode.STACK == 2) | ||||
| 
 | ||||
| ---------------------------------------------------------------------- | ||||
| -- Tests drawing in the tilemap | ||||
| ---------------------------------------------------------------------- | ||||
| 
 | ||||
| do | ||||
|   local spr = Sprite(32, 32) | ||||
|   assert(spr.layers[1].isImage) | ||||
|   assert(not spr.layers[1].isTilemap) | ||||
| 
 | ||||
|   ---------------------------------------------------------------------- | ||||
|   -- Create a tilemap | ||||
|   ---------------------------------------------------------------------- | ||||
| 
 | ||||
|   app.command.NewLayer{ tilemap=true } | ||||
|   assert(#spr.layers == 2) | ||||
|   local tilemapLay = spr.layers[2] | ||||
|   assert(tilemapLay.isImage) | ||||
|   assert(tilemapLay.isTilemap) | ||||
|   assert(#tilemapLay.cels == 0) | ||||
| 
 | ||||
|   ---------------------------------------------------------------------- | ||||
|   -- Draw the first pixel on the tilemap so a new tile is created | ||||
|   ---------------------------------------------------------------------- | ||||
| 
 | ||||
|   app.useTool{ | ||||
|     tool='pencil', | ||||
|     color=Color{ r=0, g=0, b=0 }, | ||||
|     layer=tilemapLay, | ||||
|     tilesetMode=TilesetMode.STACK, | ||||
|     points={ Point(2, 2), Point(3, 2) }} | ||||
|   assert(#tilemapLay.cels == 1) | ||||
|   assert(tilemapLay:cel(1).image.colorMode == ColorMode.TILEMAP) | ||||
|   local tilemapCel = tilemapLay:cel(1) | ||||
|   assert(tilemapCel.bounds == Rectangle(0, 0, 16, 16)) | ||||
| 
 | ||||
|   assert(#spr.tilesets == 1) -- one tileset | ||||
|   assert(spr.tilesets[1] == tilemapLay.tileset) | ||||
| 
 | ||||
|   local tileset = tilemapLay.tileset | ||||
|   assert(#tileset == 1) -- one tile | ||||
| 
 | ||||
|   tilemapCel.position = Point(2, 2) | ||||
|   assert(tilemapCel.bounds == Rectangle(2, 2, 16, 16)) | ||||
|   assert(#tileset == 1) | ||||
| 
 | ||||
|   assert(tilemapCel.image.width == 1) | ||||
|   assert(tilemapCel.image.height == 1) | ||||
|   assert(tilemapCel.image:getPixel(0, 0) == 0) | ||||
| 
 | ||||
|   ---------------------------------------------------------------------- | ||||
|   -- Draw a second pixel with locked mode (new tiles are not generated) | ||||
|   ---------------------------------------------------------------------- | ||||
| 
 | ||||
|   app.useTool{ | ||||
|     tool='pencil', | ||||
|     color=Color{ r=0, g=0, b=0 }, | ||||
|     cel=tilemapCel, | ||||
|     tilesetMode=TilesetMode.MANUAL, | ||||
|     points={ Point(0, 0) }} | ||||
| 
 | ||||
|   assert(tilemapCel.bounds == Rectangle(2, 2, 16, 16)) | ||||
|   assert(#tileset == 1) | ||||
| 
 | ||||
|   ---------------------------------------------------------------------- | ||||
|   -- Draw pixels generating new tiles | ||||
|   ---------------------------------------------------------------------- | ||||
| 
 | ||||
|   app.useTool{ | ||||
|     tool='pencil', | ||||
|     color=Color{ r=0, g=0, b=0 }, | ||||
|     cel=tilemapCel, | ||||
|     tilesetMode=TilesetMode.STACK, | ||||
|     points={ Point(0, 0) }} | ||||
| 
 | ||||
|   assert(tilemapCel.bounds == Rectangle(-14, -14, 32, 32)) | ||||
|   assert(#tileset == 3) | ||||
|   assert(not tileset:getTile(0):isEmpty()) | ||||
|   assert(not tileset:getTile(1):isEmpty()) | ||||
|   assert(tileset:getTile(2):isEmpty()) | ||||
|   assert(tilemapCel.image.width == 2) | ||||
|   assert(tilemapCel.image.height == 2) | ||||
|   assert(tilemapCel.image:getPixel(0, 0) == 1) | ||||
|   assert(tilemapCel.image:getPixel(1, 0) == 2) | ||||
|   assert(tilemapCel.image:getPixel(0, 1) == 2) | ||||
|   assert(tilemapCel.image:getPixel(1, 1) == 0) | ||||
| 
 | ||||
|   app.useTool{ | ||||
|     tool='pencil', | ||||
|     color=Color{ r=0, g=0, b=0 }, | ||||
|     cel=tilemapCel, | ||||
|     tilesetMode=TilesetMode.STACK, | ||||
|     points={ Point(19, 19) }} | ||||
| 
 | ||||
|   assert(tilemapCel.bounds == Rectangle(-14, -14, 48, 48)) | ||||
|   assert(#tilemapLay.tileset == 4) | ||||
|   assert(not tileset:getTile(3):isEmpty()) | ||||
|   assert(tilemapCel.image.width == 3) | ||||
|   assert(tilemapCel.image.height == 3) | ||||
|   assert(tilemapCel.image:getPixel(0, 0) == 1) | ||||
|   assert(tilemapCel.image:getPixel(1, 0) == 2) | ||||
|   assert(tilemapCel.image:getPixel(2, 0) == 2) | ||||
|   assert(tilemapCel.image:getPixel(0, 1) == 2) | ||||
|   assert(tilemapCel.image:getPixel(1, 1) == 0) | ||||
|   assert(tilemapCel.image:getPixel(2, 1) == 2) | ||||
|   assert(tilemapCel.image:getPixel(0, 2) == 2) | ||||
|   assert(tilemapCel.image:getPixel(1, 2) == 2) | ||||
|   assert(tilemapCel.image:getPixel(2, 2) == 3) | ||||
| end | ||||
| 
 | ||||
| ---------------------------------------------------------------------- | ||||
| -- Tests drawing when the grid origin is in a negative position | ||||
| ---------------------------------------------------------------------- | ||||
| 
 | ||||
| do | ||||
|   local spr = Sprite(32, 32) | ||||
|   app.command.NewLayer{ tilemap=true } | ||||
|   local tilemapLay = spr.layers[2] | ||||
| 
 | ||||
|   app.useTool{ | ||||
|     tool='pencil', | ||||
|     color=Color{ r=0, g=255, b=0 }, | ||||
|     layer=tilemapLay, | ||||
|     tilesetMode=TilesetMode.STACK, | ||||
|     points={ Point(0, 0) }} | ||||
|   local tilemapCel = tilemapLay:cel(1) | ||||
|   assert(tilemapCel.bounds == Rectangle(0, 0, 16, 16)) | ||||
| 
 | ||||
|   local tileset = tilemapLay.tileset | ||||
|   assert(#tileset == 1) -- one tile | ||||
| 
 | ||||
|   tilemapCel.position = Point(-1, -1) | ||||
|   assert(tilemapCel.bounds == Rectangle(-1, -1, 16, 16)) | ||||
| 
 | ||||
|   app.useTool{ | ||||
|     tool='pencil', | ||||
|     color=Color{ r=255, g=0, b=0 }, | ||||
|     cel=tilemapCel, | ||||
|     tilesetMode=TilesetMode.STACK, | ||||
|     points={ Point(0, 0) }} | ||||
| 
 | ||||
|   assert(tilemapCel.bounds == Rectangle(-1, -1, 16, 16)) | ||||
|   assert(#tileset == 2) | ||||
| 
 | ||||
|   local img = tileset:getTile(1) | ||||
| 
 | ||||
|   assert(img:getPixel(0, 0) == rgba(0, 255, 0, 255)) | ||||
|   assert(img:getPixel(1, 0) == rgba(0, 0, 0, 0)) | ||||
|   assert(img:getPixel(2, 0) == rgba(0, 0, 0, 0)) | ||||
| 
 | ||||
|   assert(img:getPixel(0, 1) == rgba(0, 0, 0, 0)) | ||||
|   assert(img:getPixel(1, 1) == rgba(255, 0, 0, 255)) | ||||
|   assert(img:getPixel(2, 1) == rgba(0, 0, 0, 0)) | ||||
| 
 | ||||
|   assert(img:getPixel(0, 2) == rgba(0, 0, 0, 0)) | ||||
|   assert(img:getPixel(1, 2) == rgba(0, 0, 0, 0)) | ||||
|   assert(img:getPixel(2, 2) == rgba(0, 0, 0, 0)) | ||||
| end | ||||
| 
 | ||||
| ---------------------------------------------------------------------- | ||||
| -- Tests that extra tiles are not created | ||||
| ---------------------------------------------------------------------- | ||||
| 
 | ||||
| do | ||||
|   local spr = Sprite(32, 32) | ||||
|   app.command.NewLayer{ tilemap=true } | ||||
|   local tilemapLay = spr.layers[2] | ||||
| 
 | ||||
|   app.useTool{ | ||||
|     tool='pencil', | ||||
|     color=Color{ r=0, g=255, b=0 }, | ||||
|     layer=tilemapLay, | ||||
|     tilesetMode=TilesetMode.STACK, | ||||
|     points={ Point(0, 0) }} | ||||
|   local tilemapCel = tilemapLay:cel(1) | ||||
|   tilemapCel.position = Point(-1, -1) | ||||
| 
 | ||||
|   app.useTool{ | ||||
|     tool='pencil', | ||||
|     color=Color{ r=255, g=0, b=0 }, | ||||
|     cel=tilemapCel, | ||||
|     tilesetMode=TilesetMode.STACK, | ||||
|     points={ Point(30, 30) }} | ||||
| 
 | ||||
|   assert(tilemapCel.bounds == Rectangle(-1, -1, 32, 32)) | ||||
| end | ||||
| 
 | ||||
| ---------------------------------------------------------------------- | ||||
| -- Tests moving tiles | ||||
| ---------------------------------------------------------------------- | ||||
| 
 | ||||
| do | ||||
|   local spr = Sprite(32, 32) | ||||
|   app.command.NewLayer{ tilemap=true } | ||||
|   local tilemapLay = spr.layers[2] | ||||
| 
 | ||||
|   app.useTool{ | ||||
|     tool='ellipse', | ||||
|     color=Color{ r=0, g=0, b=0 }, | ||||
|     layer=tilemapLay, | ||||
|     tilesetMode=TilesetMode.STACK, | ||||
|     points={ Point(0, 0), Point(31, 31) }} | ||||
| 
 | ||||
|   local ts = tilemapLay.tileset | ||||
|   assert(#ts == 4) | ||||
| 
 | ||||
|   local imgs = { ts:getTile(0), | ||||
|                  ts:getTile(1), | ||||
|                  ts:getTile(2), | ||||
|                  ts:getTile(3) } | ||||
| 
 | ||||
|   -- No op = move tile 0 before the tile 0, result=0,1,2,3 | ||||
|   app.range.tiles = { 0 } | ||||
|   app.command.MoveTiles{ before=0 } | ||||
|   expect_eq(imgs[0+1], ts:getTile(0)) | ||||
|   expect_eq(imgs[1+1], ts:getTile(1)) | ||||
|   expect_eq(imgs[2+1], ts:getTile(2)) | ||||
|   expect_eq(imgs[3+1], ts:getTile(3)) | ||||
| 
 | ||||
|   -- Move tile 1 before tile 0, result=1,0,2,3 | ||||
|   app.range.tiles = { 1 } | ||||
|   app.command.MoveTiles{ before=0 } | ||||
|   expect_eq(imgs[1+1], ts:getTile(0)) | ||||
|   expect_eq(imgs[0+1], ts:getTile(1)) | ||||
|   expect_eq(imgs[2+1], ts:getTile(2)) | ||||
|   expect_eq(imgs[3+1], ts:getTile(3)) | ||||
|   app.undo() | ||||
| 
 | ||||
|   -- Move tiles 0 and 1 before 3, result=2,0,1,3 | ||||
|   app.range.tiles = { 0, 1 } | ||||
|   app.command.MoveTiles({ before=3 }) | ||||
|   expect_eq(imgs[2+1], ts:getTile(0)) | ||||
|   expect_eq(imgs[0+1], ts:getTile(1)) | ||||
|   expect_eq(imgs[1+1], ts:getTile(2)) | ||||
|   expect_eq(imgs[3+1], ts:getTile(3)) | ||||
|   app.undo() | ||||
| 
 | ||||
|   -- Move tiles 0 and 2 before 2, result=1,0,2,3 | ||||
|   app.range.tiles = { 0, 2 } | ||||
|   app.command.MoveTiles({ before=2 }) | ||||
|   expect_eq(imgs[1+1], ts:getTile(0)) | ||||
|   expect_eq(imgs[0+1], ts:getTile(1)) | ||||
|   expect_eq(imgs[2+1], ts:getTile(2)) | ||||
|   expect_eq(imgs[3+1], ts:getTile(3)) | ||||
|   app.undo() | ||||
| 
 | ||||
| end | ||||
		Loading…
	
		Reference in New Issue