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;
}
|