#include "lisp/parser.hpp"
#include "sprite/sprite.hpp"
#include "util/file_system.hpp"
+#include "util/reader.hpp"
+
+#include <sstream>
+#include <stdexcept>
-SpriteManager* sprite_manager = NULL;
SpriteManager::SpriteManager() :
sprites()
}
}
-std::auto_ptr<Sprite>
+SpritePtr
SpriteManager::create(const std::string& name)
{
Sprites::iterator i = sprites.find(name);
data = i->second;
}
- return std::auto_ptr<Sprite>(new Sprite(*data));
+ return SpritePtr(new Sprite(*data));
}
SpriteData*
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
throw std::runtime_error(msg.str());
}
- std::auto_ptr<SpriteData> data (
- new SpriteData(sprite, FileSystem::dirname(filename)) );
+ std::unique_ptr<SpriteData> data (
+ new SpriteData(*sprite, FileSystem::dirname(filename)) );
sprites[filename] = data.release();
return sprites[filename];