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

282 lines
9.5 KiB
C#

using UnityEditor;
using UnityEngine;
namespace HutongGames.PlayMakerEditor
{
/// <summary>
/// Manages optional add-ons for Playmaker
/// Used by PlayMakerWelcomeWindow
/// </summary>
public class PlayMakerAddonManager
{
private const string urlAssetStoreRoot = "https://www.assetstore.unity3d.com/#!/content/";
private const string urlPhotonAddon = "https://hutonggames.fogbugz.com/default.asp?W928";
private const string urlAddonsWiki = "https://hutonggames.fogbugz.com/default.asp?W714";
private const string urlEcosystemWiki = "https://hutonggames.fogbugz.com/default.asp?W1181";
private const string urlLegacyNetworkDocs = "https://hutonggames.fogbugz.com/default.asp?W852";
private const string urlLegacyGUIDocs = "https://docs.unity3d.com/Manual/GUIReference.html";
private const string urlITweenDocs = "https://hutonggames.fogbugz.com/default.asp?W544";
private static bool setupPhoton;
private static Texture photonIcon;
public static void ResetView()
{
EditorPrefs.SetFloat("PlayMaker.AddonManagerScroll",0);
addonsScroll.y = 0;
}
public static void Init()
{
// Is PlayMakerPhotonWizard available?
setupPhoton = PlayMakerEditorStartup.GetType("PlayMakerPhotonWizard") != null;
photonIcon = (Texture) Resources.Load("photonIcon");
addonsScroll.y = EditorPrefs.GetFloat("PlayMaker.AddonManagerScroll",0);
}
private static Vector2 addonsScroll;
public static void OnGUI()
{
addonsScroll = EditorGUILayout.BeginScrollView(addonsScroll);
const float margin = 60;
GUILayout.BeginHorizontal();
GUILayout.Space(margin);
GUILayout.BeginVertical();
DoOfficialAddons();
DoThirdPartyAddons();
DoLegacyAddons();
GUILayout.EndVertical();
GUILayout.Space(margin);
GUILayout.EndHorizontal();
EditorGUILayout.EndScrollView();
}
private static void DoSectionTitle(string title)
{
GUILayout.Label(title, EditorStyles.boldLabel);
}
private static void DoTopSpacer()
{
GUILayout.Space(10);
}
private static void DoBottomSpacer()
{
GUILayout.Space(20);
}
private static void DoOfficialAddons()
{
DoSectionTitle("Official Add-ons");
//EditorGUILayout.HelpBox("These Add-ons and more are available on the PlayMaker Wiki." +
// "\nThey are developed and supported by Hutong Games.", MessageType.Info);
DoTopSpacer();
AddonDownload("Ecosystem Browser",
"An integrated online browser for custom actions, samples and add-ons.",
urlEcosystemWiki);
AddonDownload("Add-ons Wiki",
"Official add-ons available online.",
urlAddonsWiki);
DoBottomSpacer();
}
private static void DoThirdPartyAddons()
{
DoSectionTitle("Third Party Assets");
EditorGUILayout.HelpBox("The best assets with PlayMaker support!" +
"\nPlease direct any questions to the developer of the asset.", MessageType.Info);
DoTopSpacer();
const string photonTitle = "Photon Cloud";
const string photonTooltip = "Build scalable MMOGs, FPS or any other multiplayer game " +
"and application for PC, Mac, Browser, Mobile or Console.";
if (setupPhoton)
{
PhotonSetupWizard(photonTitle, photonTooltip);
}
else
{
AddonDownload(photonTitle, photonTooltip, urlPhotonAddon, photonIcon);
}
AddonAsset("Easy Save",
"The Fast and Simple way to Save and Load Data.",
"768");
AddonAsset("Pro Camera 2D",
"Quickly set-up a camera for any kind of 2D game.",
"42095");
DoBottomSpacer();
}
private static void DoLegacyAddons()
{
DoSectionTitle("Legacy Systems");
EditorGUILayout.HelpBox("NOTE: Legacy systems might be removed by Unity in future releases!",
MessageType.Warning);
DoTopSpacer();
// Legacy Networking
GUILayout.BeginHorizontal();
label.text = "Legacy Networking";
label.tooltip = "Unity's Legacy Networking system.\nClick for more info online.";
if (GUILayout.Button(label, EditorStyles.label))
{
Application.OpenURL(urlLegacyNetworkDocs);
}
GUILayout.FlexibleSpace();
#if PLAYMAKER_LEGACY_NETWORK
label.text = "Disable";
label.tooltip = "Remove PLAYMAKER_LEGACY_NETWORK symbol."+
"\nYou can then delete:"+
"\nPlayMaker\\Actions\\Network";
if (GUILayout.Button(label, GUILayout.Width(100)))
{
PlayMakerDefines.RemoveScriptingDefineSymbolFromAllTargets("PLAYMAKER_LEGACY_NETWORK");
EditorStartupPrefs.UseLegacyNetworking = false;
EditorUtility.DisplayDialog("PlayMaker Add-ons",
"PLAYMAKER_LEGACY_NETWORK symbol removed." +
"\n\nYou can now delete:" +
"\nPlayMaker\\Actions\\Network",
"OK");
}
#else
label.text = "Enable";
label.tooltip = "Define PLAYMAKER_LEGACY_NETWORK symbol." +
"\nImport actions for Unity's Legacy Networking:" +
"\nPlayMaker\\Actions\\Network";
if (GUILayout.Button(label, GUILayout.Width(100)))
{
DefinesHelper.AddSymbolToAllTargets("PLAYMAKER_LEGACY_NETWORK");
EditorUtility.DisplayDialog("PlayMaker Add-ons",
"PLAYMAKER_LEGACY_NETWORK added to scripting define symbols.",
"OK");
ImportAddon(AssetGUIDs.LegacyNetworkingPackage);
EditorStartupPrefs.UseLegacyNetworking = true;
}
#endif
GUILayout.EndHorizontal();
// Legacy GUI
GUILayout.BeginHorizontal();
label.text = "Legacy GUI";
label.tooltip = "Actions for Unity's Legacy GUI System.\nClick for more info online.";
if (GUILayout.Button(label, EditorStyles.label))
{
Application.OpenURL(urlLegacyGUIDocs);
}
GUILayout.FlexibleSpace();
label.text = "Import";
label.tooltip = "Import actions for Unity's Legacy GUI system:" +
"\nPlayMaker\\Actions\\GUIElement";
if (GUILayout.Button(label, GUILayout.Width(100)))
{
ImportAddon(AssetGUIDs.LegacyGUIPackage);
}
GUILayout.EndHorizontal();
// iTween
GUILayout.BeginHorizontal();
label.text = "iTween Support";
label.tooltip = "Support for iTween (available on the Asset Store). " +
"NOTE: We recommend using newer third party Tweening libraries." +
"\nClick for more info online.";
if (GUILayout.Button(label, EditorStyles.label))
{
Application.OpenURL(urlITweenDocs);
}
GUILayout.FlexibleSpace();
label.text = "Import";
label.tooltip = "Import actions for iTween:" +
"\nPlayMaker\\Actions\\iTween " +
"\n\nNOTE: Import iTween from Asset Store first!" ;
if (GUILayout.Button(label, GUILayout.Width(100)))
{
if (EditorUtility.DisplayDialog("Import iTween Support",
"You must import iTween from the Asset Store first. Have you already imported iTween?",
"Yes", "No"))
{
ImportAddon(AssetGUIDs.LegacyITweenPackage);
}
}
GUILayout.EndHorizontal();
DoBottomSpacer();
}
private static void AddonDownload(string name, string tooltip, string url, Texture image = null)
{
if (Button(name, tooltip, image))
{
Application.OpenURL(url);
}
}
private static void AddonAsset(string name, string tooltip, string assetId, Texture image = null)
{
if (Button(name, tooltip, image))
{
Application.OpenURL(urlAssetStoreRoot + assetId + "?aid=1101lGoU");
}
}
private static void ImportAddon(string GUID, bool interactive = true)
{
AssetDatabase.ImportPackage(AssetDatabase.GUIDToAssetPath(GUID), interactive);
}
private static void PhotonSetupWizard(string name, string tooltip, Texture image = null)
{
if (Button(name, tooltip, image))
{
PlayMakerEditorStartup.GetType("PlayMakerPhotonWizard").GetMethod("Init").Invoke(null, null);
}
}
private static bool Button(string name, string tooltip, Texture image = null)
{
InitLabel(name, tooltip); // TODO: Fix image styling
return GUILayout.Button(label, GUILayout.Height(25));
}
private static readonly GUIContent label = new GUIContent();
private static void InitLabel(string text, string tooltip, Texture image = null)
{
label.text = text;
label.tooltip = tooltip;
label.image = image;
}
public static void SaveSettings()
{
EditorPrefs.SetFloat("PlayMaker.AddonManagerScroll", addonsScroll.y);
}
}
}