always fadeout slider curve
This commit is contained in:
parent
cc41a54408
commit
62a7ee0f21
|
@ -232,7 +232,7 @@ public class GameData {
|
|||
private LinkedBlockingDeque<HitErrorInfo> hitErrorList;
|
||||
|
||||
/** Hit object types, used for drawing results. */
|
||||
public enum HitObjectType { CIRCLE, SLIDERTICK, SLIDER_FIRST, SLIDER_LAST, SPINNER }
|
||||
public enum HitObjectType { CIRCLE, SLIDERTICK, SLIDER_FIRST, SLIDER_CURVE, SLIDER_LAST, SPINNER }
|
||||
|
||||
/** Hit result helper class. */
|
||||
private class HitObjectResult {
|
||||
|
@ -892,7 +892,25 @@ public class GameData {
|
|||
lighting.drawCentered(hitResult.x, hitResult.y, hitResult.color);
|
||||
}
|
||||
|
||||
// hit animation
|
||||
// slider done animation
|
||||
|
||||
// hit animations
|
||||
if (hitResult.hitResultType == HitObjectType.SLIDER_CURVE && hitResult.curve != null) {
|
||||
float progress = AnimationEquation.OUT_CUBIC.calc(
|
||||
(float) Utils.clamp(trackPosition - hitResult.time, 0, HITCIRCLE_FADE_TIME) / HITCIRCLE_FADE_TIME);
|
||||
float alpha = 1f - progress;
|
||||
|
||||
// slider curve
|
||||
float oldWhiteAlpha = Colors.WHITE_FADE.a;
|
||||
float oldColorAlpha = hitResult.color.a;
|
||||
Colors.WHITE_FADE.a = alpha;
|
||||
hitResult.color.a = alpha;
|
||||
hitResult.curve.draw(hitResult.color);
|
||||
Colors.WHITE_FADE.a = oldWhiteAlpha;
|
||||
hitResult.color.a = oldColorAlpha;
|
||||
}
|
||||
|
||||
// circles
|
||||
if (hitResult.result != HIT_MISS && (
|
||||
hitResult.hitResultType == HitObjectType.CIRCLE ||
|
||||
hitResult.hitResultType == HitObjectType.SLIDER_FIRST ||
|
||||
|
@ -915,27 +933,13 @@ public class GameData {
|
|||
scaledRepeat.rotate(ang);
|
||||
scaledRepeat.drawCentered(hitResult.x, hitResult.y, hitResult.color);
|
||||
}
|
||||
// "hidden" mod: circle and slider animations not drawn
|
||||
else if (!GameMod.HIDDEN.isActive()) {
|
||||
// slider curve
|
||||
if (hitResult.curve != null) {
|
||||
float oldWhiteAlpha = Colors.WHITE_FADE.a;
|
||||
float oldColorAlpha = hitResult.color.a;
|
||||
Colors.WHITE_FADE.a = alpha;
|
||||
hitResult.color.a = alpha;
|
||||
hitResult.curve.draw(hitResult.color);
|
||||
Colors.WHITE_FADE.a = oldWhiteAlpha;
|
||||
hitResult.color.a = oldColorAlpha;
|
||||
}
|
||||
|
||||
// hit circles
|
||||
Image scaledHitCircle = GameImage.HITCIRCLE.getImage().getScaledCopy(scale);
|
||||
Image scaledHitCircleOverlay = GameImage.HITCIRCLE_OVERLAY.getImage().getScaledCopy(scale);
|
||||
scaledHitCircle.setAlpha(alpha);
|
||||
scaledHitCircleOverlay.setAlpha(alpha);
|
||||
scaledHitCircle.drawCentered(hitResult.x, hitResult.y, hitResult.color);
|
||||
scaledHitCircleOverlay.drawCentered(hitResult.x, hitResult.y);
|
||||
}
|
||||
// hit circles
|
||||
Image scaledHitCircle = GameImage.HITCIRCLE.getImage().getScaledCopy(scale);
|
||||
Image scaledHitCircleOverlay = GameImage.HITCIRCLE_OVERLAY.getImage().getScaledCopy(scale);
|
||||
scaledHitCircle.setAlpha(alpha);
|
||||
scaledHitCircleOverlay.setAlpha(alpha);
|
||||
scaledHitCircle.drawCentered(hitResult.x, hitResult.y, hitResult.color);
|
||||
scaledHitCircleOverlay.drawCentered(hitResult.x, hitResult.y);
|
||||
}
|
||||
|
||||
// hit result
|
||||
|
@ -1195,6 +1199,10 @@ public class GameData {
|
|||
hitResultList.add(new HitObjectResult(time, HIT_SLIDER_REPEAT, x, y, color, type, curve, true, true));
|
||||
}
|
||||
|
||||
public void sendSliderCurveResult(int time, Color color, Curve curve) {
|
||||
hitResultList.add(new HitObjectResult(time, HIT_SLIDER_REPEAT, 0f, 0f, color, HitObjectType.SLIDER_CURVE, curve, true, true));
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles a slider tick result.
|
||||
* @param time the tick start time
|
||||
|
@ -1396,14 +1404,6 @@ public class GameData {
|
|||
|
||||
boolean hideResult = (hitResult == HIT_300 || hitResult == HIT_300G || hitResult == HIT_300K) && !Options.isPerfectHitBurstEnabled();
|
||||
hitResultList.add(new HitObjectResult(time, hitResult, x, y, color, hitResultType, curve, expand, hideResult));
|
||||
|
||||
// sliders: add the other curve endpoint for the hit animation
|
||||
if (curve != null) {
|
||||
boolean isFirst = (hitResultType == HitObjectType.SLIDER_FIRST);
|
||||
Vec2f p = curve.pointAt((isFirst) ? 1f : 0f);
|
||||
HitObjectType type = (isFirst) ? HitObjectType.SLIDER_LAST : HitObjectType.SLIDER_FIRST;
|
||||
hitResultList.add(new HitObjectResult(time, hitResult, p.x, p.y, color, type, null, expand, hideResult));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -441,7 +441,7 @@ public class Slider implements GameObject {
|
|||
}
|
||||
data.hitResult(hitObject.getTime() + (int) sliderTimeTotal, result,
|
||||
cx, cy, color, comboEnd, hitObject, type, sliderHeldToEnd,
|
||||
currentRepeats + 1, curve, sliderHeldToEnd);
|
||||
currentRepeats + 1, null, sliderHeldToEnd);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -530,6 +530,9 @@ public class Slider implements GameObject {
|
|||
|
||||
// calculate and send slider result
|
||||
hitResult();
|
||||
|
||||
// send 'curve fade out' hit result
|
||||
data.sendSliderCurveResult(getEndTime(), color, curve);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user