Beispiel #1
0
Terrain *TerrainLattice::GetTerrainRelative(Terrain * pTerrain, int positionX, int positionY)
{
	Terrain *pRequestedTerrain = NULL;
	if (-1 <= positionX && positionX <= 1 && -1 <= positionY && positionY <= 1)
	{
		int x, y;
		pTerrain->GetLatticePosition(x, y);
		x += positionX;
		y += positionY;

		TerrainTileCacheMap_type::iterator iter = m_pCachedTerrains.find(m_CurrentTerrainIndex[ParaTerrain::DIR_CENTER]);
		if(iter == m_pCachedTerrains.end())
		{
			return NULL;
		}
		Terrain *pTerrainCenter = (*iter).second.pTerrain;

		int centerX, centerY;
		pTerrainCenter->GetLatticePosition(centerX, centerY);
		if (abs(x - centerX) <= m_WidthActiveTerrains && abs(y - centerY) <= m_HeightActiveTerrains)
		{
			if (0 <= x && 0 <= y)
				pRequestedTerrain = GetTerrain(x, y);
		}
	}
	return pRequestedTerrain;
}
Beispiel #2
0
void TerrainLattice::SaveTerrain(bool bHeightMap, bool bTextures)
{
	bool bSaveConfigFile = false;
	TerrainTileCacheMap_type::iterator itCurCP, itEndCP = m_pCachedTerrains.end();
	for( itCurCP = m_pCachedTerrains.begin(); itCurCP != itEndCP; ++ itCurCP)
	{
		Terrain* pTerrain = (*itCurCP).second.pTerrain;
		if(pTerrain->IsModified())
		{
			if(pTerrain->IsEmpty()){
				pTerrain->SetModified(false, MODIFIED_ALL);
			}
			else
			{
				int x,y;
				pTerrain->GetLatticePosition(x,y);
				string sConfig = CGlobals::GetWorldInfo()->GetTerrainConfigFile(x,y);
				if(pTerrain->m_sConfigFile != sConfig)
				{
					pTerrain->m_sConfigFile = sConfig;
					pTerrain->SetModified(true, MODIFIED_CONFIGURATION | MODIFIED_TEXTURE);
					if (m_pLoader)
					{
						m_pLoader->UpdateTileConfigFile(x,y, sConfig);
					}
					bSaveConfigFile = true;
				}
				pTerrain->SaveToFile();
				pTerrain->SetModified(false, MODIFIED_ALL);
			}
		}
	}
	// save global world config file if any terrain tile is newly created. 
	if(m_bIsGlobalConfigModified || bSaveConfigFile)
	{
		if(m_pLoader){
			m_pLoader->SaveWorldConfigFile();
		}
	}
	m_bIsGlobalConfigModified = false;
}