|
|
@@ -330,6 +330,8 @@ bool AnimationSet2D::LoadSpriterAnimation(const XMLElement& animationElem)
|
|
|
if (animationElem.HasAttribute("looping"))
|
|
|
looped = animationElem.GetBool("looping");
|
|
|
|
|
|
+ float highestKeyTime = 0.0f;
|
|
|
+
|
|
|
// Load timelines
|
|
|
Vector<SpriterTimeline2D> timelines;
|
|
|
for (XMLElement timelineElem = animationElem.GetChild("timeline"); timelineElem; timelineElem = timelineElem.GetNext("timeline"))
|
|
|
@@ -345,6 +347,7 @@ bool AnimationSet2D::LoadSpriterAnimation(const XMLElement& animationElem)
|
|
|
{
|
|
|
SpriterTimelineKey2D key;
|
|
|
key.time_ = keyElem.GetFloat("time") * 0.001f;
|
|
|
+ highestKeyTime = Max(highestKeyTime, key.time_);
|
|
|
if (keyElem.HasAttribute("spin"))
|
|
|
key.spin_ = keyElem.GetInt("spin");
|
|
|
|
|
|
@@ -435,6 +438,10 @@ bool AnimationSet2D::LoadSpriterAnimation(const XMLElement& animationElem)
|
|
|
|
|
|
// Create animation
|
|
|
SharedPtr<Animation2D> animation(new Animation2D(this));
|
|
|
+ // Crop animation length if longer than the last keyframe, prevents sprites vanishing in clamp mode, or occasional flashes
|
|
|
+ // when looped
|
|
|
+ if (length > highestKeyTime)
|
|
|
+ length = highestKeyTime;
|
|
|
animation->SetName(name);
|
|
|
animation->SetLength(length);
|
|
|
animation->SetLooped(looped);
|
|
|
@@ -461,7 +468,7 @@ bool AnimationSet2D::LoadSpriterAnimation(const XMLElement& animationElem)
|
|
|
|
|
|
keyFrame.time_ = timelineKey.time_;
|
|
|
|
|
|
- // Set diabled
|
|
|
+ // Set disabled
|
|
|
keyFrame.enabled_ = false;
|
|
|
keyFrame.parent_ = timeline.parent_;
|
|
|
keyFrame.transform_ = Transform2D(timelineKey.position_, timelineKey.angle_, timelineKey.scale_);
|
|
|
@@ -471,7 +478,7 @@ bool AnimationSet2D::LoadSpriterAnimation(const XMLElement& animationElem)
|
|
|
{
|
|
|
keyFrame.sprite_ = timelineKey.sprite_;
|
|
|
keyFrame.alpha_ = timelineKey.alpha_;
|
|
|
- keyFrame.useHotSpot_ = timelineKey.useHotSpot_;
|
|
|
+ keyFrame.useHotSpot_ = timelineKey.useHotSpot_;
|
|
|
if (timelineKey.useHotSpot_)
|
|
|
keyFrame.hotSpot_ = timelineKey.hotSpot_;
|
|
|
}
|