diff --git a/spine-csharp/src/Animation.cs b/spine-csharp/src/Animation.cs index 88a9c5128..234c037c0 100644 --- a/spine-csharp/src/Animation.cs +++ b/spine-csharp/src/Animation.cs @@ -2198,8 +2198,7 @@ namespace Spine { break; } - switch (blend) { - case MixBlend.Setup: { + if (blend == MixBlend.Setup) { IkConstraintPose setup = constraint.data.setup; pose.mix = setup.mix + (mix - setup.mix) * alpha; pose.softness = setup.softness + (softness - setup.softness) * alpha; @@ -2209,21 +2208,10 @@ namespace Spine { pose.stretch = setup.stretch; return; } - break; - } - case MixBlend.First: - case MixBlend.Replace: { + } else { pose.mix += (mix - pose.mix) * alpha; pose.softness += (softness - pose.softness) * alpha; if (direction == MixDirection.Out) return; - break; - } - case MixBlend.Add: { - pose.mix += mix * alpha; - pose.softness += softness * alpha; - if (direction == MixDirection.Out) return; - break; - } } pose.bendDirection = (int)frames[i + BEND_DIRECTION]; pose.compress = frames[i + COMPRESS] != 0; @@ -2429,7 +2417,8 @@ namespace Spine { var constraint = (PathConstraint)skeleton.constraints.Items[constraintIndex]; if (constraint.active) { PathConstraintPose pose = appliedPose ? constraint.applied : constraint.pose; - pose.spacing = GetAbsoluteValue(time, alpha, blend, pose.spacing, constraint.data.setup.spacing); + pose.spacing = GetAbsoluteValue(time, alpha, blend == MixBlend.Add ? MixBlend.Replace : blend, pose.spacing, + constraint.data.setup.spacing); } } } @@ -2518,33 +2507,22 @@ namespace Spine { break; } - switch (blend) { - case MixBlend.Setup: { + if (blend == MixBlend.Setup) { PathConstraintPose setup = constraint.data.setup; pose.mixRotate = setup.mixRotate + (rotate - setup.mixRotate) * alpha; pose.mixX = setup.mixX + (x - setup.mixX) * alpha; pose.mixY = setup.mixY + (y - setup.mixY) * alpha; - break; - } - case MixBlend.First: - case MixBlend.Replace: { + } else { pose.mixRotate += (rotate - pose.mixRotate) * alpha; pose.mixX += (x - pose.mixX) * alpha; pose.mixY += (y - pose.mixY) * alpha; - break; - } - case MixBlend.Add: { - pose.mixRotate += rotate * alpha; - pose.mixX += x * alpha; - pose.mixY += y * alpha; - break; - } } } } /// The base class for most timelines. public abstract class PhysicsConstraintTimeline : ConstraintTimeline1 { + internal bool additive; /// -1 for all physics constraints in the skeleton. public PhysicsConstraintTimeline (int frameCount, int bezierCount, int constraintIndex, Property property) @@ -2555,6 +2533,7 @@ namespace Spine { override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList events, float alpha, MixBlend blend, MixDirection direction, bool appliedPose) { + if (blend == MixBlend.Add && !additive) blend = MixBlend.Replace; if (constraintIndex == -1) { float value = time >= frames[0] ? GetCurveValue(time) : 0; PhysicsConstraint[] constraints = skeleton.physics.Items; @@ -2661,6 +2640,7 @@ namespace Spine { public class PhysicsConstraintWindTimeline : PhysicsConstraintTimeline { public PhysicsConstraintWindTimeline (int frameCount, int bezierCount, int constraintIndex) : base(frameCount, bezierCount, constraintIndex, Property.PhysicsConstraintWind) { + additive = true; } override protected float Get (PhysicsConstraintPose pose) { @@ -2680,6 +2660,7 @@ namespace Spine { public class PhysicsConstraintGravityTimeline : PhysicsConstraintTimeline { public PhysicsConstraintGravityTimeline (int frameCount, int bezierCount, int constraintIndex) : base(frameCount, bezierCount, constraintIndex, Property.PhysicsConstraintGravity) { + additive = true; } override protected float Get (PhysicsConstraintPose pose) { diff --git a/spine-csharp/src/package.json b/spine-csharp/src/package.json index 8043c6b24..9959001ff 100644 --- a/spine-csharp/src/package.json +++ b/spine-csharp/src/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.spine-csharp", "displayName": "spine-csharp Runtime", "description": "This plugin provides the spine-csharp core runtime.", - "version": "4.3.11", + "version": "4.3.12", "unity": "2018.3", "author": { "name": "Esoteric Software",