#if UNITY_EDITOR
using System.IO;
using UnityEditor;
#endif
using UnityEngine;
namespace WSMGameStudio.TerrainTools
{
public class WSM_TerrainBackup : MonoBehaviour
{
///
/// Save terrain backup to disk
///
public void SaveBackup()
{
#if UNITY_EDITOR
Terrain terrain = GetComponent();
if (terrain == null) return;
TerrainData originalData = terrain.terrainData;
string originalDataFileName = AssetDatabase.GetAssetPath(originalData);
string backupDataFileName = originalDataFileName.Replace(".asset", "_backup.asset");
FileInfo fileinfo = new FileInfo(backupDataFileName);
if (fileinfo != null)
{
AssetDatabase.CopyAsset(originalDataFileName, backupDataFileName);
}
#endif
}
///
/// Load terrain backup from disk
///
public void LoadBackup()
{
#if UNITY_EDITOR
Terrain terrain = GetComponent();
if (terrain == null) return;
TerrainData originalData = terrain.terrainData;
string originalDataFileName = AssetDatabase.GetAssetPath(originalData);
string backupDataFileName = originalDataFileName.Replace(".asset", "_backup.asset");
FileInfo fileinfo = new FileInfo(backupDataFileName);
if (fileinfo != null && fileinfo.Exists)
{
TerrainData backupData = AssetDatabase.LoadAssetAtPath(backupDataFileName);
if (backupData != null)
{
// Heightmap
if (originalData.heightmapResolution == backupData.heightmapResolution)
originalData.SetHeights(0, 0, backupData.GetHeights(0, 0, backupData.heightmapResolution, backupData.heightmapResolution));
else
Debug.LogWarning(string.Format("{0} - Not possible to restore HEIGHTMAP due to resolution disparity. Current: {1}x{2} Backup: {3}x{4}", terrain.gameObject.name, originalData.heightmapResolution, originalData.heightmapResolution, backupData.heightmapResolution, backupData.heightmapResolution));
// Textures
if (originalData.alphamapWidth == backupData.alphamapWidth && originalData.alphamapHeight == backupData.alphamapHeight && originalData.alphamapLayers == backupData.alphamapLayers)
originalData.SetAlphamaps(0, 0, backupData.GetAlphamaps(0, 0, backupData.alphamapWidth, backupData.alphamapHeight));
else
Debug.LogWarning(string.Format("{0} - Not possible to restore TEXTURES due to resolution disparity. Current: {1}x{2} Backup: {3}x{4}. Original Layers: {5} Backup Layers: {6}", terrain.gameObject.name, originalData.alphamapWidth, originalData.alphamapHeight, backupData.alphamapWidth, backupData.alphamapHeight, originalData.alphamapLayers, backupData.alphamapLayers));
//Trees and details are not supported yet
// Trees
//originalData.treeInstances = backupData.treeInstances;
// Grasses
//originalData.SetDetailLayer(0, 0, 0, backupData.GetDetailLayer(0, 0, backupData.detailWidth, backupData.detailHeight, 0));
terrain.terrainData.SyncHeightmap();
}
}
#endif
}
}
}