Forráskód Böngészése

Merge branch '3.7-beta' into 3.7-beta-cpp

badlogic 6 éve
szülő
commit
bd3d9ee36a

+ 14 - 4
spine-cocos2dx/src/spine/SkeletonAnimation.cpp

@@ -38,7 +38,7 @@ using std::min;
 using std::max;
 using std::vector;
 
-namespace spine {
+namespace spine {
 
 typedef struct _TrackEntryListeners {
     StartListener startListener;
@@ -112,6 +112,8 @@ void SkeletonAnimation::initialize () {
 	_state = new (__FILE__, __LINE__) AnimationState(new (__FILE__, __LINE__) AnimationStateData(_skeleton->getData()));
 	_state->setRendererObject(this);
 	_state->setListener(animationCallback);
+
+	_firstDraw = true;
 }
 
 SkeletonAnimation::SkeletonAnimation ()
@@ -126,12 +128,20 @@ SkeletonAnimation::~SkeletonAnimation () {
 void SkeletonAnimation::update (float deltaTime) {
 	super::update(deltaTime);
 
-	deltaTime *= _timeScale;
-	_state->update(deltaTime);
-	_state->apply(*_skeleton);
+	deltaTime *= _timeScale;
+	_state->update(deltaTime);
+	_state->apply(*_skeleton);
 	_skeleton->updateWorldTransform();
 }
 
+void SkeletonAnimation::draw(cocos2d::Renderer *renderer, const cocos2d::Mat4 &transform, uint32_t transformFlags) {
+	if (_firstDraw) {
+		_firstDraw = false;
+		update(0);
+	}
+	super::draw(renderer, transform, transformFlags);
+}
+
 void SkeletonAnimation::setAnimationStateData (AnimationStateData* stateData) {
 	CCASSERT(stateData, "stateData cannot be null.");
 

+ 2 - 0
spine-cocos2dx/src/spine/SkeletonAnimation.h

@@ -67,6 +67,7 @@ public:
 	}
 
 	virtual void update (float deltaTime) override;
+	virtual void draw (cocos2d::Renderer* renderer, const cocos2d::Mat4& transform, uint32_t transformFlags) override;
 
 	void setAnimationStateData (AnimationStateData* stateData);
 	void setMix (const std::string& fromAnimation, const std::string& toAnimation, float duration);
@@ -109,6 +110,7 @@ protected:
 	AnimationState* _state;
 
 	bool _ownsAnimationStateData;
+	bool _firstDraw;
 
 	StartListener _startListener;
     InterruptListener _interruptListener;

+ 3 - 3
spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java

@@ -997,7 +997,7 @@ public class AnimationState {
 
 		/** When the mix percentage ({@link #getMixTime()} / {@link #getMixDuration()}) is less than the
 		 * <code>eventThreshold</code>, event timelines are applied while this animation is being mixed out. Defaults to 0, so event
-		 * timelines are not applied for an animation being mixed out. */
+		 * timelines are not applied while this animation is being mixed out. */
 		public float getEventThreshold () {
 			return eventThreshold;
 		}
@@ -1008,7 +1008,7 @@ public class AnimationState {
 
 		/** When the mix percentage ({@link #getMixTime()} / {@link #getMixDuration()}) is less than the
 		 * <code>attachmentThreshold</code>, attachment timelines are applied while this animation is being mixed out. Defaults to
-		 * 0, so attachment timelines are not applied for an animation being mixed out. */
+		 * 0, so attachment timelines are not applied while this animation is being mixed out. */
 		public float getAttachmentThreshold () {
 			return attachmentThreshold;
 		}
@@ -1019,7 +1019,7 @@ public class AnimationState {
 
 		/** When the mix percentage ({@link #getMixTime()} / {@link #getMixDuration()}) is less than the
 		 * <code>drawOrderThreshold</code>, draw order timelines are applied while this animation is being mixed out. Defaults to 0,
-		 * so draw order timelines are not applied for an animation being mixed out. */
+		 * so draw order timelines are not applied while this animation is being mixed out. */
 		public float getDrawOrderThreshold () {
 			return drawOrderThreshold;
 		}

+ 7 - 0
spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonBakingWindow.cs

@@ -3,6 +3,11 @@ using System.Collections.Generic;
 using UnityEngine;
 using UnityEditor;
 
+#if UNITY_2018_3 || UNITY_2019
+#define NEW_PREFAB_SYSTEM
+#endif
+
+
 namespace Spine.Unity.Editor {
 
 	using Editor = UnityEditor.Editor;
@@ -11,6 +16,7 @@ namespace Spine.Unity.Editor {
 	public class SkeletonBakingWindow : EditorWindow {
 		const bool IsUtilityWindow = true;
 
+		#if !NEW_PREFAB_SYSTEM
 		[MenuItem("CONTEXT/SkeletonDataAsset/Skeleton Baking", false, 5000)]
 		public static void Init (MenuCommand command) {
 			var window = EditorWindow.GetWindow<SkeletonBakingWindow>(IsUtilityWindow);
@@ -20,6 +26,7 @@ namespace Spine.Unity.Editor {
 			window.skeletonDataAsset = command.context as SkeletonDataAsset;
 			window.Show();
 		}
+		#endif
 
 		public SkeletonDataAsset skeletonDataAsset;
 		[SpineSkin(dataField:"skeletonDataAsset")]

+ 1 - 1
spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDebugWindow.cs

@@ -477,7 +477,7 @@ namespace Spine.Unity.Editor {
 								}
 							} else {
 								foreach (var slot in skeleton.DrawOrder) {
-									var slotNames = SkeletonRendererInspector.GetSeparatorSlotMember(skeletonRenderer);
+									var slotNames = SkeletonRendererInspector.GetSeparatorSlotNames(skeletonRenderer);
 									for (int i = 0, n = slotNames.Length; i < n; i++) {
 										if (string.Equals(slotNames[i], slot.Data.Name, System.StringComparison.Ordinal)) {
 											EditorGUILayout.LabelField(SeparatorString);

+ 6 - 1
spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonRendererInspector.cs

@@ -341,7 +341,12 @@ namespace Spine.Unity.Editor {
 			}
 		}
 
-		public static string[] GetSeparatorSlotMember (SkeletonRenderer skeletonRenderer) {
+		public static void SetSeparatorSlotNames (SkeletonRenderer skeletonRenderer, string[] newSlotNames) {
+			var field = SpineInspectorUtility.GetNonPublicField(typeof(SkeletonRenderer), SeparatorSlotNamesFieldName);
+			field.SetValue(skeletonRenderer, newSlotNames);
+		}
+
+		public static string[] GetSeparatorSlotNames (SkeletonRenderer skeletonRenderer) {
 			var field = SpineInspectorUtility.GetNonPublicField(typeof(SkeletonRenderer), SeparatorSlotNamesFieldName);
 			return field.GetValue(skeletonRenderer) as string[];
 		}

+ 41 - 0
spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs

@@ -367,6 +367,47 @@ namespace Spine.Unity {
 			currentSmartMesh.instructionUsed.Set(currentInstructions);
 		}
 
+		public void FindAndApplySeparatorSlots (string startsWith, bool clearExistingSeparators = true, bool updateStringArray = false) {
+			if (string.IsNullOrEmpty(startsWith)) return;
+
+			FindAndApplySeparatorSlots(
+				(slotName) => slotName.StartsWith(startsWith),
+				clearExistingSeparators,
+				updateStringArray
+				);
+		}
+
+		public void FindAndApplySeparatorSlots (System.Func<string, bool> slotNamePredicate, bool clearExistingSeparators = true, bool updateStringArray = false) {
+			if (slotNamePredicate == null) return;
+			if (!valid) return;
+
+			if (clearExistingSeparators)
+				separatorSlots.Clear();
+
+			var slots = skeleton.slots;
+			foreach (var slot in slots) {
+				if (slotNamePredicate.Invoke(slot.data.name))
+					separatorSlots.Add(slot);
+			}
+
+			if (updateStringArray) {
+				var detectedSeparatorNames = new List<string>();
+				foreach (var slot in skeleton.slots) {
+					string slotName = slot.data.name;
+					if (slotNamePredicate.Invoke(slotName))
+						detectedSeparatorNames.Add(slotName);
+				}
+				if (!clearExistingSeparators) {
+					string[] originalNames = this.separatorSlotNames;
+					foreach (string originalName in originalNames)
+						detectedSeparatorNames.Add(originalName);
+				}
+
+				this.separatorSlotNames = detectedSeparatorNames.ToArray();
+			}
+
+		}
+
 		public void ReapplySeparatorSlotNames () {
 			if (!valid)
 				return;

+ 2 - 1
spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonRenderSeparator/SkeletonPartsRenderer.cs

@@ -128,10 +128,11 @@ namespace Spine.Unity.Modules {
 			meshRenderer.SetPropertyBlock(block);
 		}
 
-		public static SkeletonPartsRenderer NewPartsRendererGameObject (Transform parent, string name) {
+		public static SkeletonPartsRenderer NewPartsRendererGameObject (Transform parent, string name, int sortingOrder = 0) {
 			var go = new GameObject(name, typeof(MeshFilter), typeof(MeshRenderer));
 			go.transform.SetParent(parent, false);
 			var returnComponent = go.AddComponent<SkeletonPartsRenderer>();
+			returnComponent.MeshRenderer.sortingOrder = sortingOrder;
 
 			return returnComponent;
 		}

+ 10 - 3
spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.cs

@@ -106,6 +106,8 @@ namespace Spine.Unity.Modules {
 				componentRenderers.Add(spr);
 			}
 
+			srs.OnEnable();
+
 			#if UNITY_EDITOR
 			// Make sure editor updates properly in edit mode.
 			if (!Application.isPlaying) {
@@ -119,7 +121,7 @@ namespace Spine.Unity.Modules {
 		}
 
 		/// <summary>Add a child SkeletonPartsRenderer GameObject to this SkeletonRenderSeparator.</summary>
-		public void AddPartsRenderer (int sortingOrderIncrement = DefaultSortingOrderIncrement) {
+		public SkeletonPartsRenderer AddPartsRenderer (int sortingOrderIncrement = DefaultSortingOrderIncrement, string name = null) {
 			int sortingLayerID = 0;
 			int sortingOrder = 0;
 			if (partsRenderers.Count > 0) {
@@ -128,13 +130,18 @@ namespace Spine.Unity.Modules {
 				sortingLayerID = previousMeshRenderer.sortingLayerID;
 				sortingOrder = previousMeshRenderer.sortingOrder + sortingOrderIncrement;
 			}
-				
-			var spr = SkeletonPartsRenderer.NewPartsRendererGameObject(skeletonRenderer.transform, partsRenderers.Count.ToString());
+
+			if (string.IsNullOrEmpty(name))
+				name = partsRenderers.Count.ToString();
+
+			var spr = SkeletonPartsRenderer.NewPartsRendererGameObject(skeletonRenderer.transform, name);
 			partsRenderers.Add(spr);
 
 			var mr = spr.MeshRenderer;
 			mr.sortingLayerID = sortingLayerID;
 			mr.sortingOrder = sortingOrder;
+
+			return spr;
 		}
 		#endregion