Pārlūkot izejas kodu

Merge branch '4.0' into 4.1-beta

badlogic 3 gadi atpakaļ
vecāks
revīzija
83df6b7316

+ 3 - 3
spine-ts/README.md

@@ -56,8 +56,8 @@ You can include a module in your project via a `<script>` tag from the [unpkg](h
 <script src="https://unpkg.com/@esotericsoftware/[email protected].*/dist/iife/spine-player.js">
 <script src="https://unpkg.com/@esotericsoftware/[email protected].*/dist/iife/spine-player.js">
 <link rel="stylesheet" href="https://unpkg.com/@esotericsoftware/[email protected].*/dist/spine-player.css">
 <link rel="stylesheet" href="https://unpkg.com/@esotericsoftware/[email protected].*/dist/spine-player.css">
 
 
-// spine-ts WebGL
-<script src="https://unpkg.com/@esotericsoftware/[email protected].*/dist/iife/spine-webgl.js">
+// spine-ts ThreeJS
+<script src="https://unpkg.com/@esotericsoftware/[email protected].*/dist/iife/spine-threejs.js">
 ```
 ```
 
 
 We also provide `js.map` source maps. They will be automatically fetched from unpkg when debugging code of a spine-module in Chrome, Firefox, or Safari, mapping the JavaScript code back to its original TypeScript sources.
 We also provide `js.map` source maps. They will be automatically fetched from unpkg when debugging code of a spine-module in Chrome, Firefox, or Safari, mapping the JavaScript code back to its original TypeScript sources.
@@ -113,4 +113,4 @@ The final command `npm run dev` will start a local web server at http://127.0.0.
 
 
 You can then open Visual Studio Code to inspect, edit, and debug the source code. We also supply launch configurations to start examples and demos in debug mode, so you can debug them right inside Visual Studio code.
 You can then open Visual Studio Code to inspect, edit, and debug the source code. We also supply launch configurations to start examples and demos in debug mode, so you can debug them right inside Visual Studio code.
 
 
-To build the artifacts as they are published to NPM, run `npm run build`.
+To build the artifacts as they are published to NPM, run `npm run build`.

+ 6 - 1
spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SSpineWidget.cpp

@@ -65,7 +65,12 @@ void SSpineWidget::SetData(USpineWidget *Widget) {
 		skeleton->setToSetupPose();
 		skeleton->setToSetupPose();
 		skeleton->updateWorldTransform();
 		skeleton->updateWorldTransform();
 		Vector<float> scratchBuffer;
 		Vector<float> scratchBuffer;
-		skeleton->getBounds(this->boundsMin.X, this->boundsMin.Y, this->boundsSize.X, this->boundsSize.Y, scratchBuffer);
+		float x, y, w, h;
+		skeleton->getBounds(x, y, w, h, scratchBuffer);
+		boundsMin.X = x;
+		boundsMin.Y = y;
+		boundsSize.X = w;
+		boundsSize.Y = h;
 	}
 	}
 }
 }
 
 

+ 1 - 1
spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SkeletonDataAssetInspector.cs

@@ -154,7 +154,7 @@ namespace Spine.Unity.Editor {
 
 
 		void Clear () {
 		void Clear () {
 			preview.Clear();
 			preview.Clear();
-			targetSkeletonDataAsset.Clear();
+			SpineEditorUtilities.ClearSkeletonDataAsset(targetSkeletonDataAsset);
 			targetSkeletonData = null;
 			targetSkeletonData = null;
 		}
 		}
 
 

+ 2 - 2
spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetUtility.cs

@@ -493,7 +493,7 @@ namespace Spine.Unity.Editor {
 						}
 						}
 
 
 						Debug.LogFormat("Changes to '{0}' or atlas detected. Clearing SkeletonDataAsset: {1}", skeletonJSONPath, localPath);
 						Debug.LogFormat("Changes to '{0}' or atlas detected. Clearing SkeletonDataAsset: {1}", skeletonJSONPath, localPath);
