- more c++-ification
authorIngo Ruhnke <grumbel@gmx.de>
Sat, 10 Apr 2004 20:16:15 +0000 (20:16 +0000)
committerIngo Ruhnke <grumbel@gmx.de>
Sat, 10 Apr 2004 20:16:15 +0000 (20:16 +0000)
SVN-Revision: 454

src/gameloop.cpp
src/gameloop.h
src/level.cpp
src/level.h
src/leveleditor.cpp
src/physic.cpp

index 5d1c64b..d602d9d 100644 (file)
@@ -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<BadGuyData>::iterator i = plevel->badguy_data.begin();
        i != plevel->badguy_data.end();
@@ -374,9 +374,9 @@ int game_action(void)
       activate_bad_guys(&current_level);
       activate_particle_systems();
       level_free_gfx();
-      level_load_gfx(&current_level);
+      current_level.load_gfx();
       level_free_song();
-      level_load_song(&current_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(&current_level);
+  current_level.load_gfx();
   loadshared();
   activate_bad_guys(&current_level);
   activate_particle_systems();
-  level_load_song(&current_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(&current_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(&current_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(&current_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(&current_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(&current_level);
       activate_particle_systems();
       level_free_gfx();
-      level_load_gfx(&current_level);
+      current_level.load_gfx();
       level_free_song();
-      level_load_song(&current_level);
+      current_level.load_song();
       levelintro();
       update_time = st_get_ticks();
 
index 71c1756..6e940c4 100644 (file)
 #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);
index ecd15c9..8aa7e64 100644 (file)
@@ -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<BadGuyData>::iterator it = plevel->
-      badguy_data.begin();
-      it != plevel->badguy_data.end();
+  for(std::vector<BadGuyData>::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);
 }
index 8c48f84..dc946ad 100644 (file)
@@ -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);
index 5dcc547..f95e9b4 100644 (file)
@@ -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);
 }
index f315661..02eb5c4 100644 (file)
@@ -75,7 +75,7 @@ Physic::get_acceleration_y()
 void
 Physic::enable_gravity(bool enable_gravity)
 {
-    gravity_enabled = enable_gravity;
+  gravity_enabled = enable_gravity;
 }
 
 void