From 996cbeaac4d147d9269bca3733a2c876c98da5e4 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Wed, 12 Aug 2020 12:49:44 +0200 Subject: [PATCH 1/2] [unity] Fixed Sprite shader render queue property being too limited. Now using normal int property instead of range slider and displaying the result render queue below. Closes #1737. --- .../Editor/Shaders/SpineSpriteShaderGUI.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs index bd1267232..29839722a 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs @@ -157,7 +157,7 @@ public class SpineSpriteShaderGUI : SpineShaderWithOutlineGUI { new GUIContent("Multiply"), new GUIContent("Multiply x2") }; - static GUIContent _rendererQueueText = new GUIContent("Renderer Queue"); + static GUIContent _rendererQueueText = new GUIContent("Render Queue Offset"); static GUIContent _cullingModeText = new GUIContent("Culling Mode"); static GUIContent[] _cullingModeOptions = { new GUIContent("Off"), new GUIContent("Front"), new GUIContent("Back") }; static GUIContent _pixelSnapText = new GUIContent("Pixel Snap"); @@ -169,7 +169,7 @@ public class SpineSpriteShaderGUI : SpineShaderWithOutlineGUI { static GUIContent _rimPowerText = new GUIContent("Rim Power"); static GUIContent _specularToggleText = new GUIContent("Specular", "Enable Specular."); static GUIContent _colorAdjustmentToggleText = new GUIContent("Color Adjustment", "Enable material color adjustment."); - static GUIContent _colorAdjustmentColorText = new GUIContent("Overlay Color & Alpha"); + static GUIContent _colorAdjustmentColorText = new GUIContent("Overlay Color"); static GUIContent _colorAdjustmentHueText = new GUIContent("Hue"); static GUIContent _colorAdjustmentSaturationText = new GUIContent("Saturation"); static GUIContent _colorAdjustmentBrightnessText = new GUIContent("Brightness"); @@ -404,13 +404,13 @@ public class SpineSpriteShaderGUI : SpineShaderWithOutlineGUI { } } - // GUILayout.Label(Styles.advancedText, EditorStyles.boldLabel); - // m_MaterialEditor.RenderQueueField(); - // m_MaterialEditor.EnableInstancingField(); + EditorGUI.BeginDisabledGroup(true); + _materialEditor.RenderQueueField(); + EditorGUI.EndDisabledGroup(); EditorGUI.BeginChangeCheck(); EditorGUI.showMixedValue = _renderQueue.hasMixedValue; - int renderQueue = EditorGUILayout.IntSlider(_rendererQueueText, (int)_renderQueue.floatValue, 0, 49); + int renderQueue = EditorGUILayout.IntField(_rendererQueueText, (int)_renderQueue.floatValue); if (EditorGUI.EndChangeCheck()) { SetInt("_RenderQueue", renderQueue); dataChanged = true; From 829035330b8ac1a95847e20910343ae1881e143e Mon Sep 17 00:00:00 2001 From: Nathan Sweet Date: Wed, 12 Aug 2020 22:17:17 +0200 Subject: [PATCH 2/2] [libgdx] Fixed incorrect mixing when interrupting a mix with a 3rd entry using hold previous. closes #1738 --- .../spine/AnimationState.java | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java index 0e3738ecd..35c2de17b 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java @@ -60,12 +60,18 @@ public class AnimationState { * 2) The next track entry applied after this one does not have a timeline to set this property.
* Result: Mix from the setup pose to the timeline pose. */ static private final int FIRST = 1; + /** 1) A previously applied timeline has set this property.
+ * 2) The next track entry to be applied does have a timeline to set this property.
+ * 3) The next track entry after that one does not have a timeline to set this property.
+ * Result: Mix from the current pose to the timeline pose, but do not mix out. This avoids "dipping" when crossfading + * animations that key the same property. A subsequent timeline will set this property using a mix. */ + static private final int HOLD_SUBSEQUENT = 2; /** 1) This is the first timeline to set this property.
* 2) The next track entry to be applied does have a timeline to set this property.
* 3) The next track entry after that one does not have a timeline to set this property.
* Result: Mix from the setup pose to the timeline pose, but do not mix out. This avoids "dipping" when crossfading animations * that key the same property. A subsequent timeline will set this property using a mix. */ - static private final int HOLD = 2; + static private final int HOLD_FIRST = 3; /** 1) This is the first timeline to set this property.
* 2) The next track entry to be applied does have a timeline to set this property.
* 3) The next track entry after that one does have a timeline to set this property.
@@ -74,9 +80,9 @@ public class AnimationState { * 2 track entries in a row have a timeline that sets the same property.
* Eg, A -> B -> C -> D where A, B, and C have a timeline setting same property, but D does not. When A is applied, to avoid * "dipping" A is not mixed out, however D (the first entry that doesn't set the property) mixing in is used to mix out A - * (which affects B and C). Without using D to mix out, A would be applied fully until mixing completes, then snap into - * place. */ - static private final int HOLD_MIX = 3; + * (which affects B and C). Without using D to mix out, A would be applied fully until mixing completes, then snap to the mixed + * out position. */ + static private final int HOLD_MIX = 4; static private final int SETUP = 1, CURRENT = 2; @@ -317,7 +323,11 @@ public class AnimationState { timelineBlend = MixBlend.setup; alpha = alphaMix; break; - case HOLD: + case HOLD_SUBSEQUENT: + timelineBlend = blend; + alpha = alphaHold; + break; + case HOLD_FIRST: timelineBlend = MixBlend.setup; alpha = alphaHold; break; @@ -767,10 +777,8 @@ public class AnimationState { IntSet propertyIDs = this.propertyIDs; if (to != null && to.holdPrevious) { - for (int i = 0; i < timelinesCount; i++) { - propertyIDs.add(((Timeline)timelines[i]).getPropertyId()); - timelineMode[i] = HOLD; - } + for (int i = 0; i < timelinesCount; i++) + timelineMode[i] = propertyIDs.add(((Timeline)timelines[i]).getPropertyId()) ? HOLD_FIRST : HOLD_SUBSEQUENT; return; } @@ -793,7 +801,7 @@ public class AnimationState { } break; } - timelineMode[i] = HOLD; + timelineMode[i] = HOLD_FIRST; } } }