Beispiel #1
0
void TerrainLattice::Paint(ParaEngine::TextureEntity* detailTexture, float brushRadius, float brushIntensity, float maxIntensity, bool erase, float x, float y)
{
	Terrain * AffectedTerrainTiles[4];
	Terrain * pCenterTerrain = GetTerrainAtPoint(x, y);
	if(pCenterTerrain==NULL || pCenterTerrain->IsEmpty())
		return;

	float fLogicalBrushRadius = brushRadius;
	AffectedTerrainTiles[0] = GetTerrainAtPoint(x+fLogicalBrushRadius, y+fLogicalBrushRadius);
	AffectedTerrainTiles[1] = GetTerrainAtPoint(x+fLogicalBrushRadius, y-fLogicalBrushRadius);
	AffectedTerrainTiles[2] = GetTerrainAtPoint(x-fLogicalBrushRadius, y+fLogicalBrushRadius);
	AffectedTerrainTiles[3] = GetTerrainAtPoint(x-fLogicalBrushRadius, y-fLogicalBrushRadius);

	for(int i=0;i<4; i++)
	{
		Terrain * pTerrain = AffectedTerrainTiles[i];
		bool bDraw = true;
		for(int k=i-1;k>=0; --k)
		{
			if(AffectedTerrainTiles[k] == pTerrain)
			{
				bDraw = false;
				break;
			}
		}
		if(bDraw && pTerrain != NULL && (! pTerrain->IsEmpty()))
		{
			pTerrain->SetModified(true, MODIFIED_TEXTURE);
			pTerrain->Paint(detailTexture, brushRadius, brushIntensity, maxIntensity, erase, x,y);
		}
	}
}
Beispiel #2
0
void TerrainLattice::SetAllLoadedModified(bool bIsModified, DWORD dwModifiedBits)
{
	bool bSaveConfigFile = false;
	TerrainTileCacheMap_type::iterator itCurCP, itEndCP = m_pCachedTerrains.end();
	for( itCurCP = m_pCachedTerrains.begin(); itCurCP != itEndCP; ++ itCurCP)
	{
		Terrain* pTerrain = (*itCurCP).second.pTerrain;
		pTerrain->SetModified(bIsModified, dwModifiedBits);
	}
}
Beispiel #3
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;
}
Beispiel #4
0
void CGlobalTerrain::SetContentModified(float x, float y, bool bIsModified, DWORD dwModifiedBits)
{
	if (m_nTerrainType == LATTICED_TERRAIN)
	{
		if (m_pTerrainLattice)
		{
			Terrain * pTerrain = m_pTerrainLattice->GetTerrainAtPoint(x, y);
			if (pTerrain)
			{
				return pTerrain->SetModified(bIsModified, dwModifiedBits);
			}
		}
	}
	else if (m_nTerrainType == SINGLE_TERRAIN)
	{
		if (m_pTerrainSingle)
			return m_pTerrainSingle->SetModified(bIsModified, dwModifiedBits);
	}
}
Beispiel #5
0
bool CGlobalTerrain::ReplaceTexture(float x, float y, int nIndex, TextureEntity* TextureAsset)
{
	Terrain * pTerrain = GetTerrainAtPoint(x, y);
	if (pTerrain && (nIndex >= 0 || TextureAsset != 0))
	{
		if (nIndex >= 0)
		{
			if (pTerrain->GetTextureSet())
			{
				if (TextureAsset)
				{
					if (pTerrain->GetTextureSet()->ReplaceTexture(nIndex, TextureAsset))
					{
						pTerrain->SetModified(true, MODIFIED_TEXTURE);
						return true;
					}
				}
				else
				{
					// True to normalize mask of the undeleted layers. 
					bool bNormalizeMask = true;
					pTerrain->GetTextureSet()->RemoveTexture(nIndex, pTerrain, bNormalizeMask);
				}
			}
		}
		else if (nIndex == -1)
		{
			// -1: common texture, which is repeated several times over each terrain tile surface.
			pTerrain->SetTerrainCommonTextureFile(TextureAsset->GetKey());
			return true;
		}
		else if (nIndex == -2)
		{
			// -2: main texture, which is chopped and mapped to the entire terrain surface.
			pTerrain->SetTerrainBaseTextureFile(TextureAsset->GetKey());
			return true;
		}
	}
	return false;
}