void ResourceManager::add_resources_from_directory(const Pathname& path) { assert(path.get_type() == Pathname::DATA_PATH); std::vector<std::string> files = System::opendir_recursive(path.get_sys_path()); for(auto it = files.begin(); it != files.end(); ++it) { if (StringUtil::has_suffix(*it, ".sprite") || StringUtil::has_suffix(*it, ".png") || StringUtil::has_suffix(*it, ".jpg")) { // FIXME: ugly hack to remove "data/images/" prefix, need better // way to cut stuff away m_resources.push_back(System::cut_file_extension(it->substr(12))); } } std::sort(m_resources.begin(), m_resources.end()); }
SpriteData::SpriteData(const Pathname& pathname) : actions() { if (pathname.exists()) { const std::string ext = pathname.get_extension(); if (ext == "sprite") { FileReader reader = FileReader::parse(pathname); if(reader.get_name() != "sprite") { std::ostringstream msg; msg << "File " << pathname << " is not a windstille sprite"; throw std::runtime_error(msg.str()); } parse(pathname.get_dirname(), reader); } else if (ext == "png" || ext == "jpg") { std::auto_ptr<SpriteAction> action(new SpriteAction()); action->name = "default"; action->speed = 1.0; action->scale = 1.0f; action->offset = Vector2f(0, 0); action->surfaces.push_back(Surface::create(pathname)); actions.push_back(action.release()); } else { std::ostringstream str; str << "Sprite " << pathname << " has unknown suffix: '" << ext << "'"; throw std::runtime_error(str.str()); } } else if (pathname.get_raw_path().length() > std::string(".sprite").length()) { // If sprite file is not found, we search for a file with the // same name ending in .png Pathname pngfile(pathname.get_raw_path().substr(0, pathname.get_raw_path().length() - std::string(".sprite").length()) + ".png", pathname.get_type()); if (pngfile.exists()) { std::auto_ptr<SpriteAction> action(new SpriteAction); action->name = "default"; action->speed = 1.0; action->scale = 1.0f; action->offset = Vector2f(0, 0); action->surfaces.push_back(Surface::create(pngfile)); actions.push_back(action.release()); } else { std::ostringstream str; str << "Couldn't find " << pngfile; throw std::runtime_error(str.str()); } } else { std::ostringstream str; str << "Couldn't find " << pathname; throw std::runtime_error(str.str()); } }