fix sliders disappearing when multiple sliders are active or when later sliders is done earlier (2b maps etc)

This commit is contained in:
yugecin
2017-03-05 11:58:07 +01:00
parent d6144187ad
commit 2f1f860ca3
6 changed files with 70 additions and 42 deletions

View File

@@ -466,13 +466,14 @@ public class Slider extends GameObject {
int curvelen = curve.getCurvePoints().length;
if (Options.isMergingSliders()) {
if (Options.isShrinkingSliders() && curveIntervalFrom > 0) {
if (repeats % 2 == 0) {
game.spliceSliderCurve(baseSliderFrom + (int) ((1d - curveIntervalFrom) * curvelen) - 1, baseSliderFrom + curvelen);
if (hitObject.getRepeatCount() % 2 == 0) {
game.addMergedSliderPointsToRender(baseSliderFrom, baseSliderFrom + (int) ((1d - curveIntervalFrom) * curvelen));
} else {
game.setSlidercurveFrom(baseSliderFrom + (int) (curveIntervalFrom * curvelen) + 1);
game.addMergedSliderPointsToRender(baseSliderFrom + (int) (curveIntervalFrom * curvelen) + 1, baseSliderFrom + (int) (curveIntervalTo * curve.getCurvePoints().length));
}
} else {
game.addMergedSliderPointsToRender(baseSliderFrom, baseSliderFrom + (int) (curveIntervalTo * curve.getCurvePoints().length));
}
game.setSlidercurveTo(baseSliderFrom + (int) (curveIntervalTo * curve.getCurvePoints().length));
} else {
if (Options.isShrinkingSliders() && curveIntervalFrom > 0 && repeats % 2 == 0) {
if (Options.isFallbackSliders()) {
@@ -687,9 +688,6 @@ public class Slider extends GameObject {
// calculate and send slider result
hitResult();
if (Options.isMergingSliders()) {
game.setSlidercurveFrom(baseSliderFrom + curve.getCurvePoints().length + 1);
}
return true;
}

View File

@@ -20,7 +20,6 @@ package itdelatrisu.opsu.objects.curves;
import itdelatrisu.opsu.GameImage;
import itdelatrisu.opsu.Options;
import itdelatrisu.opsu.Utils;
import itdelatrisu.opsu.beatmap.HitObject;
import itdelatrisu.opsu.render.CurveRenderState;
import itdelatrisu.opsu.skins.Skin;
@@ -31,7 +30,6 @@ import org.lwjgl.opengl.GLContext;
import org.newdawn.slick.Color;
import org.newdawn.slick.Image;
import org.newdawn.slick.util.Log;
import yugecin.opsudance.objects.curves.FakeCombinedCurve;
/**
* Representation of a curve.
@@ -43,7 +41,7 @@ public abstract class Curve {
protected static float CURVE_POINTS_SEPERATION = 2.5f;
/** The curve border color. */
private static Color borderColor;
protected static Color borderColor;
/** Whether mmsliders are supported. */
private static boolean mmsliderSupported = false;
@@ -58,7 +56,7 @@ public abstract class Curve {
protected float[] sliderX, sliderY;
/** Per-curve render-state used for the new style curve renders. */
private CurveRenderState renderState;
protected CurveRenderState renderState;
/** Points along the curve (set by inherited classes). */
public Vec2f[] curve;
@@ -150,14 +148,14 @@ public abstract class Curve {
// mmsliders
else {
if (renderState == null)
renderState = new CurveRenderState(hitObject, curve, this instanceof FakeCombinedCurve);
renderState = new CurveRenderState(hitObject, curve, false);
renderState.draw(color, borderColor, from, to);
}
}
public void splice(int from, int to) {
if (renderState == null)
renderState = new CurveRenderState(hitObject, curve, this instanceof FakeCombinedCurve);
renderState = new CurveRenderState(hitObject, curve, false);
renderState.splice(from, to);
}