forked from teamnwah/openmw-tes3coop
a46804dae3
git-svn-id: https://openmw.svn.sourceforge.net/svnroot/openmw/trunk@112 ea6a568a-9f4f-0410-981a-c910a81bb256
84 lines
2 KiB
C++
84 lines
2 KiB
C++
/**
|
|
* @brief the class that deals with loading quads from the disk @todo a
|
|
* major improvment would be to store the data as a quad tree. It might
|
|
* improve lookup times. Then again. Might not
|
|
*/
|
|
class MWHeightmap : public TerrainHeightmap
|
|
{
|
|
public:
|
|
QuadData* getData(Quad* q)
|
|
{
|
|
MWQuadData* data = loadQuad(q->getPosition().x,q->getPosition().y);
|
|
|
|
if ( !data )
|
|
assert(0);
|
|
|
|
return data;
|
|
}
|
|
|
|
inline bool hasData(Quad* q) {
|
|
return hasQuad(q->getPosition().x,q->getPosition().y);
|
|
}
|
|
|
|
inline long getRootSideLength() {
|
|
return mIndex.getRootSideLength();
|
|
}
|
|
inline int getMaxDepth() {
|
|
return mIndex.getMaxDepth();
|
|
}
|
|
|
|
/**
|
|
* Loads the index and palette
|
|
*/
|
|
bool load(const std::string& fn)
|
|
{
|
|
{
|
|
std::ifstream ifs(std::string(fn + ".index").c_str(), std::ios::binary);
|
|
boost::archive::binary_iarchive oa(ifs);
|
|
oa >> mIndex;
|
|
}
|
|
{
|
|
std::ifstream ifs(std::string(fn + ".palette").c_str(), std::ios::binary);
|
|
boost::archive::binary_iarchive oa(ifs);
|
|
oa >> mPalette;
|
|
}
|
|
mMaterialGen.setTexturePaths(mPalette.getPalette());
|
|
|
|
mMaterialGenerator = new MWQuadMaterialGen(&mMaterialGen);
|
|
|
|
mDataIFS.open(std::string(fn + ".data").c_str(), std::ios::binary);
|
|
return true;
|
|
}
|
|
|
|
private:
|
|
|
|
inline long hasQuad(long x, long y) {
|
|
return (mIndex.getOffset(x,y) != -1 ) ;
|
|
}
|
|
|
|
/**
|
|
* @brief loads the quad data from the disk
|
|
*/
|
|
MWQuadData* loadQuad(long x, long y)
|
|
{
|
|
long offset = mIndex.getOffset(x,y);
|
|
if ( offset == -1 ) //check we have xy
|
|
return 0;
|
|
|
|
mDataIFS.seekg(offset);
|
|
|
|
//load the quad from the file
|
|
MWQuadData* q = new MWQuadData(this);
|
|
boost::archive::binary_iarchive oa(mDataIFS);
|
|
oa >> *q;
|
|
return q;
|
|
}
|
|
|
|
///ifs for the data file. Opned on load
|
|
std::ifstream mDataIFS;
|
|
///holds the offsets of the quads
|
|
Index mIndex;
|
|
TexturePalette mPalette;
|
|
///material generator. gens a ogre::material from quad data
|
|
MaterialGenerator mMaterialGen;
|
|
};
|