- added constructor to level
authorIngo Ruhnke <grumbel@gmx.de>
Sun, 18 Apr 2004 13:42:15 +0000 (13:42 +0000)
committerIngo Ruhnke <grumbel@gmx.de>
Sun, 18 Apr 2004 13:42:15 +0000 (13:42 +0000)
- changed framerate handling to avoid large frame_ratio's

SVN-Revision: 554

src/gameloop.cpp
src/globals.cpp
src/globals.h
src/level.cpp
src/level.h
src/resources.cpp
src/special.cpp
src/world.cpp

index d0368f0..1f1131a 100644 (file)
@@ -10,6 +10,7 @@
   April 11, 2000 - March 15, 2004
 */
 
+#include <iostream>
 #include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -345,10 +346,7 @@ GameSession::action(double frame_ratio)
   
   if (exit_status == NONE)
     {
-      Player* tux = world->get_tux();
-      
       // Update Tux and the World
-      tux->action(frame_ratio);
       world->action(frame_ratio);
     }
 }
@@ -410,12 +408,11 @@ GameSession::run()
 
   draw();
 
+  float overlap = 0.0f;
   while (exit_status == NONE)
     {
       /* Calculate the movement-factor */
       double frame_ratio = ((double)(update_time-last_update_time))/((double)FRAME_RATE);
-      if(frame_ratio > 1.5) /* Quick hack to correct the unprecise CPU clocks a little bit. */
-        frame_ratio = 1.5 + (frame_ratio - 1.5) * 0.85;
 
       if(!frame_timer.check())
         {
@@ -463,7 +460,15 @@ GameSession::run()
       // Handle actions:
       if(!game_pause && !show_menu)
         {
-          action(frame_ratio);
+          frame_ratio *= game_speed;
+          frame_ratio += overlap;
+          while (frame_ratio > 0)
+            {
+              action(1.0f);
+              frame_ratio -= 1.0f;
+            }
+          overlap = frame_ratio;
+
           if (exit_status != NONE)
             return exit_status;
         }
index cab9307..b121bc2 100644 (file)
@@ -32,6 +32,7 @@ bool use_joystick;
 bool use_fullscreen;
 bool debug_mode;
 bool show_fps;
+float game_speed = 1.0f;
 
 int joystick_num = 0;
 char* level_startup_file = 0;
index e205c5b..625abf3 100644 (file)
@@ -49,6 +49,7 @@ extern bool launch_worldmap_mode;
 extern char* st_dir;
 extern char* st_save_dir;
 
+extern float game_speed;
 extern SDL_Joystick * js;
 
 int wait_for_event(SDL_Event& event,unsigned int min_delay = 0, unsigned int max_delay = 0, bool empty_events = false);
index d13f449..970c7b0 100644 (file)
@@ -190,6 +190,20 @@ void st_subset::free()
   levels = 0;
 }
 
+Level::Level()
+{
+}
+
+Level::Level(const std::string& subset, int level)
+{
+  load(subset, level);
+}
+
+Level::Level(const std::string& filename)
+{
+  load(filename);
+}
+
 void
 Level::init_defaults()
 {
@@ -659,7 +673,6 @@ Level::load_song()
   free(song_path);
 }
 
-
 unsigned int 
 Level::gettileid(float x, float y)
 {
index e3efe0d..3f4bf10 100644 (file)
@@ -73,6 +73,10 @@ class Level
 
   std::vector<BadGuyData> badguy_data;
  public:
+  Level();
+  Level(const std::string& subset, int level);
+  Level(const std::string& filename);
+
   /** Will the Level structure with default values */
   void init_defaults();
   
@@ -88,6 +92,7 @@ class Level
   int  load(const std::string& filename);
 
   void load_gfx();
+  void free_gfx();
   
   void load_song();
   void free_song();
@@ -103,8 +108,6 @@ class Level
   /** Return the id of the tile at position x/y */
   unsigned int gettileid(float x, float y);
 
-  void free_gfx();
-
   void load_image(Surface** ptexture, std::string theme, const char * file, int use_alpha);
 };
 
index ed01dc6..9abc401 100644 (file)
@@ -145,11 +145,11 @@ void loadshared()
 
 
   ducktux_right = new Surface(datadir +
-               "/images/shared/ducktux-right.png",
+               "/images/shared/tux-duck-right.png",
                USE_ALPHA);
 
   ducktux_left = new Surface(datadir +
-               "/images/shared/ducktux-left.png",
+               "/images/shared/tux-duck-left.png",
                USE_ALPHA);
 
   skidtux_right = new Surface(datadir +
index 25ffd17..78ae363 100644 (file)
@@ -323,8 +323,7 @@ void load_special_gfx()
     img_growup = new Surface(datadir + "/images/shared/egg.png", USE_ALPHA);
     img_iceflower = new Surface(datadir + "/images/shared/iceflower.png",
             USE_ALPHA);
-    img_golden_herring = new Surface(datadir +
-            "/images/shared/star.png", USE_ALPHA);
+    img_golden_herring = new Surface(datadir + "/images/shared/star.png", USE_ALPHA);
     img_1up = new Surface(datadir + "/images/shared/1up.png",
             USE_ALPHA);
 
index 1be985e..2617f53 100644 (file)
@@ -39,10 +39,9 @@ World::World(const std::string& filename)
   // world calls child functions
   current_ = this;
 
-  level = new Level;
+  level = new Level(filename);
   tux.init();
 
-  level->load(filename);
   set_defaults();
 
   get_level()->load_gfx();
@@ -57,10 +56,9 @@ World::World(const std::string& subset, int level_nr)
   // world calls child functions
   current_ = this;
 
-  level = new Level;
+  level = new Level(subset, level_nr);
   tux.init();
 
-  level->load(subset, level_nr);
   set_defaults();
 
   get_level()->load_gfx();
@@ -205,6 +203,8 @@ World::draw()
 void
 World::action(double frame_ratio)
 {
+  tux.action(frame_ratio);
+
   /* Handle bouncy distros: */
   for (unsigned int i = 0; i < bouncy_distros.size(); i++)
     bouncy_distros[i].action(frame_ratio);