<MatzeB> fixes some remaining memory leaks
authorIngo Ruhnke <grumbel@gmx.de>
Wed, 28 Apr 2004 13:18:54 +0000 (13:18 +0000)
committerIngo Ruhnke <grumbel@gmx.de>
Wed, 28 Apr 2004 13:18:54 +0000 (13:18 +0000)
SVN-Revision: 803

src/resources.cpp
src/setup.cpp
src/setup.h
src/supertux.cpp
src/text.cpp
src/texture.cpp
src/title.cpp
src/world.cpp
src/world.h
src/worldmap.cpp

index 024694b..64a60cf 100644 (file)
@@ -218,6 +218,7 @@ void unloadshared(void)
   for (i = 0; i < 2; i++)
     delete img_flag[i];
 
+  delete img_red_glow;
   for (i = 0; i < 4; i++)
     {
       delete img_distro[i];
@@ -225,6 +226,8 @@ void unloadshared(void)
       delete img_cloud[1][i];
     }
 
+  delete tux_life;
+
   for (i = 0; i < NUM_SOUNDS; i++)
     free_chunk(sounds[i]);
 
index 449b8e3..d286691 100644 (file)
@@ -600,7 +600,6 @@ void st_general_free(void)
 {
 
   /* Free global images: */
-
   delete black_text;
   delete gold_text;
   delete white_text;
@@ -608,6 +607,7 @@ void st_general_free(void)
   delete red_text;
   delete white_small_text;
   delete white_big_text;
+  delete yellow_nums;
 
   /* Free GUI/menu images: */
   delete checkbox;
index 331a765..1661be7 100644 (file)
@@ -33,6 +33,7 @@ string_list_type dfiles(const char *rel_path, const char* glob, const char* exce
 void free_strings(char **strings, int num);
 void st_directory_setup(void);
 void st_general_setup(void);
+void st_general_free();
 void st_video_setup_sdl(void);
 void st_video_setup_gl(void);
 void st_video_setup(void);
index ce71bc9..facb42a 100644 (file)
@@ -65,6 +65,7 @@ int main(int argc, char * argv[])
   updatescreen();
 
   unloadshared();
+  st_general_free();
   TileManager::destroy_instance();
 #ifdef DEBUG
   Surface::debug_check();
index 6d2e3a5..ee0e7b8 100644 (file)
@@ -70,6 +70,12 @@ Text::Text(const std::string& file, int kind_, int w_, int h_)
   SDL_FreeSurface(conv);
 }
 
+Text::~Text()
+{
+  delete chars;
+  delete shadow_chars;
+}
+
 void
 Text::draw(const  char* text, int x, int y, int shadowsize, int update)
 {
@@ -182,14 +188,6 @@ Text::drawf(const  char* text, int x, int y,
     }
 }
 
-Text::~Text()
-{
-  if(kind == TEXT_TEXT)
-    delete chars;
-  else if(kind == TEXT_NUM)
-    delete chars;
-}
-
 /* --- ERASE TEXT: --- */
 
 void
index 0051368..7773b7f 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <assert.h>
 #include <iostream>
+#include <algorithm>
 #include "SDL.h"
 #include "SDL_image.h"
 #include "texture.h"
@@ -163,6 +164,17 @@ Surface::reload()
 
 Surface::~Surface()
 {
+#ifdef DEBUG
+  bool found = false;
+  for(std::list<Surface*>::iterator i = surfaces.begin(); i != surfaces.end();
+          ++i) {
+      if(*i == this) {
+          found = true; break;
+      }
+  }
+  if(!found)
+    printf("Error: Surface freed twice!!!\n");
+#endif
   surfaces.remove(this);
   delete impl;
 }
index 4064e97..cb3a512 100644 (file)
@@ -362,6 +362,7 @@ void title(void)
 
   delete bkg_title;
   delete logo;
+  delete img_choose_subset;
 }
 
 // EOF //
index e1795c0..fb9d49b 100644 (file)
@@ -101,6 +101,10 @@ World::~World()
 {
   for (BadGuys::iterator i = bad_guys.begin(); i != bad_guys.end(); ++i)
     delete *i;
+
+  for (ParticleSystems::iterator i = particle_systems.begin();
+          i != particle_systems.end(); ++i)
+    delete *i;
   
   delete level;
 }
index 3399e03..62ca1d6 100644 (file)
@@ -57,7 +57,8 @@ public:
 
   std::vector<Upgrade> upgrades;
   std::vector<Bullet> bullets;
-  std::vector<ParticleSystem*> particle_systems;
+  typedef std::vector<ParticleSystem*> ParticleSystems;
+  ParticleSystems particle_systems;
 
 public:
   static World* current() { return current_; }
index cfc03be..00c3a85 100644 (file)
@@ -674,7 +674,7 @@ WorldMap::update(float delta)
                         if (dir != NONE)
                           {
                             tux->set_direction(dir);
-                            tux->update(delta);
+                            //tux->update(delta);
                           }
 
                         std::cout << "Walk to dir: " << dir << std::endl;
@@ -724,8 +724,8 @@ WorldMap::update(float delta)
     }
   else
     {
-      tux->set_direction(input_direction);
       tux->update(delta);
+      tux->set_direction(input_direction);
     }
   
   Menu* menu = Menu::current();
@@ -866,6 +866,9 @@ WorldMap::display()
 
       delta *= 1.3f;
 
+      if (delta > 10.0f)
+        delta = .3f;
+      
       last_update_time = update_time;
       update_time      = st_get_ticks();