From 0aedb4f52061e892106bf4b931187ffed09971bb Mon Sep 17 00:00:00 2001 From: Ingo Ruhnke Date: Sat, 10 Apr 2004 20:16:15 +0000 Subject: [PATCH] - more c++-ification SVN-Revision: 454 --- src/gameloop.cpp | 24 ++++----- src/gameloop.h | 4 +- src/level.cpp | 153 ++++++++++++++++++++++++++-------------------------- src/level.h | 25 +++++---- src/leveleditor.cpp | 30 +++++------ src/physic.cpp | 2 +- 6 files changed, 120 insertions(+), 118 deletions(-) diff --git a/src/gameloop.cpp b/src/gameloop.cpp index 5d1c64bc9..d602d9d0e 100644 --- a/src/gameloop.cpp +++ b/src/gameloop.cpp @@ -44,7 +44,7 @@ /* extern variables */ -st_level current_level; +Level current_level; int game_started = false; /* Local variables: */ @@ -99,7 +99,7 @@ void start_timers(void) update_time = st_get_ticks(); } -void activate_bad_guys(st_level* plevel) +void activate_bad_guys(Level* plevel) { for (std::vector::iterator i = plevel->badguy_data.begin(); i != plevel->badguy_data.end(); @@ -374,9 +374,9 @@ int game_action(void) activate_bad_guys(¤t_level); activate_particle_systems(); level_free_gfx(); - level_load_gfx(¤t_level); + current_level.load_gfx(); level_free_song(); - level_load_song(¤t_level); + current_level.load_song(); if(st_gl_mode != ST_GL_TEST) levelintro(); start_timers(); @@ -608,11 +608,11 @@ int gameloop(const char * subset, int levelnb, int mode) exit(1); } - level_load_gfx(¤t_level); + current_level.load_gfx(); loadshared(); activate_bad_guys(¤t_level); activate_particle_systems(); - level_load_song(¤t_level); + current_level.load_song(); tux.init(); @@ -1214,7 +1214,7 @@ void trybreakbrick(float x, float y, bool small) } if (distro_counter <= 0) - level_change(¤t_level,x, y, TM_IA, tile->next_tile); + current_level.change(x, y, TM_IA, tile->next_tile); play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER); score = score + SCORE_DISTRO; @@ -1223,7 +1223,7 @@ void trybreakbrick(float x, float y, bool small) else if (!small) { /* Get rid of it: */ - level_change(¤t_level,x, y, TM_IA, tile->next_tile); + current_level.change(x, y, TM_IA, tile->next_tile); /* Replace it with broken bits: */ add_broken_brick(((int)(x + 1) / 32) * 32, @@ -1285,7 +1285,7 @@ void tryemptybox(float x, float y, int col_side) } /* Empty the box: */ - level_change(¤t_level,x, y, TM_IA, tile->next_tile); + current_level.change(x, y, TM_IA, tile->next_tile); } /* Try to grab a distro: */ @@ -1294,7 +1294,7 @@ void trygrabdistro(float x, float y, int bounciness) Tile* tile = gettile(x, y); if (tile && tile->distro) { - level_change(¤t_level,x, y, TM_IA, tile->next_tile); + current_level.change(x, y, TM_IA, tile->next_tile); play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER); if (bounciness == BOUNCE) @@ -1489,9 +1489,9 @@ void loadgame(int slot) activate_bad_guys(¤t_level); activate_particle_systems(); level_free_gfx(); - level_load_gfx(¤t_level); + current_level.load_gfx(); level_free_song(); - level_load_song(¤t_level); + current_level.load_song(); levelintro(); update_time = st_get_ticks(); diff --git a/src/gameloop.h b/src/gameloop.h index 71c175680..6e940c44c 100644 --- a/src/gameloop.h +++ b/src/gameloop.h @@ -25,14 +25,14 @@ #define ST_GL_LOAD_LEVEL_FILE 3 // FIXME: Make this local to the gamesession -extern st_level current_level; +extern Level current_level; extern int game_started; /* Function prototypes: */ class Tile; -void activate_bad_guys(st_level* plevel); +void activate_bad_guys(Level* plevel); int gameloop(const char * subset, int levelnb, int mode); void savegame(int slot); void loadgame(int slot); diff --git a/src/level.cpp b/src/level.cpp index ecd15c995..8aa7e64b3 100644 --- a/src/level.cpp +++ b/src/level.cpp @@ -35,14 +35,14 @@ st_subset::st_subset() void st_subset::create(const std::string& subset_name) { - st_level new_lev; + Level new_lev; st_subset new_subset; new_subset.name = subset_name; new_subset.title = "Unknown Title"; new_subset.description = "No description so far."; new_subset.save(); new_lev.init_defaults(); - level_save(&new_lev,subset_name.c_str(),1); + new_lev.save(subset_name.c_str(),1); } void st_subset::parse (lisp_object_t* cursor) @@ -193,7 +193,7 @@ void st_subset::free() } void -st_level::init_defaults() +Level::init_defaults() { name = "UnNamed"; theme = "antarctica"; @@ -231,7 +231,7 @@ st_level::init_defaults() /* Load data for this level: */ /* Returns -1, if the loading of the level failed. */ int -st_level::load(const char *subset, int level) +Level::load(const char *subset, int level) { char filename[1024]; @@ -245,7 +245,7 @@ st_level::load(const char *subset, int level) } int -st_level::load(const char* filename) +Level::load(const char* filename) { FILE * fi; lisp_object_t* root_obj = 0; @@ -442,11 +442,10 @@ st_level::load(const char* filename) /* Save data for level: */ -void level_save(st_level* plevel,const char * subset, int level) +void +Level::save(const char * subset, int level) { - FILE * fi; char filename[1024]; - int y,i; char str[80]; /* Save data file: */ @@ -456,7 +455,7 @@ void level_save(st_level* plevel,const char * subset, int level) if(!fwriteable(filename)) snprintf(filename, 1024, "%s/levels/%s/level%d.stl", datadir.c_str(), subset, level); - fi = fopen(filename, "w"); + FILE * fi = fopen(filename, "w"); if (fi == NULL) { perror(filename); @@ -470,49 +469,48 @@ void level_save(st_level* plevel,const char * subset, int level) fprintf(fi,"(supertux-level\n"); fprintf(fi," (version %d)\n", 1); - fprintf(fi," (name \"%s\")\n", plevel->name.c_str()); - fprintf(fi," (theme \"%s\")\n", plevel->theme.c_str()); - fprintf(fi," (music \"%s\")\n", plevel->song_title.c_str()); - fprintf(fi," (background \"%s\")\n", plevel->bkgd_image.c_str()); - fprintf(fi," (particle_system \"%s\")\n", plevel->particle_system.c_str()); - fprintf(fi," (bkgd_red %d)\n", plevel->bkgd_red); - fprintf(fi," (bkgd_green %d)\n", plevel->bkgd_green); - fprintf(fi," (bkgd_blue %d)\n", plevel->bkgd_blue); - fprintf(fi," (time %d)\n", plevel->time_left); - fprintf(fi," (width %d)\n", plevel->width); - fprintf(fi," (gravity %2.1f)\n", plevel->gravity); + fprintf(fi," (name \"%s\")\n", name.c_str()); + fprintf(fi," (theme \"%s\")\n", theme.c_str()); + fprintf(fi," (music \"%s\")\n", song_title.c_str()); + fprintf(fi," (background \"%s\")\n", bkgd_image.c_str()); + fprintf(fi," (particle_system \"%s\")\n", particle_system.c_str()); + fprintf(fi," (bkgd_red %d)\n", bkgd_red); + fprintf(fi," (bkgd_green %d)\n", bkgd_green); + fprintf(fi," (bkgd_blue %d)\n", bkgd_blue); + fprintf(fi," (time %d)\n", time_left); + fprintf(fi," (width %d)\n", width); + fprintf(fi," (gravity %2.1f)\n", gravity); fprintf(fi," (background-tm "); - for(y = 0; y < 15; ++y) + for(int y = 0; y < 15; ++y) { - for(i = 0; i < plevel->width; ++i) - fprintf(fi," %d ", plevel->bg_tiles[y][i]); + for(int i = 0; i < width; ++i) + fprintf(fi," %d ", bg_tiles[y][i]); } fprintf( fi,")\n"); fprintf(fi," (interactive-tm "); - for(y = 0; y < 15; ++y) + for(int y = 0; y < 15; ++y) { - for(i = 0; i < plevel->width; ++i) - fprintf(fi," %d ", plevel->ia_tiles[y][i]); + for(int i = 0; i < width; ++i) + fprintf(fi," %d ", ia_tiles[y][i]); } fprintf( fi,")\n"); fprintf(fi," (foreground-tm "); - for(y = 0; y < 15; ++y) + for(int y = 0; y < 15; ++y) { - for(i = 0; i < plevel->width; ++i) - fprintf(fi," %d ", plevel->fg_tiles[y][i]); + for(int i = 0; i < width; ++i) + fprintf(fi," %d ", fg_tiles[y][i]); } fprintf( fi,")\n"); fprintf( fi,"(objects\n"); - for(std::vector::iterator it = plevel-> - badguy_data.begin(); - it != plevel->badguy_data.end(); + for(std::vector::iterator it = badguy_data.begin(); + it != badguy_data.end(); ++it) fprintf( fi,"(%s (x %d) (y %d))\n",badguykind_to_string((*it).kind).c_str(),(*it).x,(*it).y); @@ -527,7 +525,7 @@ void level_save(st_level* plevel,const char * subset, int level) /* Unload data for this level: */ void -st_level::cleanup() +Level::cleanup() { for(int i=0; i < 15; ++i) free(bg_tiles[i]); @@ -546,43 +544,43 @@ st_level::cleanup() /* Load graphics: */ -void level_load_gfx(st_level *plevel) +void +Level::load_gfx() { - level_load_image(&img_brick[0],plevel->theme,"brick0.png", IGNORE_ALPHA); - level_load_image(&img_brick[1],plevel->theme,"brick1.png", IGNORE_ALPHA); + level_load_image(&img_brick[0],theme,"brick0.png", IGNORE_ALPHA); + level_load_image(&img_brick[1],theme,"brick1.png", IGNORE_ALPHA); - level_load_image(&img_solid[0],plevel->theme,"solid0.png", USE_ALPHA); - level_load_image(&img_solid[1],plevel->theme,"solid1.png", USE_ALPHA); - level_load_image(&img_solid[2],plevel->theme,"solid2.png", USE_ALPHA); - level_load_image(&img_solid[3],plevel->theme,"solid3.png", USE_ALPHA); + level_load_image(&img_solid[0],theme,"solid0.png", USE_ALPHA); + level_load_image(&img_solid[1],theme,"solid1.png", USE_ALPHA); + level_load_image(&img_solid[2],theme,"solid2.png", USE_ALPHA); + level_load_image(&img_solid[3],theme,"solid3.png", USE_ALPHA); - level_load_image(&img_bkgd_tile[0][0],plevel->theme,"bkgd-00.png", USE_ALPHA); - level_load_image(&img_bkgd_tile[0][1],plevel->theme,"bkgd-01.png", USE_ALPHA); - level_load_image(&img_bkgd_tile[0][2],plevel->theme,"bkgd-02.png", USE_ALPHA); - level_load_image(&img_bkgd_tile[0][3],plevel->theme,"bkgd-03.png", USE_ALPHA); + level_load_image(&img_bkgd_tile[0][0],theme,"bkgd-00.png", USE_ALPHA); + level_load_image(&img_bkgd_tile[0][1],theme,"bkgd-01.png", USE_ALPHA); + level_load_image(&img_bkgd_tile[0][2],theme,"bkgd-02.png", USE_ALPHA); + level_load_image(&img_bkgd_tile[0][3],theme,"bkgd-03.png", USE_ALPHA); - level_load_image(&img_bkgd_tile[1][0],plevel->theme,"bkgd-10.png", USE_ALPHA); - level_load_image(&img_bkgd_tile[1][1],plevel->theme,"bkgd-11.png", USE_ALPHA); - level_load_image(&img_bkgd_tile[1][2],plevel->theme,"bkgd-12.png", USE_ALPHA); - level_load_image(&img_bkgd_tile[1][3],plevel->theme,"bkgd-13.png", USE_ALPHA); + level_load_image(&img_bkgd_tile[1][0],theme,"bkgd-10.png", USE_ALPHA); + level_load_image(&img_bkgd_tile[1][1],theme,"bkgd-11.png", USE_ALPHA); + level_load_image(&img_bkgd_tile[1][2],theme,"bkgd-12.png", USE_ALPHA); + level_load_image(&img_bkgd_tile[1][3],theme,"bkgd-13.png", USE_ALPHA); - if(!plevel->bkgd_image.empty()) + if(!bkgd_image.empty()) { char fname[1024]; - snprintf(fname, 1024, "%s/background/%s", st_dir, plevel->bkgd_image.c_str()); + snprintf(fname, 1024, "%s/background/%s", st_dir, bkgd_image.c_str()); if(!faccessible(fname)) - snprintf(fname, 1024, "%s/images/background/%s", datadir.c_str(), plevel->bkgd_image.c_str()); + snprintf(fname, 1024, "%s/images/background/%s", datadir.c_str(), bkgd_image.c_str()); texture_load(&img_bkgd, fname, IGNORE_ALPHA); } else { /* Quick hack to make sure an image is loaded, when we are freeing it afterwards. */# - level_load_image(&img_bkgd, plevel->theme,"solid0.png", IGNORE_ALPHA); + level_load_image(&img_bkgd, theme,"solid0.png", IGNORE_ALPHA); } } /* Free graphics data for this level: */ - void level_free_gfx(void) { int i; @@ -628,38 +626,37 @@ void tilemap_change_size(unsigned int** tilemap[15], int w, int old_w) } /* Change the size of a level (width) */ -void level_change_size (st_level* plevel, int new_width) +void +Level::change_size (int new_width) { if(new_width < 21) new_width = 21; - tilemap_change_size((unsigned int***)&plevel->ia_tiles,new_width,plevel->width); - tilemap_change_size((unsigned int***)&plevel->bg_tiles,new_width,plevel->width); - tilemap_change_size((unsigned int***)&plevel->fg_tiles,new_width,plevel->width); - plevel->width = new_width; -} + tilemap_change_size((unsigned int***)&ia_tiles, new_width, width); + tilemap_change_size((unsigned int***)&bg_tiles, new_width, width); + tilemap_change_size((unsigned int***)&fg_tiles, new_width, width); -/* Edit a piece of the map! */ + width = new_width; +} -void level_change(st_level* plevel, float x, float y, int tm, unsigned int c) +void +Level::change(float x, float y, int tm, unsigned int c) { - int xx, yy; + int yy = ((int)y / 32); + int xx = ((int)x / 32); - yy = ((int)y / 32); - xx = ((int)x / 32); - - if (yy >= 0 && yy < 15 && xx >= 0 && xx <= plevel->width) + if (yy >= 0 && yy < 15 && xx >= 0 && xx <= width) { switch(tm) { case TM_BG: - plevel->bg_tiles[yy][xx] = c; + bg_tiles[yy][xx] = c; break; case TM_IA: - plevel->ia_tiles[yy][xx] = c; + ia_tiles[yy][xx] = c; break; case TM_FG: - plevel->fg_tiles[yy][xx] = c; + fg_tiles[yy][xx] = c; break; } } @@ -675,20 +672,20 @@ void level_free_song(void) /* Load music: */ -void level_load_song(st_level* plevel) +void +Level::load_song() { + char* song_path; + char* song_subtitle; - char * song_path; - char * song_subtitle; - - level_song = load_song(datadir + "/music/" + plevel->song_title); + level_song = ::load_song(datadir + "/music/" + song_title); song_path = (char *) malloc(sizeof(char) * datadir.length() + - strlen(plevel->song_title.c_str()) + 8 + 5); - song_subtitle = strdup(plevel->song_title.c_str()); + strlen(song_title.c_str()) + 8 + 5); + song_subtitle = strdup(song_title.c_str()); strcpy(strstr(song_subtitle, "."), "\0"); - sprintf(song_path, "%s/music/%s-fast%s", datadir.c_str(), song_subtitle, strstr(plevel->song_title.c_str(), ".")); - level_song_fast = load_song(song_path); + sprintf(song_path, "%s/music/%s-fast%s", datadir.c_str(), song_subtitle, strstr(song_title.c_str(), ".")); + level_song_fast = ::load_song(song_path); free(song_subtitle); free(song_path); } diff --git a/src/level.h b/src/level.h index 8c48f8490..dc946adf9 100644 --- a/src/level.h +++ b/src/level.h @@ -55,7 +55,7 @@ extern texture_type img_bkgd_tile[2][4]; extern texture_type img_solid[4]; extern texture_type img_brick[2]; -class st_level +class Level { public: std::string name; @@ -81,19 +81,24 @@ class st_level /** Cleanup the level struct from allocated tile data and such */ void cleanup(); - int load(const char * subset, int level); + int load(const char* subset, int level); int load(const char* filename); - + + void load_gfx(); + void load_song(); + + void save(const char* subset, int level); + + /** Edit a piece of the map! */ + void change(float x, float y, int tm, unsigned int c); + + /** Resize the level to a new width */ + void change_size (int new_width); }; -void level_save (st_level* plevel, const char * subset, int level); -void level_load_gfx (st_level* plevel); -void level_change (st_level* plevel, float x, float y, int tm, unsigned int c); -void level_change_size (st_level* plevel, int new_width); -void level_load_song(st_level* plevel); -void level_free_gfx(); void level_load_image(texture_type* ptexture, std::string theme, const char * file, int use_alpha); -void level_free_song(void); +void level_free_song(); +void level_free_gfx(); /** Return the id of the tile at the given x/y coordinates */ unsigned int gettileid(float x, float y); diff --git a/src/leveleditor.cpp b/src/leveleditor.cpp index 5dcc547bf..f95e9b44b 100644 --- a/src/leveleditor.cpp +++ b/src/leveleditor.cpp @@ -86,7 +86,7 @@ static string_list_type level_subsets; static bool le_level_changed; /* if changes, ask for saving, when quiting*/ static int pos_x, cursor_x, cursor_y, fire; static int le_level; -static st_level* le_current_level; +static Level* le_current_level; static st_subset le_level_subset; static int le_show_grid; static int le_frame; @@ -244,14 +244,14 @@ int leveleditor(int levelnb) le_level = 1; arrays_free(); loadshared(); - le_current_level = new st_level; + le_current_level = new Level; if(le_current_level->load(le_level_subset.name.c_str(), le_level) != 0) { le_quit(); return 1; } le_set_defaults(); - level_load_gfx(le_current_level); + le_current_level->load_gfx(); activate_bad_guys(le_current_level); show_menu = true; } @@ -275,14 +275,14 @@ int leveleditor(int levelnb) le_level = 1; arrays_free(); loadshared(); - le_current_level = new st_level; + le_current_level = new Level; if(le_current_level->load(le_level_subset.name.c_str(), le_level) != 0) { le_quit(); return 1; } le_set_defaults(); - level_load_gfx(le_current_level); + le_current_level->load_gfx(); activate_bad_guys(le_current_level); menu_item_change_input(&subset_new_menu->item[2],""); show_menu = true; @@ -520,12 +520,12 @@ void apply_level_settings_menu() if(i) { level_free_gfx(); - level_load_gfx(le_current_level); + le_current_level->load_gfx(); } le_current_level->song_title = string_list_active(level_settings_menu->item[4].list); - level_change_size(le_current_level, atoi(level_settings_menu->item[6].input)); + le_current_level->change_size(atoi(level_settings_menu->item[6].input)); le_current_level->time_left = atoi(level_settings_menu->item[7].input); le_current_level->gravity = atof(level_settings_menu->item[8].input); le_current_level->bkgd_red = atoi(level_settings_menu->item[9].input); @@ -558,7 +558,7 @@ void le_goto_level(int levelnb) level_free_gfx(); - level_load_gfx(le_current_level); + le_current_level->load_gfx(); activate_bad_guys(le_current_level); } @@ -915,7 +915,7 @@ void le_checkevents() le_testlevel(); le_save_level_bt->event(event); if(le_save_level_bt->get_state() == BUTTON_CLICKED) - level_save(le_current_level,le_level_subset.name.c_str(),le_level); + le_current_level->save(le_level_subset.name.c_str(),le_level); le_exit_bt->event(event); if(le_exit_bt->get_state() == BUTTON_CLICKED) { @@ -931,7 +931,7 @@ void le_checkevents() } else { - st_level new_lev; + Level new_lev; char str[1024]; int d = 0; sprintf(str,"Level %d doesn't exist.",le_level+1); @@ -949,7 +949,7 @@ void le_checkevents() { case SDLK_y: new_lev.init_defaults(); - level_save(&new_lev,le_level_subset.name.c_str(),++le_level); + new_lev.save(le_level_subset.name.c_str(),++le_level); le_level_subset.levels = le_level; le_goto_level(le_level); d = 1; @@ -1113,7 +1113,7 @@ void le_change(float x, float y, int tm, unsigned int c) switch(le_selection_mode) { case CURSOR: - level_change(le_current_level,x,y,tm,c); + le_current_level->change(x,y,tm,c); yy = ((int)y / 32); xx = ((int)x / 32); @@ -1167,7 +1167,7 @@ void le_change(float x, float y, int tm, unsigned int c) for(xx = x1; xx <= x2; xx++) for(yy = y1; yy <= y2; yy++) { - level_change(le_current_level, xx*32, yy*32, tm, c); + le_current_level->change(xx*32, yy*32, tm, c); if(c == '0') // if it's a bad guy add_bad_guy(xx*32, yy*32, BAD_BSOD); @@ -1185,11 +1185,11 @@ void le_change(float x, float y, int tm, unsigned int c) void le_testlevel() { - level_save(le_current_level,"test",le_level); + le_current_level->save("test", le_level); gameloop("test",le_level, ST_GL_TEST); Menu::set_current(leveleditor_menu); arrays_free(); - level_load_gfx(le_current_level); + le_current_level->load_gfx(); loadshared(); activate_bad_guys(le_current_level); } diff --git a/src/physic.cpp b/src/physic.cpp index f31566158..02eb5c479 100644 --- a/src/physic.cpp +++ b/src/physic.cpp @@ -75,7 +75,7 @@ Physic::get_acceleration_y() void Physic::enable_gravity(bool enable_gravity) { - gravity_enabled = enable_gravity; + gravity_enabled = enable_gravity; } void -- 2.11.0