try to force vsyncing for opengl, the desktop resolution detection and vsyncing only...
[supertux.git] / src / sector.cpp
index 904e1b2..5ced57b 100644 (file)
@@ -25,8 +25,8 @@
 #include <fstream>
 #include <sstream>
 #include <stdexcept>
-#include <cfloat>
-#include <cmath>
+#include <float.h>
+#include <math.h>
 #include <limits>
 #include <physfs.h>
 
@@ -177,6 +177,7 @@ Sector::parse_object(const std::string& name, const lisp::Lisp& reader)
 void
 Sector::parse(const lisp::Lisp& sector)
 {
+  bool has_background = false;
   lisp::ListIterator iter(&sector);
   while(iter.next()) {
     const std::string& token = iter.item();
@@ -202,11 +203,22 @@ Sector::parse(const lisp::Lisp& sector)
     } else {
       GameObject* object = parse_object(token, *(iter.lisp()));
       if(object) {
+        if(dynamic_cast<Background *>(object)) {
+           has_background = true;
+        } else if(dynamic_cast<Gradient *>(object)) {
+           has_background = true;
+        }
         add_object(object);
       }
     }
   }
 
+  if(!has_background) {
+    Gradient* gradient = new Gradient();
+    gradient->set_gradient(Color(0.3, 0.4, 0.75), Color(1, 1, 1));
+    add_object(gradient);
+  }
+
   update_game_objects();
 
   if(solid_tilemaps.size() < 1) log_warning << "sector '" << name << "' does not contain a solid tile layer." << std::endl;
@@ -684,6 +696,18 @@ Sector::update_game_objects()
     gameobjects.push_back(object);
   }
   gameobjects_new.clear();
+
+  /* update solid_tilemaps list */
+  //FIXME: this could be more efficient
+  solid_tilemaps.clear();
+  for(std::vector<GameObject*>::iterator i = gameobjects.begin();
+      i != gameobjects.end(); ++i)
+  {
+    TileMap* tm = dynamic_cast<TileMap*>(*i);
+    if (!tm) continue;
+    if (tm->is_solid()) solid_tilemaps.push_back(tm);
+  }
+
 }
 
 bool