-						skeletonDataAsset.Clear();
+						SpineEditorUtilities.ClearSkeletonDataAsset(skeletonDataAsset);
 
 
 						string guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(skeletonDataAsset));
 						string guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(skeletonDataAsset));
 						string lastHash = EditorPrefs.GetString(guid + "_hash");
 						string lastHash = EditorPrefs.GetString(guid + "_hash");
@@ -978,7 +978,7 @@ namespace Spine.Unity.Editor {
 					AssetDatabase.CreateAsset(skeletonDataAsset, filePath);
 					AssetDatabase.CreateAsset(skeletonDataAsset, filePath);
 				} else {
 				} else {
 					skeletonDataAsset.atlasAssets = atlasAssets;
 					skeletonDataAsset.atlasAssets = atlasAssets;
-					skeletonDataAsset.Clear();
+					SpineEditorUtilities.ClearSkeletonDataAsset(skeletonDataAsset);
 				}
 				}
 				var skeletonData = skeletonDataAsset.GetSkeletonData(true);
 				var skeletonData = skeletonDataAsset.GetSkeletonData(true);
 				if (skeletonData != null)
 				if (skeletonData != null)

+ 2 - 2
spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/BlendModeMaterialsUtility.cs

@@ -96,7 +96,7 @@ namespace Spine.Unity.Editor {
 				}
 				}
 			}
 			}
 
 
-			skeletonDataAsset.Clear();
+			SpineEditorUtilities.ClearSkeletonDataAsset(skeletonDataAsset);
 			skeletonData = skeletonDataAsset.GetSkeletonData(true);
 			skeletonData = skeletonDataAsset.GetSkeletonData(true);
 			if (anyMaterialsChanged)
 			if (anyMaterialsChanged)
 				ReloadSceneSkeletons(skeletonDataAsset);
 				ReloadSceneSkeletons(skeletonDataAsset);
@@ -164,7 +164,7 @@ namespace Spine.Unity.Editor {
 
 
 			var skinEntries = new List<Skin.SkinEntry>();
 			var skinEntries = new List<Skin.SkinEntry>();
 
 
-			skeletonDataAsset.Clear();
+			SpineEditorUtilities.ClearSkeletonDataAsset(skeletonDataAsset);
 			skeletonDataAsset.isUpgradingBlendModeMaterials = true;
 			skeletonDataAsset.isUpgradingBlendModeMaterials = true;
 			SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(true);
 			SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(true);
 
 

+ 12 - 3
spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/DataReloadHandler.cs

@@ -91,8 +91,7 @@ namespace Spine.Unity.Editor {
 				}
 				}
 
 
 				foreach (var skeletonDataAsset in skeletonDataAssetsToReload) {
 				foreach (var skeletonDataAsset in skeletonDataAssetsToReload) {
-					skeletonDataAsset.Clear();
-					skeletonDataAsset.GetSkeletonData(true);
+					ReloadSkeletonDataAsset(skeletonDataAsset, false);
 				}
 				}
 
 
 				foreach (var skeletonRenderer in activeSkeletonRenderers)
 				foreach (var skeletonRenderer in activeSkeletonRenderers)
@@ -119,14 +118,24 @@ namespace Spine.Unity.Editor {
 				}
 				}
 			}
 			}
 
 
