correct shrinking sliders for slider with odd amount of repeats

This commit is contained in:
yugecin 2016-12-04 21:12:22 +01:00
parent 00fcf0ebc1
commit 50f475e0f7
3 changed files with 34 additions and 2 deletions

View File

@ -124,6 +124,8 @@ public class Slider extends GameObject {
public int baseSliderFrom; public int baseSliderFrom;
private boolean reversed;
/** /**
* Initializes the Slider data type with images and dimensions. * Initializes the Slider data type with images and dimensions.
* @param container the game container * @param container the game container
@ -377,7 +379,17 @@ public class Slider extends GameObject {
float curveIntervalTo = Options.isSliderSnaking() ? snakingSliderProgress : 1f; float curveIntervalTo = Options.isSliderSnaking() ? snakingSliderProgress : 1f;
float curveIntervalFrom = 0f; float curveIntervalFrom = 0f;
if (Options.isShrinkingSliders()) { if (Options.isShrinkingSliders()) {
float sliderprogress = (float) (trackPosition - getTime()) / sliderTimeTotal; // 1 repeat = no repeats..
if (repeats % 2 == 0 && curveIntervalTo == 1 && !reversed) {
// fix shrinking sliders for odd repeating sliders
reversed = true;
if (Options.isMergingSliders()) {
} else {
curve.reverse();
}
}
float sliderprogress = (trackPosition - getTime() - (sliderTime * (repeats - 1))) / sliderTime;
if (sliderprogress > 0) { if (sliderprogress > 0) {
curveIntervalFrom = sliderprogress; curveIntervalFrom = sliderprogress;
} }

View File

@ -159,6 +159,12 @@ public abstract class Curve {
} }
} }
public void reverse() {
if (renderState == null)
renderState = new CurveRenderState(hitObject, curve);
renderState.reverse();
}
/** /**
* Returns the angle of the first control point. * Returns the angle of the first control point.
*/ */

View File

@ -66,6 +66,8 @@ public class CurveRenderState {
private int lastPointDrawn; private int lastPointDrawn;
private int firstPointDrawn; private int firstPointDrawn;
private boolean reversed;
/** /**
* Set the width and height of the container that Curves get drawn into. * Set the width and height of the container that Curves get drawn into.
* Should be called before any curves are drawn. * Should be called before any curves are drawn.
@ -110,6 +112,11 @@ public class CurveRenderState {
createVertexBuffer(fbo.getVbo()); createVertexBuffer(fbo.getVbo());
//write impossible value to make sure the fbo is cleared //write impossible value to make sure the fbo is cleared
lastPointDrawn = -1; lastPointDrawn = -1;
reversed = false;
}
public void reverse() {
reversed = !reversed;
} }
/** /**
@ -322,7 +329,14 @@ public class CurveRenderState {
if (clearFirst) { if (clearFirst) {
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
} }
for (int i = from * 2; i < to * 2 - 1; ++i) from = from * 2;
to = to * 2 - 1;
if (reversed) {
int a = from;
from = curve.length * 2 - 1 - to;
to = curve.length * 2 - 1 - a;
}
for (int i = from; i < to; ++i)
GL11.glDrawArrays(GL11.GL_TRIANGLE_FAN, i * (NewCurveStyleState.DIVIDES + 2), NewCurveStyleState.DIVIDES + 2); GL11.glDrawArrays(GL11.GL_TRIANGLE_FAN, i * (NewCurveStyleState.DIVIDES + 2), NewCurveStyleState.DIVIDES + 2);
GL11.glFlush(); GL11.glFlush();
GL20.glDisableVertexAttribArray(staticState.texCoordLoc); GL20.glDisableVertexAttribArray(staticState.texCoordLoc);