Just realized the word 'Row' makes no sense whatsoever
This commit is contained in:
		
							parent
							
								
									a327d4c324
								
							
						
					
					
						commit
						41e1187063
					
				
					 1 changed files with 44 additions and 44 deletions
				
			
		| 
						 | 
				
			
			@ -3,18 +3,18 @@
 | 
			
		|||
namespace TileAtlas
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
/* A Row represents a Rect
 | 
			
		||||
/* A Column represents a Rect
 | 
			
		||||
 * with undefined width */
 | 
			
		||||
struct Row
 | 
			
		||||
struct Column
 | 
			
		||||
{
 | 
			
		||||
	int x, y, h;
 | 
			
		||||
 | 
			
		||||
	Row(int x, int y, int h)
 | 
			
		||||
	Column(int x, int y, int h)
 | 
			
		||||
	    : x(x), y(y), h(h)
 | 
			
		||||
	{}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef QList<Row> RowList;
 | 
			
		||||
typedef QList<Column> ColumnList;
 | 
			
		||||
 | 
			
		||||
/* Autotile area width */
 | 
			
		||||
static const int atAreaW = 96*4;
 | 
			
		||||
| 
						 | 
				
			
			@ -55,75 +55,75 @@ Vec2i minSize(int tilesetH, int maxAtlasSize)
 | 
			
		|||
	return Vec2i(-1, -1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static RowList calcSrcRows(int tilesetH)
 | 
			
		||||
static ColumnList calcSrcCols(int tilesetH)
 | 
			
		||||
{
 | 
			
		||||
	RowList rows;
 | 
			
		||||
	ColumnList cols;
 | 
			
		||||
 | 
			
		||||
	rows << Row(0, 0, tilesetH);
 | 
			
		||||
	rows << Row(tsLaneW, 0, tilesetH);
 | 
			
		||||
	cols << Column(0, 0, tilesetH);
 | 
			
		||||
	cols << Column(tsLaneW, 0, tilesetH);
 | 
			
		||||
 | 
			
		||||
	return rows;
 | 
			
		||||
	return cols;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static RowList calcDstRows(int atlasW, int atlasH)
 | 
			
		||||
static ColumnList calcDstCols(int atlasW, int atlasH)
 | 
			
		||||
{
 | 
			
		||||
	RowList rows;
 | 
			
		||||
	ColumnList cols;
 | 
			
		||||
 | 
			
		||||
	/* Rows below the autotile area */
 | 
			
		||||
	/* Columns below the autotile area */
 | 
			
		||||
	const int underAt = atlasH - atAreaH;
 | 
			
		||||
 | 
			
		||||
	for (int i = 0; i < 3; ++i)
 | 
			
		||||
		rows << Row(i*tsLaneW, atAreaH, underAt);
 | 
			
		||||
		cols << Column(i*tsLaneW, atAreaH, underAt);
 | 
			
		||||
 | 
			
		||||
	if (atlasW <= atAreaW)
 | 
			
		||||
		return rows;
 | 
			
		||||
		return cols;
 | 
			
		||||
 | 
			
		||||
	const int remRows = (atlasW - atAreaW) / tsLaneW;
 | 
			
		||||
	const int remCols = (atlasW - atAreaW) / tsLaneW;
 | 
			
		||||
 | 
			
		||||
	for (int i = 0; i < remRows; ++i)
 | 
			
		||||
		rows << Row(i*tsLaneW + atAreaW, 0, atlasH);
 | 
			
		||||
	for (int i = 0; i < remCols; ++i)
 | 
			
		||||
		cols << Column(i*tsLaneW + atAreaW, 0, atlasH);
 | 
			
		||||
 | 
			
		||||
	return rows;
 | 
			
		||||
	return cols;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static BlitList calcBlitsInt(RowList &srcRows, RowList &dstRows)
 | 
			
		||||
static BlitList calcBlitsInt(ColumnList &srcCols, ColumnList &dstCols)
 | 
			
		||||
{
 | 
			
		||||
	BlitList blits;
 | 
			
		||||
 | 
			
		||||
	while (!srcRows.empty())
 | 
			
		||||
	while (!srcCols.empty())
 | 
			
		||||
	{
 | 
			
		||||
		Row srcRow = srcRows.takeFirst();
 | 
			
		||||
		Q_ASSERT(srcRow.h > 0);
 | 
			
		||||
		Column srcCol = srcCols.takeFirst();
 | 
			
		||||
		Q_ASSERT(srcCol.h > 0);
 | 
			
		||||
 | 
			
		||||
		while (!dstRows.empty() && srcRow.h > 0)
 | 
			
		||||
		while (!dstCols.empty() && srcCol.h > 0)
 | 
			
		||||
		{
 | 
			
		||||
			Row dstRow = dstRows.takeFirst();
 | 
			
		||||
			Column dstCol = dstCols.takeFirst();
 | 
			
		||||
 | 
			
		||||
			if (srcRow.h > dstRow.h)
 | 
			
		||||
			if (srcCol.h > dstCol.h)
 | 
			
		||||
			{
 | 
			
		||||
				/* srcRow doesn't fully fit into dstRow */
 | 
			
		||||
				blits << Blit(srcRow.x, srcRow.y,
 | 
			
		||||
				              dstRow.x, dstRow.y, dstRow.h);
 | 
			
		||||
				/* srcCol doesn't fully fit into dstCol */
 | 
			
		||||
				blits << Blit(srcCol.x, srcCol.y,
 | 
			
		||||
				              dstCol.x, dstCol.y, dstCol.h);
 | 
			
		||||
 | 
			
		||||
				srcRow.y += dstRow.h;
 | 
			
		||||
				srcRow.h -= dstRow.h;
 | 
			
		||||
				srcCol.y += dstCol.h;
 | 
			
		||||
				srcCol.h -= dstCol.h;
 | 
			
		||||
			}
 | 
			
		||||
			else if (srcRow.h < dstRow.h)
 | 
			
		||||
			else if (srcCol.h < dstCol.h)
 | 
			
		||||
			{
 | 
			
		||||
				/* srcRow fits into dstRow with space remaining */
 | 
			
		||||
				blits << Blit(srcRow.x, srcRow.y,
 | 
			
		||||
				              dstRow.x, dstRow.y, srcRow.h);
 | 
			
		||||
				/* srcCol fits into dstCol with space remaining */
 | 
			
		||||
				blits << Blit(srcCol.x, srcCol.y,
 | 
			
		||||
				              dstCol.x, dstCol.y, srcCol.h);
 | 
			
		||||
 | 
			
		||||
				dstRow.y += srcRow.h;
 | 
			
		||||
				dstRow.h -= srcRow.h;
 | 
			
		||||
				dstRows.prepend(dstRow);
 | 
			
		||||
				srcRow.h = 0;
 | 
			
		||||
				dstCol.y += srcCol.h;
 | 
			
		||||
				dstCol.h -= srcCol.h;
 | 
			
		||||
				dstCols.prepend(dstCol);
 | 
			
		||||
				srcCol.h = 0;
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				/* srcRow fits perfectly into dstRow */
 | 
			
		||||
				blits << Blit(srcRow.x, srcRow.y,
 | 
			
		||||
				              dstRow.x, dstRow.y, dstRow.h);
 | 
			
		||||
				/* srcCol fits perfectly into dstCol */
 | 
			
		||||
				blits << Blit(srcCol.x, srcCol.y,
 | 
			
		||||
				              dstCol.x, dstCol.y, dstCol.h);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -133,10 +133,10 @@ static BlitList calcBlitsInt(RowList &srcRows, RowList &dstRows)
 | 
			
		|||
 | 
			
		||||
BlitList calcBlits(int tilesetH, const Vec2i &atlasSize)
 | 
			
		||||
{
 | 
			
		||||
	RowList srcRows = calcSrcRows(tilesetH);
 | 
			
		||||
	RowList dstRows = calcDstRows(atlasSize.x, atlasSize.y);
 | 
			
		||||
	ColumnList srcCols = calcSrcCols(tilesetH);
 | 
			
		||||
	ColumnList dstCols = calcDstCols(atlasSize.x, atlasSize.y);
 | 
			
		||||
 | 
			
		||||
	return calcBlitsInt(srcRows, dstRows);
 | 
			
		||||
	return calcBlitsInt(srcCols, dstCols);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Vec2i tileToAtlasCoor(int tileX, int tileY, int tilesetH, int atlasH)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue