// 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); } } }