//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 loyalsoft. All rights reserved.
// Homepage: http://www.game7000.com/
// Feedback: http://www.game7000.com/
//------------------------------------------------------------
using GameFramework;
using UnityEditor;
using UnityEngine;
namespace UnityGameFramework.Editor.ResourceTools
{
///
/// 资源同步工具。
///
internal sealed class ResourceSyncTools : EditorWindow
{
private const float ButtonHeight = 60f;
private const float ButtonSpace = 5f;
private ResourceSyncToolsController m_Controller = null;
[MenuItem("Game Framework/Resource Tools/Resource Sync Tools", false, 44)]
private static void Open()
{
ResourceSyncTools window = GetWindow("Resource Sync Tools", true);
#if UNITY_2019_3_OR_NEWER
window.minSize = new Vector2(400, 195f);
#else
window.minSize = new Vector2(400, 205f);
#endif
}
private void OnEnable()
{
m_Controller = new ResourceSyncToolsController();
m_Controller.OnLoadingResource += OnLoadingResource;
m_Controller.OnLoadingAsset += OnLoadingAsset;
m_Controller.OnCompleted += OnCompleted;
m_Controller.OnResourceDataChanged += OnResourceDataChanged;
}
private void OnGUI()
{
EditorGUILayout.BeginVertical(GUILayout.Width(position.width), GUILayout.Height(position.height));
{
GUILayout.Space(ButtonSpace);
if (GUILayout.Button("Remove All Asset Bundle Names in Project", GUILayout.Height(ButtonHeight)))
{
if (!m_Controller.RemoveAllAssetBundleNames())
{
Debug.LogWarning("Remove All Asset Bundle Names in Project failure.");
}
else
{
Debug.Log("Remove All Asset Bundle Names in Project completed.");
}
AssetDatabase.Refresh();
}
GUILayout.Space(ButtonSpace);
if (GUILayout.Button("Sync ResourceCollection.xml to Project", GUILayout.Height(ButtonHeight)))
{
if (!m_Controller.SyncToProject())
{
Debug.LogWarning("Sync ResourceCollection.xml to Project failure.");
}
else
{
Debug.Log("Sync ResourceCollection.xml to Project completed.");
}
AssetDatabase.Refresh();
}
GUILayout.Space(ButtonSpace);
if (GUILayout.Button("Sync ResourceCollection.xml from Project", GUILayout.Height(ButtonHeight)))
{
if (!m_Controller.SyncFromProject())
{
Debug.LogWarning("Sync Project to ResourceCollection.xml failure.");
}
else
{
Debug.Log("Sync Project to ResourceCollection.xml completed.");
}
AssetDatabase.Refresh();
}
}
EditorGUILayout.EndVertical();
}
private void OnLoadingResource(int index, int count)
{
EditorUtility.DisplayProgressBar("Loading Resources", Utility.Text.Format("Loading resources, {0}/{1} loaded.", index.ToString(), count.ToString()), (float)index / count);
}
private void OnLoadingAsset(int index, int count)
{
EditorUtility.DisplayProgressBar("Loading Assets", Utility.Text.Format("Loading assets, {0}/{1} loaded.", index.ToString(), count.ToString()), (float)index / count);
}
private void OnCompleted()
{
EditorUtility.ClearProgressBar();
}
private void OnResourceDataChanged(int index, int count, string assetName)
{
EditorUtility.DisplayProgressBar("Processing Assets", Utility.Text.Format("({0}/{1}) {2}", index.ToString(), count.ToString(), assetName), (float)index / count);
}
}
}