62 lines
1.6 KiB
C
62 lines
1.6 KiB
C
/**
|
|
* Copyright (c) 2021 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#include "tileset.h"
|
|
|
|
void tilesetInit(tileset_t *tileset,
|
|
int32_t columns, int32_t rows,
|
|
int32_t width, int32_t height,
|
|
int32_t gapX, int32_t gapY,
|
|
int32_t borderX, int32_t borderY
|
|
) {
|
|
float tdivX, tdivY;
|
|
int32_t x, y, i;
|
|
|
|
tileset->count = rows * columns;
|
|
tileset->divisions = malloc(sizeof(tilesetdiv_t) * tileset->count);
|
|
|
|
tileset->columns = columns;
|
|
tileset->rows = rows;
|
|
|
|
// Calculate division sizes (pixels)
|
|
tileset->divX = (
|
|
(float)width - ((float)borderX * 2.0f) - ((float)gapX * ((float)columns-1))
|
|
) / columns;
|
|
tileset->divY = (
|
|
(float)height - ((float)borderY * 2.0f) - ((float)gapY * ((float)rows - 1))
|
|
) / rows;
|
|
|
|
// Calculate the division sizes (units)
|
|
tdivX = tileset->divX / width;
|
|
tdivY = tileset->divY / height;
|
|
|
|
// Calculate the divisions (in units)
|
|
i = -1;
|
|
for(y = 0; y < rows; y++) {
|
|
for(x = 0; x < columns; x++) {
|
|
tileset->divisions[++i].x0 = (
|
|
borderX + (tileset->divX * x) + (gapX * x)
|
|
) / width;
|
|
tileset->divisions[i].x1 = tileset->divisions[i].x0 + tdivX;
|
|
|
|
tileset->divisions[i].y0 = (
|
|
borderY + (tileset->divY * y) + (gapY * y)
|
|
) / height;
|
|
tileset->divisions[i].y1 = tileset->divisions[i].y0 + tdivY;
|
|
}
|
|
}
|
|
}
|
|
|
|
tilesetdiv_t tilesetGetDivision(tileset_t *tileset,int32_t column,int32_t row) {
|
|
return tileset->divisions[
|
|
(column % tileset->columns) + (row * tileset->columns)
|
|
];
|
|
}
|
|
|
|
void tilesetDispose(tileset_t *tileset) {
|
|
free(tileset->divisions);
|
|
} |