// Copyright © 2018 Procedural Worlds Pty Limited. All Rights Reserved.
using UnityEditor;
using UnityEngine;
using PWCommon3;
namespace Gaia.Internal
{
[InitializeOnLoad]
public static class PWApp
{
private const string CONF_NAME = "Gaia";
private static AppConfig m_conf;
public static AppConfig CONF
{
get
{
if (m_conf != null)
{
return m_conf;
}
m_conf = AssetUtils.GetConfig(CONF_NAME);
if (m_conf != null)
{
Prod.Checkin(m_conf);
}
return m_conf;
}
}
static PWApp()
{
// Need to wait for things to import before creating the common menu - Using delegates and only check menu when something gets imported
AssetDatabase.importPackageCompleted -= OnImportPackageCompleted;
AssetDatabase.importPackageCompleted += OnImportPackageCompleted;
AssetDatabase.importPackageCancelled -= OnImportPackageCancelled;
AssetDatabase.importPackageCancelled += OnImportPackageCancelled;
AssetDatabase.importPackageFailed -= OnImportPackageFailed;
AssetDatabase.importPackageFailed += OnImportPackageFailed;
m_conf = AssetUtils.GetConfig(CONF_NAME, true);
}
///
/// Called when a package import is Completed.
///
private static void OnImportPackageCompleted(string packageName)
{
#if PW_DEBUG
Debug.LogFormat("[C.Prod]: '{0}' Import Completed", packageName);
#endif
OnPackageImport();
}
///
/// Called when a package import is Cancelled.
///
private static void OnImportPackageCancelled(string packageName)
{
Debug.LogWarningFormat("'{0}' Import was Cancelled.", packageName);
OnPackageImport();
}
///
/// Called when a package import fails.
///
private static void OnImportPackageFailed(string packageName, string error)
{
Debug.LogErrorFormat("'{0}' Import Failed with error message: '{1}'.", packageName, error);
OnPackageImport();
}
///
/// Used to run things after a package was imported.
///
private static void OnPackageImport()
{
if (m_conf == null)
{
m_conf = AssetUtils.GetConfig(CONF_NAME);
}
Prod.Checkin(m_conf);
// No need for these anymore
AssetDatabase.importPackageCompleted -= OnImportPackageCompleted;
AssetDatabase.importPackageCancelled -= OnImportPackageCancelled;
AssetDatabase.importPackageFailed -= OnImportPackageFailed;
}
///
/// Get an editor utils object that can be used for common Editor stuff - DO make sure to Dispose() the instance.
///
/// The class that uses the utils. Just pass in "this".
/// (Optional) The method to be called when the GUI needs to be updated. (Repaint will always be called.)
/// Editor Utils
public static EditorUtils GetEditorUtils(IPWEditor editorObj, System.Action customUpdateMethod = null)
{
return new EditorUtils(CONF, editorObj, null, customUpdateMethod);
}
}
}