[Super-tux-commit] supertux/src level.cpp,1.83,1.84
Brought to you by:
wkendrick
From: Matze B. <mat...@us...> - 2004-05-23 22:46:47
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5659 Modified Files: level.cpp Log Message: fix a bug when resizing maps and when saving maps which I recently introduced Index: level.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/level.cpp,v retrieving revision 1.83 retrieving revision 1.84 diff -u -d -r1.83 -r1.84 --- level.cpp 23 May 2004 20:20:20 -0000 1.83 +++ level.cpp 23 May 2004 22:46:34 -0000 1.84 @@ -498,6 +498,7 @@ writer.start_list("point"); writer.write_int("x", i->x); writer.write_int("y", i->y); + writer.end_list("point"); } writer.end_list("reset-points"); @@ -566,27 +567,39 @@ void Level::resize(int new_width, int new_height) { - // first: resize height - ia_tiles.resize(new_height * width, 0); - bg_tiles.resize(new_height * width, 0); - fg_tiles.resize(new_height * width, 0); - height = new_height; + if(new_width < width) { + // remap tiles for new width + for(int y = 0; y < height && y < new_height; ++y) { + for(int x = 0; x < new_width; ++x) { + ia_tiles[y * new_width + x] = ia_tiles[y * width + x]; + bg_tiles[y * new_width + x] = bg_tiles[y * width + x]; + fg_tiles[y * new_width + x] = fg_tiles[y * width + x]; + } + } + } - // remap horizontal tiles for new width - int np = 0; - for(int y = 0; y < height; ++y) { - for(int x = 0; x < new_width && x < width; ++x) { - ia_tiles[np] = ia_tiles[y * width + x]; - bg_tiles[np] = bg_tiles[y * width + x]; - fg_tiles[np] = fg_tiles[y * width + x]; - np++; + ia_tiles.resize(new_width * new_height); + bg_tiles.resize(new_width * new_height); + fg_tiles.resize(new_width * new_height); + + if(new_width > width) { + // remap tiles + for(int y = std::min(height, new_height)-1; y >= 0; --y) { + for(int x = new_width-1; x >= 0; --x) { + if(x >= width) { + ia_tiles[y * new_width + x] = 0; + bg_tiles[y * new_width + x] = 0; + fg_tiles[y * new_width + x] = 0; + } else { + ia_tiles[y * new_width + x] = ia_tiles[y * width + x]; + bg_tiles[y * new_width + x] = bg_tiles[y * width + x]; + fg_tiles[y * new_width + x] = fg_tiles[y * width + x]; + } + } } } - ia_tiles.resize(new_height * new_width); - bg_tiles.resize(new_height * new_width); - fg_tiles.resize(new_height * new_width); - + height = new_height; width = new_width; } |