Replaced std::auto_ptr<> with std::unique_ptr<>
[supertux.git] / src / sprite / sprite_manager.cpp
index eab6711..6c6628e 100644 (file)
 #include "util/file_system.hpp"
 #include "util/reader.hpp"
 
+#include <sstream>
+#include <stdexcept>
+
+
 SpriteManager::SpriteManager() :
   sprites()
 {
@@ -33,7 +37,7 @@ SpriteManager::~SpriteManager()
   }
 }
 
-std::auto_ptr<Sprite>
+SpritePtr
 SpriteManager::create(const std::string& name)
 {
   Sprites::iterator i = sprites.find(name);
@@ -50,7 +54,7 @@ SpriteManager::create(const std::string& name)
     data = i->second;
   }
 
-  return std::auto_ptr<Sprite>(new Sprite(*data));
+  return SpritePtr(new Sprite(*data));
 }
 
 SpriteData*
@@ -60,7 +64,18 @@ SpriteManager::load(const std::string& filename)
   const lisp::Lisp* root;
 
   try {
-    root = parser.parse(filename);
+    if(filename.size() >= 7 && filename.compare(filename.size() - 7, 7, ".sprite") == 0) {
+        // Sprite file
+        root = parser.parse(filename);
+    } else {
+      // Load image file directly
+      std::stringstream lisptext;
+      lisptext << "(supertux-sprite (action "
+               <<    "(name \"default\") "
+               <<    "(images \"" << FileSystem::basename(filename) << "\")))";
+
+      root = parser.parse(lisptext, "SpriteManager::load");
+    }
   } catch(const std::exception& e) {
     std::ostringstream msg;
     msg << "Parse error when trying to load sprite '" << filename
@@ -75,7 +90,7 @@ SpriteManager::load(const std::string& filename)
     throw std::runtime_error(msg.str());
   }
 
-  std::auto_ptr<SpriteData> data (
+  std::unique_ptr<SpriteData> data (
     new SpriteData(*sprite, FileSystem::dirname(filename)) );
   sprites[filename] = data.release();