/******************************************************************************
|
* Spine Runtimes License Agreement
|
* Last updated July 28, 2023. Replaces all prior versions.
|
*
|
* Copyright (c) 2013-2023, Esoteric Software LLC
|
*
|
* Integration of the Spine Runtimes into software or otherwise creating
|
* derivative works of the Spine Runtimes is permitted under the terms and
|
* conditions of Section 2 of the Spine Editor License Agreement:
|
* http://esotericsoftware.com/spine-editor-license
|
*
|
* Otherwise, it is permitted to integrate the Spine Runtimes into software or
|
* otherwise create derivative works of the Spine Runtimes (collectively,
|
* "Products"), provided that each user of the Products must obtain their own
|
* Spine Editor license and redistribution of the Products in any form must
|
* include this license and copyright notice.
|
*
|
* THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
|
* BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE
|
* SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
*****************************************************************************/
|
|
#pragma warning disable 0219
|
|
#define SPINE_SKELETONMECANIM
|
|
#if UNITY_2017_2_OR_NEWER
|
#define NEWPLAYMODECALLBACKS
|
#endif
|
|
#if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER
|
#define NEW_PREFAB_SYSTEM
|
#endif
|
|
#if UNITY_2018 || UNITY_2019 || UNITY_2018_3_OR_NEWER
|
#define NEWHIERARCHYWINDOWCALLBACKS
|
#endif
|
|
using System.Collections.Generic;
|
using System.Globalization;
|
using System.IO;
|
using System.Linq;
|
using System.Reflection;
|
using System.Text;
|
using UnityEditor;
|
using UnityEngine;
|
|
namespace Spine.Unity.Editor {
|
public partial class SpineEditorUtilities {
|
public static class SpineTK2DEditorUtility {
|
const string SPINE_TK2D_DEFINE = "SPINE_TK2D";
|
|
internal static bool IsTK2DInstalled () {
|
return (Shader.Find("tk2d/SolidVertexColor") != null ||
|
Shader.Find("tk2d/AdditiveVertexColor") != null);
|
}
|
|
internal static bool IsTK2DAllowed {
|
get {
|
return false; // replace with "return true;" to allow TK2D support
|
}
|
}
|
|
internal static void EnableTK2D () {
|
if (!IsTK2DAllowed)
|
return;
|
SpineBuildEnvUtility.DisableSpineAsmdefFiles();
|
SpineBuildEnvUtility.EnableBuildDefine(SPINE_TK2D_DEFINE);
|
}
|
|
internal static void DisableTK2D () {
|
SpineBuildEnvUtility.EnableSpineAsmdefFiles();
|
SpineBuildEnvUtility.DisableBuildDefine(SPINE_TK2D_DEFINE);
|
}
|
}
|
}
|
|
public static class SpineBuildEnvUtility {
|
static bool IsInvalidGroup (BuildTargetGroup group) {
|
int gi = (int)group;
|
return
|
gi == 15 || gi == 16
|
||
|
group == BuildTargetGroup.Unknown;
|
}
|
|
public static bool EnableBuildDefine (string define) {
|
|
bool wasDefineAdded = false;
|
Debug.LogWarning("Please ignore errors \"PlayerSettings Validation: Requested build target group doesn't exist\" below");
|
foreach (BuildTargetGroup group in System.Enum.GetValues(typeof(BuildTargetGroup))) {
|
if (IsInvalidGroup(group))
|
continue;
|
|
string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(group);
|
if (!defines.Contains(define)) {
|
wasDefineAdded = true;
|
if (defines.EndsWith(";", System.StringComparison.Ordinal))
|
defines += define;
|
else
|
defines += ";" + define;
|
|
PlayerSettings.SetScriptingDefineSymbolsForGroup(group, defines);
|
}
|
}
|
Debug.LogWarning("Please ignore errors \"PlayerSettings Validation: Requested build target group doesn't exist\" above");
|
|
if (wasDefineAdded) {
|
Debug.LogWarning("Setting Scripting Define Symbol " + define);
|
} else {
|
Debug.LogWarning("Already Set Scripting Define Symbol " + define);
|
}
|
return wasDefineAdded;
|
}
|
|
public static bool DisableBuildDefine (string define) {
|
|
bool wasDefineRemoved = false;
|
foreach (BuildTargetGroup group in System.Enum.GetValues(typeof(BuildTargetGroup))) {
|
if (IsInvalidGroup(group))
|
continue;
|
|
string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(group);
|
if (defines.Contains(define)) {
|
wasDefineRemoved = true;
|
if (defines.Contains(define + ";"))
|
defines = defines.Replace(define + ";", "");
|
else
|
defines = defines.Replace(define, "");
|
|
PlayerSettings.SetScriptingDefineSymbolsForGroup(group, defines);
|
}
|
}
|
|
if (wasDefineRemoved) {
|
Debug.LogWarning("Removing Scripting Define Symbol " + define);
|
} else {
|
Debug.LogWarning("Already Removed Scripting Define Symbol " + define);
|
}
|
return wasDefineRemoved;
|
}
|
|
public static void DisableSpineAsmdefFiles () {
|
SetAsmdefFileActive("spine-unity-editor", false);
|
SetAsmdefFileActive("spine-unity", false);
|
}
|
|
public static void EnableSpineAsmdefFiles () {
|
SetAsmdefFileActive("spine-unity-editor", true);
|
SetAsmdefFileActive("spine-unity", true);
|
}
|
|
internal static void SetAsmdefFileActive (string filename, bool setActive) {
|
|
string typeSearchString = setActive ? " t:TextAsset" : " t:AssemblyDefinitionAsset";
|
string extensionBeforeChange = setActive ? ".txt" : ".asmdef";
|
string[] guids = AssetDatabase.FindAssets(filename + typeSearchString);
|
foreach (string guid in guids) {
|
string currentPath = AssetDatabase.GUIDToAssetPath(guid);
|
if (System.IO.Path.GetExtension(currentPath) != extensionBeforeChange) // asmdef is also found as t:TextAsset, so check
|
continue;
|
|
string targetPath = System.IO.Path.ChangeExtension(currentPath, setActive ? "asmdef" : "txt");
|
if (System.IO.File.Exists(currentPath) && !System.IO.File.Exists(targetPath)) {
|
System.IO.File.Copy(currentPath, targetPath);
|
System.IO.File.Copy(currentPath + ".meta", targetPath + ".meta");
|
}
|
AssetDatabase.DeleteAsset(currentPath);
|
}
|
}
|
}
|
}
|