void defineTerrain( long x, long y, bool flat = false ) { // if a file is available, use it // if not, generate file from import // Usually in a real project you'll know whether the compact terrain data is // available or not; I'm doing it this way to save distribution size if( flat ) { mTerrainGroup->defineTerrain( x, y, 0.0f ); } else { String filename = mTerrainGroup->generateFilename( x, y ); if( ResourceGroupManager::getSingleton().resourceExists( mTerrainGroup->getResourceGroup(), filename ) ) { mTerrainGroup->defineTerrain( x, y ); } else { Image img; getTerrainImage( x % 2 != 0, y % 2 != 0, img ); mTerrainGroup->defineTerrain( x, y, &img ); mTerrainsImported = true; } } }
/** * * \param nPageX * \param nPageY * \param vPos * \param nMinBatchSize * \param nMaxBatchSize * \param nLayerCount * \param tpl * \param bAtOnceLoad * \return */ bool EditorTerrainPage::configure(int nPageX, int nPageY, const Vector3& vPos, uint16 nMinBatchSize, uint16 nMaxBatchSize, uint16 nLayerCount, const STerrainPageLayer& tpl, bool bAtOnceLoad) { EditorTerrain* pPlugin = static_cast<EditorTerrain*>( EditorPluginManager::getSingletonPtr()->findPlugin(EDITOR_TERRAIN) ); if (pPlugin) { TerrainGroup* pTerrainGroup = pPlugin->getTerrainGroup(); if (pTerrainGroup) { Terrain::ImportData dmp; dmp.terrainSize = pTerrainGroup->getTerrainSize(); dmp.worldSize = pTerrainGroup->getTerrainWorldSize(); dmp.pos = vPos; dmp.inputImage = 0; dmp.inputFloat = 0; dmp.constantHeight = 0; dmp.inputScale = 0.0f; dmp.minBatchSize = nMinBatchSize; dmp.maxBatchSize = nMaxBatchSize; dmp.layerList.resize(nLayerCount); for (int i=0; i<nLayerCount; i++) { dmp.layerList[i].worldSize = tpl.fLayerWorldSize[i]; dmp.layerList[i].textureNames.push_back(tpl.layerDiffuseTexture[i]); dmp.layerList[i].textureNames.push_back(tpl.layerNormalTexture[i]); } pTerrainGroup->defineTerrain(nPageX, nPageY, &dmp); if (bAtOnceLoad) { pTerrainGroup->loadTerrain(nPageX, nPageY, true); } if (!m_pTerrain) { m_pTerrain = pTerrainGroup->getTerrain(nPageX, nPageY); } return true; } } else { TKLogEvent("Can't find terrain plugin : " + EDITOR_TERRAIN, LML_CRITICAL); } return 0; }