+			public static void ClearAnimationReferenceAssets (SkeletonDataAsset skeletonDataAsset) {
+				ForEachAnimationReferenceAsset(skeletonDataAsset, (referenceAsset) => referenceAsset.Clear());
+			}
+
 			public static void ReloadAnimationReferenceAssets (SkeletonDataAsset skeletonDataAsset) {
 			public static void ReloadAnimationReferenceAssets (SkeletonDataAsset skeletonDataAsset) {
+				ForEachAnimationReferenceAsset(skeletonDataAsset, (referenceAsset) => referenceAsset.Initialize());
+			}
+
+			private static void ForEachAnimationReferenceAsset (SkeletonDataAsset skeletonDataAsset,
+				System.Action<AnimationReferenceAsset> func) {
+
 				string[] guids = UnityEditor.AssetDatabase.FindAssets("t:AnimationReferenceAsset");
 				string[] guids = UnityEditor.AssetDatabase.FindAssets("t:AnimationReferenceAsset");
 				foreach (string guid in guids) {
 				foreach (string guid in guids) {
 					string path = UnityEditor.AssetDatabase.GUIDToAssetPath(guid);
 					string path = UnityEditor.AssetDatabase.GUIDToAssetPath(guid);
 					if (!string.IsNullOrEmpty(path)) {
 					if (!string.IsNullOrEmpty(path)) {
 						var referenceAsset = UnityEditor.AssetDatabase.LoadAssetAtPath<AnimationReferenceAsset>(path);
 						var referenceAsset = UnityEditor.AssetDatabase.LoadAssetAtPath<AnimationReferenceAsset>(path);
 						if (referenceAsset.SkeletonDataAsset == skeletonDataAsset)
 						if (referenceAsset.SkeletonDataAsset == skeletonDataAsset)
-							referenceAsset.Initialize();
+							func(referenceAsset);
 					}
 					}
 				}
 				}
 			}
 			}

+ 12 - 3
spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineEditorUtilities.cs

@@ -266,14 +266,23 @@ namespace Spine.Unity.Editor {
 			ReinitializeComponent(component);
 			ReinitializeComponent(component);
 		}
 		}
 
 
-		public static void ReloadSkeletonDataAsset (SkeletonDataAsset skeletonDataAsset) {
-			if (skeletonDataAsset != null) {
+		public static void ClearSkeletonDataAsset (SkeletonDataAsset skeletonDataAsset) {
+			skeletonDataAsset.Clear();
+			DataReloadHandler.ClearAnimationReferenceAssets(skeletonDataAsset);
+		}
+
+		public static void ReloadSkeletonDataAsset (SkeletonDataAsset skeletonDataAsset, bool clearAtlasAssets = true) {
+			if (skeletonDataAsset == null)
+				return;
+
+			if (clearAtlasAssets) {
 				foreach (AtlasAssetBase aa in skeletonDataAsset.atlasAssets) {
 				foreach (AtlasAssetBase aa in skeletonDataAsset.atlasAssets) {
 					if (aa != null) aa.Clear();
 					if (aa != null) aa.Clear();
 				}
 				}
-				skeletonDataAsset.Clear();
 			}
 			}
+			ClearSkeletonDataAsset(skeletonDataAsset);
 			skeletonDataAsset.GetSkeletonData(true);
 			skeletonDataAsset.GetSkeletonData(true);
+			DataReloadHandler.ReloadAnimationReferenceAssets(skeletonDataAsset);
 		}
 		}
 
 
 		public static void ReinitializeComponent (SkeletonRenderer component) {
 		public static void ReinitializeComponent (SkeletonRenderer component) {

+ 6 - 1
spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/AnimationReferenceAsset.cs

@@ -48,11 +48,16 @@ namespace Spine.Unity {
 				if (animation == null)
 				if (animation == null)
 					Initialize();
 					Initialize();
 #endif
 #endif
-
 				return animation;
 				return animation;
 			}
 			}
 		}
 		}
 
 
+		/// <summary>Clears the cached animation corresponding to a loaded SkeletonData object.
+		/// Use this to force a reload for the next time Animation is called.</summary>
+		public void Clear () {
+			animation = null;
+		}
+
 		public void Initialize () {
 		public void Initialize () {
 			if (skeletonDataAsset == null) return;
 			if (skeletonDataAsset == null) return;
 			SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(AnimationReferenceAsset.QuietSkeletonData);
 			SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(AnimationReferenceAsset.QuietSkeletonData);