LipSync *ResourceLoader::loadLipSync(const char *filename) { Common::String fname = filename; fname.toLowercase(); LipSync *result; Block *b = getFileFromCache(fname.c_str()); if (!b) { b = getFileBlock(fname.c_str()); if (!b) return NULL; } result = new LipSync(filename, b->data(), b->len()); // Some lipsync files have no data if (result->isValid()) { putIntoCache(fname, b); _lipsyncs.push_back(result); } else { delete result; delete b; result = NULL; } return result; }
Block *ResourceLoader::getBlock(const char *filename) { Common::String fname = filename; fname.toLowercase(); Block *b = getFileFromCache(fname.c_str()); if (!b) { b = getFileBlock(fname.c_str()); if (b) { putIntoCache(fname, b); } } return b; }
Costume *ResourceLoader::loadCostume(const char *filename, Costume *prevCost) { Common::String fname = filename; fname.toLowercase(); Block *b = getFileFromCache(fname.c_str()); if (!b) { b = getFileBlock(fname.c_str()); if (!b) error("Could not find costume \"%s\"", filename); putIntoCache(fname, b); } Costume *result = new Costume(filename, b->data(), b->len(), prevCost); return result; }
Model *ResourceLoader::loadModel(const char *filename, CMap *c) { Common::String fname = filename; fname.toLowercase(); Block *b = getFileFromCache(fname.c_str()); if (!b) { b = getFileBlock(fname.c_str()); if (!b) error("Could not find model %s", filename); putIntoCache(fname, b); } Model *result = new Model(filename, b->data(), b->len(), c); _models.push_back(result); return result; }
KeyframeAnim *ResourceLoader::loadKeyframe(const char *filename) { Common::String fname = filename; fname.toLowercase(); Block *b = getFileFromCache(fname.c_str()); if (!b) { b = getFileBlock(fname.c_str()); if (!b) error("Could not find keyframe file %s", filename); putIntoCache(fname, b); } KeyframeAnim *result = new KeyframeAnim(filename, b->data(), b->len()); _keyframeAnims.push_back(result); return result; }
Font *ResourceLoader::loadFont(const char *filename) { Common::String fname = filename; fname.toLowercase(); Block *b = getFileFromCache(fname.c_str()); if (!b) { b = getFileBlock(fname.c_str()); if (!b) error("Could not find font file %s", filename); putIntoCache(fname, b); } Font *result = new Font(filename, b->data(), b->len()); _fonts.push_back(result); return result; }
CMap *ResourceLoader::loadColormap(const char *filename) { Common::String fname = filename; fname.toLowercase(); Block *b = getFileFromCache(fname.c_str()); if (!b) { b = getFileBlock(fname.c_str()); if (!b) { error("Could not find colormap %s", filename); } putIntoCache(fname, b); } CMap *result = new CMap(filename, b->data(), b->len()); _colormaps.push_back(result); return result; }
Bitmap *ResourceLoader::loadBitmap(const char *filename) { Common::String fname = filename; fname.toLowercase(); Block *b = getFileFromCache(fname.c_str()); if (!b) { b = getFileBlock(fname.c_str()); if (!b) { // Grim sometimes asks for non-existant bitmaps (eg, ha_overhead) warning("Could not find bitmap %s", filename); return NULL; } putIntoCache(fname, b); } Bitmap *result = g_grim->registerBitmap(filename, b->data(), b->len()); _bitmaps.push_back(result); return result; }
Common::SeekableReadStream *ResourceLoader::openNewStreamFile(Common::String fname, bool cache) { Common::SeekableReadStream *s; fname.toLowercase(); if (cache) { s = getFileFromCache(fname); if (!s) { s = loadFile(fname); if (!s) return NULL; uint32 size = s->size(); byte *buf = new byte[size]; s->read(buf, size); putIntoCache(fname, buf, size); delete s; s = new Common::MemoryReadStream(buf, size); } } else { s = loadFile(fname); } // This will only have an effect if the stream is actually compressed. return Common::wrapCompressedReadStream(s); }