diff --git a/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.classpath b/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.classpath
index 7501244af..aa6713edf 100644
--- a/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.classpath
+++ b/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.classpath
@@ -5,5 +5,5 @@
src
lib/spine-starling.swc
lib/spine-as3.swc
- lib/starling-2.1.swc
+ lib/starling-2.4.swc
diff --git a/spine-starling/spine-starling-example/lib/spine-starling.swc b/spine-starling/spine-starling-example/lib/spine-starling.swc
index e190f77c6..f8a13aa78 100644
Binary files a/spine-starling/spine-starling-example/lib/spine-starling.swc and b/spine-starling/spine-starling-example/lib/spine-starling.swc differ
diff --git a/spine-starling/spine-starling-example/lib/starling-2.1.swc b/spine-starling/spine-starling-example/lib/starling-2.1.swc
deleted file mode 100644
index 3b7d7cfc4..000000000
Binary files a/spine-starling/spine-starling-example/lib/starling-2.1.swc and /dev/null differ
diff --git a/spine-starling/spine-starling-example/lib/starling-2.4.swc b/spine-starling/spine-starling-example/lib/starling-2.4.swc
new file mode 100644
index 000000000..92d52da0b
Binary files /dev/null and b/spine-starling/spine-starling-example/lib/starling-2.4.swc differ
diff --git a/spine-starling/spine-starling/.settings/com.powerflasher.fdt.classpath b/spine-starling/spine-starling/.settings/com.powerflasher.fdt.classpath
index 06308957f..d07363708 100644
--- a/spine-starling/spine-starling/.settings/com.powerflasher.fdt.classpath
+++ b/spine-starling/spine-starling/.settings/com.powerflasher.fdt.classpath
@@ -4,5 +4,5 @@
src
lib/spine-as3.swc
frameworks/libs/air/airglobal.swc
- lib/starling-2.1.swc
+ lib/starling-2.4.swc
diff --git a/spine-starling/spine-starling/lib/starling-2.1.swc b/spine-starling/spine-starling/lib/starling-2.1.swc
deleted file mode 100644
index 3b7d7cfc4..000000000
Binary files a/spine-starling/spine-starling/lib/starling-2.1.swc and /dev/null differ
diff --git a/spine-starling/spine-starling/lib/starling-2.4.swc b/spine-starling/spine-starling/lib/starling-2.4.swc
new file mode 100644
index 000000000..92d52da0b
Binary files /dev/null and b/spine-starling/spine-starling/lib/starling-2.4.swc differ
diff --git a/spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as b/spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as
index 8d71d041d..5e3dc21af 100644
--- a/spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as
+++ b/spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as
@@ -29,6 +29,7 @@
*****************************************************************************/
package spine.starling {
+ import starling.styles.MeshStyle;
import spine.attachments.ClippingAttachment;
import spine.SkeletonClipping;
import spine.Bone;
@@ -98,6 +99,7 @@ package spine.starling {
for (var i : int = 0, n : int = drawOrder.length; i < n; ++i) {
var worldVertices : Vector. = _tempVertices;
var slot : Slot = drawOrder[i];
+
if (slot.attachment is RegionAttachment) {
var region : RegionAttachment = slot.attachment as RegionAttachment;
verticesLength = 4 * 2;
@@ -146,7 +148,7 @@ package spine.starling {
indexData.numIndices = indicesLength;
indexData.trim();
}
- indexData = mesh.getIndexData();
+ indexData = mesh.getIndexData();
attachmentColor = meshAttachment.color;
uvs = meshAttachment.uvs;
} else if (slot.attachment is ClippingAttachment) {
@@ -169,17 +171,22 @@ package spine.starling {
if (clipper.isClipping()) {
clipper.clipTriangles(worldVertices, indices, indices.length, uvs);
+ // Need to create a new mesh here, see https://github.com/EsotericSoftware/spine-runtimes/issues/1125
+ mesh = new SkeletonMesh(mesh.texture);
+ if (_twoColorTint) mesh.setStyle(new TwoColorMeshStyle());
+ indexData = mesh.getIndexData();
+
verticesCount = clipper.clippedVertices.length >> 1;
worldVertices = clipper.clippedVertices;
uvs = clipper.clippedUvs;
indices = clipper.clippedTriangles;
indicesLength = indices.length;
+ indexData.numIndices = indicesLength;
+ indexData.trim();
for (ii = 0; ii < indicesLength; ii++) {
indexData.setIndex(ii, indices[ii]);
}
- indexData.numIndices = indicesLength;
- indexData.trim();
}
vertexData = mesh.getVertexData();
@@ -214,8 +221,10 @@ package spine.starling {
mesh.setTexCoords(ii, uvs[iii], uvs[iii + 1]);
}
}
- painter.state.blendMode = blendModes[slot.data.blendMode.ordinal];
- painter.batchMesh(mesh);
+ if (indexData.numIndices > 0 && vertexData.numVertices > 0) {
+ painter.state.blendMode = blendModes[slot.data.blendMode.ordinal];
+ painter.batchMesh(mesh);
+ }
clipper.clipEndWithSlot(slot);
}
diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDataAssetInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDataAssetInspector.cs
index ba50f5848..693aa25d6 100644
--- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDataAssetInspector.cs
+++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDataAssetInspector.cs
@@ -682,6 +682,7 @@ namespace Spine.Unity.Editor {
List currentAnimationEvents = new List();
List currentAnimationEventTimes = new List();
+ List currentAnimationEventTooltips = new List();
public bool IsValid { get { return skeletonAnimation != null && skeletonAnimation.valid; } }
@@ -1071,7 +1072,7 @@ namespace Spine.Unity.Editor {
int loopCount = (int)(t.TrackTime / t.TrackEnd);
float currentTime = t.TrackTime - (t.TrackEnd * loopCount);
float normalizedTime = currentTime / t.Animation.Duration;
- float wrappedTime = normalizedTime % 1;
+ float wrappedTime = normalizedTime % 1f;
lineRect.x = barRect.x + (lineRectWidth * wrappedTime) - 0.5f;
lineRect.width = 2;
@@ -1080,11 +1081,13 @@ namespace Spine.Unity.Editor {
GUI.DrawTexture(lineRect, EditorGUIUtility.whiteTexture);
GUI.color = Color.white;
+ currentAnimationEventTooltips = currentAnimationEventTooltips ?? new List();
+ currentAnimationEventTooltips.Clear();
for (int i = 0; i < currentAnimationEvents.Count; i++) {
- float fr = currentAnimationEventTimes[i];
+ float eventTime = currentAnimationEventTimes[i];
var userEventIcon = Icons.userEvent;
var evRect = new Rect(barRect) {
- x = Mathf.Clamp(((fr / t.Animation.Duration) * lineRectWidth) - (userEventIcon.width / 2), barRect.x, float.MaxValue),
+ x = Mathf.Max(((eventTime / t.Animation.Duration) * lineRectWidth) - (userEventIcon.width / 2), barRect.x),
y = barRect.y + userEventIcon.height,
width = userEventIcon.width,
height = userEventIcon.height
@@ -1094,16 +1097,29 @@ namespace Spine.Unity.Editor {
Event ev = Event.current;
if (ev.type == EventType.Repaint) {
if (evRect.Contains(ev.mousePosition)) {
- GUIStyle tooltipStyle = EditorStyles.helpBox;
- Rect tooltipRect = new Rect(evRect);
- tooltipRect.width = tooltipStyle.CalcSize(new GUIContent(currentAnimationEvents[i].Data.Name)).x;
+ string eventName = currentAnimationEvents[i].Data.Name;
+ Rect tooltipRect = new Rect(evRect) {
+ width = EditorStyles.helpBox.CalcSize(new GUIContent(eventName)).x
+ };
tooltipRect.y -= 4;
+ tooltipRect.y -= tooltipRect.height * currentAnimationEventTooltips.Count; // Avoid several overlapping tooltips.
tooltipRect.x += 4;
- GUI.Label(tooltipRect, currentAnimationEvents[i].Data.Name, tooltipStyle);
- GUI.tooltip = currentAnimationEvents[i].Data.Name;
+
+ // Handle tooltip overflowing to the right.
+ float rightEdgeOverflow = (tooltipRect.x + tooltipRect.width) - (barRect.x + barRect.width);
+ if (rightEdgeOverflow > 0)
+ tooltipRect.x -= rightEdgeOverflow;
+
+ currentAnimationEventTooltips.Add(new SpineEventTooltip { rect = tooltipRect, text = eventName });
}
}
}
+
+ // Draw tooltips.
+ for (int i = 0; i < currentAnimationEventTooltips.Count; i++) {
+ GUI.Label(currentAnimationEventTooltips[i].rect, currentAnimationEventTooltips[i].text, EditorStyles.helpBox);
+ GUI.tooltip = currentAnimationEventTooltips[i].text;
+ }
}
}
@@ -1130,7 +1146,11 @@ namespace Spine.Unity.Editor {
previewGameObject = null;
}
}
+
+ internal struct SpineEventTooltip {
+ public Rect rect;
+ public string text;
+ }
}
-
}