X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fsprite%2Fsprite_manager.cpp;h=f1de683d85027601f3c40dc7b78b034dc2ca380a;hb=198f758764fff064a47630b5d0f1e3d6aabe95a8;hp=e6ab67f90a34027529e8d0587436510e65459612;hpb=0f0e6a3689e5d810ec55b68ff455210b1081a021;p=supertux.git diff --git a/src/sprite/sprite_manager.cpp b/src/sprite/sprite_manager.cpp index e6ab67f90..f1de683d8 100644 --- a/src/sprite/sprite_manager.cpp +++ b/src/sprite/sprite_manager.cpp @@ -1,7 +1,7 @@ // $Id$ // // SuperTux -// Copyright (C) 2004 Ingo Ruhnke +// Copyright (C) 2006 Matthias Braun // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -16,6 +16,7 @@ // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + #include #include @@ -29,17 +30,12 @@ #include "lisp/parser.hpp" #include "lisp/list_iterator.hpp" #include "file_system.hpp" -#include "msg.hpp" +#include "log.hpp" + +SpriteManager* sprite_manager = NULL; -SpriteManager::SpriteManager(const std::string& filename) +SpriteManager::SpriteManager() { -#ifdef DEBUG - Uint32 ticks = SDL_GetTicks(); -#endif - load_resfile(filename); -#ifdef DEBUG - msg_debug("Loaded sprites in " << (SDL_GetTicks() - ticks) / 1000.0f << " seconds"); -#endif } SpriteManager::~SpriteManager() @@ -49,43 +45,6 @@ SpriteManager::~SpriteManager() } } -void -SpriteManager::load_resfile(const std::string& filename) -{ - lisp::Parser parser; - try { - std::auto_ptr root (parser.parse(filename)); - - const lisp::Lisp* resources = root->get_lisp("supertux-resources"); - if(!resources) - throw std::runtime_error("file is not a supertux-resources files"); - - lisp::ListIterator iter(resources); - while(iter.next()) { - if(iter.item() == "sprite") { - SpriteData* spritedata = new SpriteData(iter.lisp(), "images/"); - - Sprites::iterator i = sprites.find(spritedata->get_name()); - if (i == sprites.end()) { - sprites[spritedata->get_name()] = spritedata; - } else { - delete i->second; - i->second = spritedata; - msg_warning("dulpicate entry: '" << spritedata->get_name() - << "' in spritefile."); - } - } else { - msg_warning("Unknown tag '" << iter.item() - << "' in spritefile."); - } - } - } catch(std::exception& e) { - std::stringstream msg; - msg << "Couldn't load file '" << filename << "': " << e.what() << "\n"; - throw std::runtime_error(msg.str()); - } -} - Sprite* SpriteManager::create(const std::string& name) { @@ -102,7 +61,7 @@ SpriteManager::create(const std::string& name) } else { data = i->second; } - + return new Sprite(*data); } @@ -110,7 +69,16 @@ SpriteData* SpriteManager::load(const std::string& filename) { lisp::Parser parser; - std::auto_ptr root (parser.parse(filename)); + const lisp::Lisp* root; + + try { + root = parser.parse(filename); + } catch(const std::exception& e) { + std::ostringstream msg; + msg << "Parse error when trying to load sprite '" << filename + << "': " << e.what() << "\n"; + throw std::runtime_error(msg.str()); + } const lisp::Lisp* sprite = root->get_lisp("supertux-sprite"); if(!sprite) { @@ -122,7 +90,6 @@ SpriteManager::load(const std::string& filename) std::auto_ptr data ( new SpriteData(sprite, FileSystem::dirname(filename)) ); sprites[filename] = data.release(); - + return sprites[filename]; } -