diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java index 775e33841..e52a16c36 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java @@ -418,8 +418,9 @@ public class SkeletonBinary extends SkeletonLoader { case CONSTRAINT_SLIDER -> { var data = new SliderData(name); data.skinRequired = (nn & 1) != 0; - if ((nn & 2) != 0) data.setup.mix = (nn & 4) != 0 ? input.readFloat() : 1; - if ((nn & 8) != 0) data.setup.time = input.readFloat(); + data.additive = (nn & 2) != 0; + if ((nn & 4) != 0) data.setup.mix = (nn & 8) != 0 ? input.readFloat() : 1; + if ((nn & 16) != 0) data.setup.time = input.readFloat(); constraints[i] = data; } } diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java index cfeb6e9c5..dc6c84375 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java @@ -408,6 +408,7 @@ public class SkeletonJson extends SkeletonLoader { case "slider" -> { var data = new SliderData(name); data.skinRequired = skinRequired; + data.additive = constraintMap.getBoolean("additive", false); data.setup.time = constraintMap.getFloat("time", 0); data.setup.mix = constraintMap.getFloat("mix", 1); skeletonData.constraints.add(data); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Slider.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Slider.java index c8814cba6..88f461ce5 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Slider.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Slider.java @@ -71,7 +71,8 @@ public class Slider extends Constraint { } SliderPose pose = applied; - data.animation.apply(skeleton, pose.time, pose.time, false, null, pose.mix, MixBlend.replace, MixDirection.in, true); + data.animation.apply(skeleton, pose.time, pose.time, false, null, pose.mix, data.additive ? MixBlend.add : MixBlend.replace, + MixDirection.in, true); } void sort (Skeleton skeleton) { diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SliderData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SliderData.java index 55fbc47dc..9ce8c9bd8 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SliderData.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SliderData.java @@ -34,6 +34,7 @@ package com.esotericsoftware.spine; * See Physics constraints in the Spine User Guide. */ public class SliderData extends ConstraintData { Animation animation; + boolean additive; public SliderData (String name) { super(name, new SliderPose()); @@ -50,4 +51,12 @@ public class SliderData extends ConstraintData { public void setAnimation (Animation animation) { this.animation = animation; } + + public boolean getAdditive () { + return additive; + } + + public void setAdditive (boolean additive) { + this.additive = additive; + } }