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()); } }
void SExprFileWriter::write_path(const char* name, const Pathname& path) { write_string(name, path.get_raw_path()); }
void JsonWriterImpl::write_path(const char* name, const Pathname& value) { write_string(name, value.get_raw_path()); }