7
/*---------------------------------------------------------------------------*/
10
retileNocache(void *map, const char *nameOut, int tileX, int tileY, int tileZ)
13
int x, y, z, saveType, nx, ny, nz;
16
int tileXsave, tileYsave, tileZsave;
19
saveType = G3d_getFileType();
20
G3d_setFileType(G3d_fileTypeMap(map));
21
G3d_getTileDimension(&tileXsave, &tileYsave, &tileZsave);
22
G3d_setTileDimension(tileX, tileY, tileZ);
23
typeIntern = G3d_tileTypeMap(map);
24
G3d_getRegionStructMap(map, ®ion);
26
map2 = G3d_openCellNew(nameOut, typeIntern, G3D_NO_CACHE, ®ion);
29
G3d_fatalError("G3d_retile: error in G3d_openCellNew");
31
G3d_setFileType(saveType);
32
G3d_setTileDimension(tileXsave, tileYsave, tileZsave);
34
data = G3d_allocTiles(map2, 1);
36
G3d_fatalError("G3d_retile: error in G3d_allocTiles");
38
G3d_getNofTilesMap(map2, &nx, &ny, &nz);
40
for (z = 0; z < nz; z++)
41
for (y = 0; y < ny; y++)
42
for (x = 0; x < nx; x++) {
44
G3d_getBlock(map, x * tileX, y * tileY, z * tileZ,
45
tileX, tileY, tileZ, data, typeIntern);
47
(map2, G3d_tile2tileIndex(map2, x, y, z), data,
50
("G3d_retileNocache: error in G3d_writeTile");
57
/*---------------------------------------------------------------------------*/
63
* Makes a copy of <em>map</em> with name <em>nameOut</em> which has
64
* tile dimensions <em>tileX</em>, <em>tileY</em>, <em>tileZ</em>.
65
* The source code can be found in <em>retile.c</em>.
76
G3d_retile(void *map, const char *nameOut, int tileX, int tileY, int tileZ)
80
int x, y, z, saveType;
81
int rows, cols, depths, typeIntern;
82
int xTile, yTile, zTile;
83
int xOffs, yOffs, zOffs, prev;
84
int tileXsave, tileYsave, tileZsave;
87
if (!G3d_tileUseCacheMap(map)) {
88
retileNocache(map, nameOut, tileX, tileY, tileZ);
92
saveType = G3d_getFileType();
93
G3d_setFileType(G3d_fileTypeMap(map));
94
G3d_getTileDimension(&tileXsave, &tileYsave, &tileZsave);
95
G3d_setTileDimension(tileX, tileY, tileZ);
97
typeIntern = G3d_tileTypeMap(map);
98
G3d_getRegionStructMap(map, ®ion);
101
G3d_openCellNew(nameOut, typeIntern, G3D_USE_CACHE_DEFAULT, ®ion);
103
G3d_fatalError("G3d_retile: error in G3d_openCellNew");
105
G3d_setFileType(saveType);
106
G3d_setTileDimension(tileXsave, tileYsave, tileZsave);
108
G3d_coord2tileCoord(map2, 0, 0, 0,
109
&xTile, &yTile, &zTile, &xOffs, &yOffs, &zOffs);
116
G3d_getCoordsMap(map, &rows, &cols, &depths);
118
for (z = 0; z < depths; z++) {
119
G3d_coord2tileCoord(map2, x, y, z, &xTile, &yTile, &zTile,
120
&xOffs, &yOffs, &zOffs);
122
if (!G3d_flushAllTiles(map2))
123
G3d_fatalError("G3d_retile: error in G3d_flushAllTiles");
127
for (y = 0; y < rows; y++)
128
for (x = 0; x < cols; x++) {
130
G3d_getValueRegion(map, x, y, z, &value, typeIntern);
131
if (!G3d_putValue(map2, x, y, z, &value, typeIntern))
132
G3d_fatalError("G3d_retile: error in G3d_putValue");
136
if (!G3d_flushAllTiles(map2))
137
G3d_fatalError("G3d_retile: error in G3d_flushAllTiles");
138
if (!G3d_closeCell(map2))
139
G3d_fatalError("G3d_retile: error in G3d_closeCell");