ArabDesert/Assets/Editor/x64/Bakery/scripts/ftRestorePaddingMenu.cs

89 lines
3.7 KiB
C#

using UnityEngine;
using UnityEditor;
using UnityEngine.SceneManagement;
public class ftRestorePaddingMenu
{
[MenuItem("Bakery/Utilities/Re-adjust UV padding", false, 43)]
private static void RestorePadding()
{
var bakeryRuntimePath = ftLightmaps.GetRuntimePath();
var gstorage = AssetDatabase.LoadAssetAtPath(bakeryRuntimePath + "ftGlobalStorage.asset", typeof(ftGlobalStorage)) as ftGlobalStorage;
if (gstorage == null)
{
Debug.Log("Bakery is not initalized");
return;
}
if (EditorUtility.DisplayDialog("Bakery", "Re-unwrap and reimport lightmapped scene models to match last bake?", "OK", "Cancel"))
{
var sceneCount = SceneManager.sceneCount;
int reimported = 0;
for(int i=0; i<sceneCount; i++)
{
var scene = SceneManager.GetSceneAt(i);
if (!scene.isLoaded) continue;
var go = ftLightmaps.FindInScene("!ftraceLightmaps", scene);
if (go == null) continue;
var store = go.GetComponent<ftLightmapsStorage>();
if (store == null) continue;
for(int j=0; j<store.modifiedAssetPathList.Count; j++)
{
bool updated = false;
var path = store.modifiedAssetPathList[j];
var data = store.modifiedAssets[j];
int mstoreIndex = gstorage.modifiedAssetPathList.IndexOf(path);
if (mstoreIndex < 0)
{
mstoreIndex = gstorage.modifiedAssetPathList.Count;
gstorage.modifiedAssetPathList.Add(path);
gstorage.modifiedAssets.Add(data);
updated = true;
}
else
{
var dataExisting = gstorage.modifiedAssets[mstoreIndex];
for(int k=0; k<data.meshName.Count; k++)
{
int ind = dataExisting.meshName.IndexOf( data.meshName[k] );
if (ind >= 0)
{
if (dataExisting.padding[ind] != data.padding[k])
{
dataExisting.padding[ind] = data.padding[k];
updated = true;
}
if (dataExisting.unwrapper[ind] != data.unwrapper[k])
{
dataExisting.unwrapper[ind] = data.unwrapper[k];
updated = true;
}
}
else
{
dataExisting.meshName.Add( data.meshName[k] );
dataExisting.padding.Add( data.padding[k] );
dataExisting.unwrapper.Add( data.unwrapper[k] );
updated = true;
}
}
}
if (updated)
{
#if UNITY_2017_1_OR_NEWER
gstorage.SyncModifiedAsset(mstoreIndex);
#endif
EditorUtility.SetDirty(gstorage);
(AssetImporter.GetAtPath(path) as ModelImporter).SaveAndReimport();
reimported++;
}
}
}
Debug.Log(reimported > 0 ? ("Updated " + reimported + " models") : "No changes detected");
}
}
}