Files
beyond/Assets/ThirdParty/PlayMaker/Editor/PlayMakerBuildCallbacks.cs
2024-11-20 15:21:28 +01:00

91 lines
2.5 KiB
C#

using System.Linq;
using HutongGames.PlayMaker;
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEngine.SceneManagement;
#if UNITY_5_6_OR_NEWER
using UnityEditor.Build;
#endif
#if UNITY_2018_3_OR_NEWER
using UnityEditor.Build.Reporting;
#endif
namespace HutongGames.PlayMakerEditor
{
#if UNITY_2018_3_OR_NEWER
public class PlayMakerPreProcessBuild : IPreprocessBuildWithReport
{
public int callbackOrder { get { return 0; } }
public void OnPreprocessBuild(BuildReport report)
{
Debug.Log("PlayMakerPreProcessBuild...");
ProjectTools.PreprocessPrefabFSMs();
}
}
#elif UNITY_5_6_OR_NEWER
public class PlayMakerPreProcessBuild : IPreprocessBuild
{
public int callbackOrder { get { return 0; } }
public void OnPreprocessBuild(BuildTarget target, string path)
{
Debug.Log("PlayMakerPreProcessBuild...");
ProjectTools.PreprocessPrefabFSMs();
}
}
#endif
public class PlayMakerBuildCallbacks
{
[PostProcessSceneAttribute(2)]
public static void OnPostprocessScene()
{
/* TODO: Figure out if we need to do this!
// OnPostprocessScene is called when loading a scene in the editor
// Might not want to post process in that case...?
if (EditorApplication.isPlayingOrWillChangePlaymode)
{
return;
}*/
//Debug.Log("OnPostprocessScene: " + SceneManager.GetActiveScene().name);
if (Application.isPlaying) // playing in editor, not really making a build
{
return;
}
PlayMakerGlobals.IsBuilding = true;
PlayMakerGlobals.InitApplicationFlags();
var fsmList = Resources.FindObjectsOfTypeAll<PlayMakerFSM>();
foreach (var playMakerFSM in fsmList)
{
if (playMakerFSM == null) continue; // not sure when this happens, but need to catch it...
#if UNITY_5_6_OR_NEWER
if (FsmPrefabs.IsPrefab(playMakerFSM))
{
// already processed by PlayMakerPreProcessBuild
continue;
}
#endif
playMakerFSM.Preprocess();
}
PlayMakerGlobals.IsBuilding = false;
//Debug.Log("EndPostProcessScene");
}
}
}