fade in slider circles after repeats, hide them if ball does not need to go to them again
This commit is contained in:
parent
2260299c4b
commit
5be3fdf1a3
|
@ -180,6 +180,7 @@ public class Slider implements GameObject {
|
||||||
@Override
|
@Override
|
||||||
public void draw(Graphics g, int trackPosition) {
|
public void draw(Graphics g, int trackPosition) {
|
||||||
int timeDiff = hitObject.getTime() - trackPosition;
|
int timeDiff = hitObject.getTime() - trackPosition;
|
||||||
|
final int repeats = hitObject.getRepeatCount();
|
||||||
final int approachTime = game.getApproachTime();
|
final int approachTime = game.getApproachTime();
|
||||||
final int fadeInTime = game.getFadeInTime();
|
final int fadeInTime = game.getFadeInTime();
|
||||||
float scale = timeDiff / (float) approachTime;
|
float scale = timeDiff / (float) approachTime;
|
||||||
|
@ -205,16 +206,37 @@ public class Slider implements GameObject {
|
||||||
float curveInterval = Options.isSliderSnaking() ? alpha : 1f;
|
float curveInterval = Options.isSliderSnaking() ? alpha : 1f;
|
||||||
curve.draw(color,curveInterval);
|
curve.draw(color,curveInterval);
|
||||||
|
|
||||||
// end circle
|
// end circle, only draw if ball still has to go there
|
||||||
Vec2f endCircPos = curve.pointAt(curveInterval);
|
if (curveInterval == 1f && currentRepeats < repeats - (repeats % 2 == 0 ? 1 : 0)) {
|
||||||
hitCircle.drawCentered(endCircPos.x, endCircPos.y, color);
|
Color circleColor = new Color(color);
|
||||||
hitCircleOverlay.drawCentered(endCircPos.x, endCircPos.y, Colors.WHITE_FADE);
|
Color overlayColor = new Color(Colors.WHITE_FADE);
|
||||||
|
if (currentRepeats == 0) {
|
||||||
|
if (Options.isSliderSnaking()) {
|
||||||
|
// fade in end circle using decorationsAlpha when snaking sliders are enabled
|
||||||
|
circleColor.a = overlayColor.a = decorationsAlpha;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// fade in end circle after repeats
|
||||||
|
circleColor.a = overlayColor.a = getCircleAlphaAfterRepeat(trackPosition, true);
|
||||||
|
}
|
||||||
|
Vec2f endCircPos = curve.pointAt(curveInterval);
|
||||||
|
hitCircle.drawCentered(endCircPos.x, endCircPos.y, circleColor);
|
||||||
|
hitCircleOverlay.drawCentered(endCircPos.x, endCircPos.y, overlayColor);
|
||||||
|
}
|
||||||
|
|
||||||
// draw start circle when not clicked yet
|
// set first circle colors to fade in after repeats
|
||||||
if (!sliderClickedInitial) {
|
Color firstCircleColor = new Color(color);
|
||||||
hitCircle.drawCentered(x, y, color);
|
Color startCircleOverlayColor = new Color(Colors.WHITE_FADE);
|
||||||
if (!overlayAboveNumber)
|
if (sliderClickedInitial) {
|
||||||
hitCircleOverlay.drawCentered(x, y, Colors.WHITE_FADE);
|
// fade in first circle after repeats
|
||||||
|
firstCircleColor.a = startCircleOverlayColor.a = getCircleAlphaAfterRepeat(trackPosition, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// start circle, only draw if ball still has to go there
|
||||||
|
if (!sliderClickedInitial || currentRepeats < repeats - (repeats % 2 == 1 ? 1 : 0)) {
|
||||||
|
hitCircle.drawCentered(x, y, firstCircleColor);
|
||||||
|
if (!overlayAboveNumber || sliderClickedInitial)
|
||||||
|
hitCircleOverlay.drawCentered(x, y, startCircleOverlayColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
color.a = alpha;
|
color.a = alpha;
|
||||||
|
@ -240,10 +262,8 @@ public class Slider implements GameObject {
|
||||||
hitCircle.getWidth() * 0.40f / data.getDefaultSymbolImage(0).getHeight(), alpha);
|
hitCircle.getWidth() * 0.40f / data.getDefaultSymbolImage(0).getHeight(), alpha);
|
||||||
|
|
||||||
if (overlayAboveNumber) {
|
if (overlayAboveNumber) {
|
||||||
oldWhiteFadeAlpha = Colors.WHITE_FADE.a;
|
startCircleOverlayColor.a = sliderAlpha;
|
||||||
Colors.WHITE_FADE.a = sliderAlpha;
|
hitCircleOverlay.drawCentered(x, y, startCircleOverlayColor);
|
||||||
hitCircleOverlay.drawCentered(x, y, Colors.WHITE_FADE);
|
|
||||||
Colors.WHITE_FADE.a = oldWhiteFadeAlpha;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -366,6 +386,24 @@ public class Slider implements GameObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the alpha level used to fade in circles & reversearrows after repeat
|
||||||
|
* @param trackPosition current trackposition, in ms
|
||||||
|
* @param endCircle request alpha for end circle (true) or start circle (false)?
|
||||||
|
* @return alpha level as float in interval [0, 1]
|
||||||
|
*/
|
||||||
|
private float getCircleAlphaAfterRepeat(int trackPosition, boolean endCircle) {
|
||||||
|
int ticksN = ticksT == null ? 0 : ticksT.length;
|
||||||
|
float t = getT(trackPosition, false);
|
||||||
|
if (endCircle) {
|
||||||
|
t = 1f - t;
|
||||||
|
}
|
||||||
|
if (currentRepeats % 2 == (endCircle ? 0 : 1)) {
|
||||||
|
t = 1f;
|
||||||
|
}
|
||||||
|
return Utils.clamp(t * (ticksN + 1), 0f, 1f);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates the slider hit result.
|
* Calculates the slider hit result.
|
||||||
* @return the hit result (GameData.HIT_* constants)
|
* @return the hit result (GameData.HIT_* constants)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user