//--------------------------------------------------------------------- bool PagedWorld::load(StreamSerialiser& ser) { if (!ser.readChunkBegin(CHUNK_ID, CHUNK_VERSION, "PagedWorld")) return false; // Name ser.read(&mName); // Sections while(ser.peekNextChunkID() == CHUNK_SECTIONDECLARATION_ID) { ser.readChunkBegin(); String sectionType, sectionName; ser.read(§ionType); ser.read(§ionName); ser.readChunkEnd(CHUNK_SECTIONDECLARATION_ID); // Scene manager will be loaded PagedWorldSection* sec = createSection(0, sectionType, sectionName); bool sectionsOk = sec->load(ser); if (!sectionsOk) destroySection(sec); } ser.readChunkEnd(CHUNK_ID); return true; }
//--------------------------------------------------------------------- bool Page::prepareImpl(StreamSerialiser& stream, PageData* dataToPopulate) { // Now do the real loading if (!stream.readChunkBegin(CHUNK_ID, CHUNK_VERSION, "Page")) return false; // pageID check (we should know the ID we're expecting) uint32 storedID; stream.read(&storedID); if (mID != storedID) { LogManager::getSingleton().stream() << "Error: Tried to populate Page ID " << mID << " with data corresponding to page ID " << storedID; stream.undoReadChunk(CHUNK_ID); return false; } PageManager* mgr = getManager(); while(stream.peekNextChunkID() == CHUNK_CONTENTCOLLECTION_DECLARATION_ID) { const StreamSerialiser::Chunk* collChunk = stream.readChunkBegin(); String factoryName; stream.read(&factoryName); stream.readChunkEnd(CHUNK_CONTENTCOLLECTION_DECLARATION_ID); // Supported type? PageContentCollectionFactory* collFact = mgr->getContentCollectionFactory(factoryName); if (collFact) { PageContentCollection* collInst = collFact->createInstance(); if (collInst->prepare(stream)) // read type-specific data { dataToPopulate->collectionsToAdd.push_back(collInst); } else { LogManager::getSingleton().stream() << "Error preparing PageContentCollection type: " << factoryName << " in " << *this; collFact->destroyInstance(collInst); } } else { LogManager::getSingleton().stream() << "Unsupported PageContentCollection type: " << factoryName << " in " << *this; // skip stream.readChunkEnd(collChunk->id); } } mModified = false; return true; }
void MetaBall::read( StreamSerialiser & input ) { Real nRadius; MetaObject::read(input); input.read(&_fExcavating); input.read(&nRadius); _sphere.setRadius(nRadius); _sphere.setCenter(_pos); }
//--------------------------------------------------------------------- bool PagedWorldSection::load(StreamSerialiser& ser) { if (!ser.readChunkBegin(CHUNK_ID, CHUNK_VERSION, "PagedWorldSection")) return false; // Name ser.read(&mName); // AABB ser.read(&mAABB); // SceneManager type String smType, smInstanceName; SceneManager* sm = 0; ser.read(&smType); ser.read(&smInstanceName); Root& root = Root::getSingleton(); if (root.hasSceneManager(smInstanceName)) sm = root.getSceneManager(smInstanceName); else sm = root.createSceneManager(smType, smInstanceName); setSceneManager(sm); // Page Strategy Name String stratname; ser.read(&stratname); setStrategy(stratname); // Page Strategy Data bool strategyDataOk = mStrategyData->load(ser); if (!strategyDataOk) LogManager::getSingleton().stream() << "Error: PageStrategyData for section '" << mName << "' was not loaded correctly, check file contents"; /// Load any data specific to a subtype of this class loadSubtypeData(ser); ser.readChunkEnd(CHUNK_ID); return true; }
//--------------------------------------------------------------------- bool Grid3DPageStrategyData::load(StreamSerialiser& ser) { if (!ser.readChunkBegin(CHUNK_ID, CHUNK_VERSION, "Grid3DPageStrategyData")) return false; ser.read(&mOrigin); ser.read(&mCellSize); ser.read(&mLoadRadius); ser.read(&mHoldRadius); ser.read(&mMinCellX); ser.read(&mMaxCellX); ser.read(&mMinCellY); ser.read(&mMaxCellY); ser.read(&mMinCellZ); ser.read(&mMaxCellZ); ser.readChunkEnd(CHUNK_ID); return true; }