From 87e68bd4948eac663da76247db84865975ee16bc Mon Sep 17 00:00:00 2001 From: Drew Lemmy Date: Mon, 6 Apr 2015 23:08:49 +0100 Subject: [PATCH 1/7] Added hit animations, updated lighting & added InteliJ to gitignore --- .gitignore | 5 +++++ res/lighting.png | Bin 10232 -> 39980 bytes res/lighting1.png | Bin 13211 -> 0 bytes src/itdelatrisu/opsu/GameData.java | 28 ++++++++++++++++++---------- src/itdelatrisu/opsu/GameImage.java | 1 - 5 files changed, 23 insertions(+), 11 deletions(-) delete mode 100644 res/lighting1.png diff --git a/.gitignore b/.gitignore index 172616ad..1773d9fe 100644 --- a/.gitignore +++ b/.gitignore @@ -15,5 +15,10 @@ .classpath .project +# IntelliJ +.idea/ +*.iml +*.iws + Thumbs.db /target diff --git a/res/lighting.png b/res/lighting.png index 85e22fdc75e461a02b4d41d076cfaaa17ae6ca16..870d6c17912f6d3532a82c21eeb6c9e930ef3234 100644 GIT binary patch literal 39980 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 M07*qoM6N<$g0H$Wn*aa+ literal 10232 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 C17_3! diff --git a/src/itdelatrisu/opsu/GameData.java b/src/itdelatrisu/opsu/GameData.java index 254c25ac..ee85b9a4 100644 --- a/src/itdelatrisu/opsu/GameData.java +++ b/src/itdelatrisu/opsu/GameData.java @@ -47,6 +47,9 @@ public class GameData { /** Time, in milliseconds, for a hit result to fade. */ public static final int HITRESULT_FADE_TIME = 500; + /** Time, in milliseconds, for a hit circle to fade. */ + public static final int HITCIRCLE_FADE_TIME = 233; + /** Duration, in milliseconds, of a combo pop effect. */ private static final int COMBO_POP_TIME = 250; @@ -839,18 +842,23 @@ public class GameData { // hit lighting else if (Options.isHitLightingEnabled() && hitResult.result != HIT_MISS && hitResult.result != HIT_SLIDER30 && hitResult.result != HIT_SLIDER10) { - float scale = 1f + ((trackPosition - hitResult.time) / (float) HITRESULT_FADE_TIME); - Image scaledLighting = GameImage.LIGHTING.getImage().getScaledCopy(scale); - Image scaledLighting1 = GameImage.LIGHTING1.getImage().getScaledCopy(scale); - scaledLighting.setAlpha(hitResult.alpha); - scaledLighting1.setAlpha(hitResult.alpha); - - scaledLighting.draw(hitResult.x - (scaledLighting.getWidth() / 2f), - hitResult.y - (scaledLighting.getHeight() / 2f), hitResult.color); - scaledLighting1.draw(hitResult.x - (scaledLighting1.getWidth() / 2f), - hitResult.y - (scaledLighting1.getHeight() / 2f), hitResult.color); + // soon add particle system to reflect original game + Image lighting = GameImage.LIGHTING.getImage(); + lighting.setAlpha(hitResult.alpha); + lighting.drawCentered(hitResult.x, hitResult.y, hitResult.color); } + // hit animation + Image scaledHitCircle = GameImage.HITCIRCLE.getImage().getScaledCopy( + 1f + (((float)(trackPosition - hitResult.time) / HITCIRCLE_FADE_TIME) / 2)); + scaledHitCircle.setAlpha(1f - Utils.clamp((float)(trackPosition - hitResult.time) / HITCIRCLE_FADE_TIME, 0, 1)); + Image scaledHitCircleOverlay = GameImage.HITCIRCLE_OVERLAY.getImage().getScaledCopy( + 1f + (((float)(trackPosition - hitResult.time) / HITCIRCLE_FADE_TIME) / 2)); + scaledHitCircleOverlay.setAlpha(1f - Utils.clamp((float) (trackPosition - hitResult.time) / HITCIRCLE_FADE_TIME, 0, 1)); + + scaledHitCircle.drawCentered(hitResult.x, hitResult.y, hitResult.color); + scaledHitCircleOverlay.drawCentered(hitResult.x, hitResult.y); + hitResult.alpha = 1 - ((float) (trackPosition - hitResult.time) / HITRESULT_FADE_TIME); } else iter.remove(); diff --git a/src/itdelatrisu/opsu/GameImage.java b/src/itdelatrisu/opsu/GameImage.java index 5f7657a1..ae4cba70 100644 --- a/src/itdelatrisu/opsu/GameImage.java +++ b/src/itdelatrisu/opsu/GameImage.java @@ -202,7 +202,6 @@ public enum GameImage { SCORE_PERCENT ("score-percent", "png"), SCORE_X ("score-x", "png"), LIGHTING ("lighting", "png"), - LIGHTING1 ("lighting1", "png"), // Game Mods MOD_EASY ("selection-mod-easy", "png", false, false), From 9a2772b6148ed25596d6ab313213f2603e5b4ea8 Mon Sep 17 00:00:00 2001 From: Drew Lemmy Date: Mon, 6 Apr 2015 23:12:36 +0100 Subject: [PATCH 2/7] Moved hit result to be drawn after lighting --- src/itdelatrisu/opsu/GameData.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/itdelatrisu/opsu/GameData.java b/src/itdelatrisu/opsu/GameData.java index ee85b9a4..a8a41e7b 100644 --- a/src/itdelatrisu/opsu/GameData.java +++ b/src/itdelatrisu/opsu/GameData.java @@ -826,11 +826,6 @@ public class GameData { while (iter.hasNext()) { OsuHitObjectResult hitResult = iter.next(); if (hitResult.time + HITRESULT_FADE_TIME > trackPosition) { - // hit result - hitResults[hitResult.result].setAlpha(hitResult.alpha); - hitResults[hitResult.result].drawCentered(hitResult.x, hitResult.y); - hitResults[hitResult.result].setAlpha(1f); - // spinner if (hitResult.isSpinner && hitResult.result != HIT_MISS) { Image spinnerOsu = GameImage.SPINNER_OSU.getImage(); @@ -847,6 +842,11 @@ public class GameData { lighting.setAlpha(hitResult.alpha); lighting.drawCentered(hitResult.x, hitResult.y, hitResult.color); } + + // hit result + hitResults[hitResult.result].setAlpha(hitResult.alpha); + hitResults[hitResult.result].drawCentered(hitResult.x, hitResult.y); + hitResults[hitResult.result].setAlpha(1f); // hit animation Image scaledHitCircle = GameImage.HITCIRCLE.getImage().getScaledCopy( From c3bca9a39ed00e75fb00f824c19e7e90ca718ef1 Mon Sep 17 00:00:00 2001 From: Drew Lemmy Date: Tue, 7 Apr 2015 03:00:14 +0100 Subject: [PATCH 3/7] Changed lighting texture --- res/lighting.png | Bin 39980 -> 22878 bytes src/itdelatrisu/opsu/GameData.java | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/res/lighting.png b/res/lighting.png index 870d6c17912f6d3532a82c21eeb6c9e930ef3234..01d9794c9bd3b0f36b643beb2b106edab899fc97 100644 GIT binary patch literal 22878 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 jC*?=kP|{>5f`UZ${r~_ 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 M07*qoM6N<$g0H$Wn*aa+ diff --git a/src/itdelatrisu/opsu/GameData.java b/src/itdelatrisu/opsu/GameData.java index a8a41e7b..57c037d6 100644 --- a/src/itdelatrisu/opsu/GameData.java +++ b/src/itdelatrisu/opsu/GameData.java @@ -842,7 +842,7 @@ public class GameData { lighting.setAlpha(hitResult.alpha); lighting.drawCentered(hitResult.x, hitResult.y, hitResult.color); } - + // hit result hitResults[hitResult.result].setAlpha(hitResult.alpha); hitResults[hitResult.result].drawCentered(hitResult.x, hitResult.y); From 8e8fda7e58176b70582e32c70e414f2b524679b8 Mon Sep 17 00:00:00 2001 From: Drew Lemmy Date: Tue, 7 Apr 2015 06:24:09 +0100 Subject: [PATCH 4/7] Added pretty much everything suggested to hit animations --- src/itdelatrisu/opsu/GameData.java | 94 ++++++++++++++----- src/itdelatrisu/opsu/Utils.java | 10 ++ src/itdelatrisu/opsu/objects/Circle.java | 8 +- .../opsu/objects/HitResultType.java | 10 ++ src/itdelatrisu/opsu/objects/Slider.java | 15 ++- src/itdelatrisu/opsu/objects/Spinner.java | 2 +- 6 files changed, 103 insertions(+), 36 deletions(-) create mode 100644 src/itdelatrisu/opsu/objects/HitResultType.java diff --git a/src/itdelatrisu/opsu/GameData.java b/src/itdelatrisu/opsu/GameData.java index 57c037d6..4bcf47dc 100644 --- a/src/itdelatrisu/opsu/GameData.java +++ b/src/itdelatrisu/opsu/GameData.java @@ -23,6 +23,7 @@ import itdelatrisu.opsu.audio.MusicController; import itdelatrisu.opsu.audio.SoundController; import itdelatrisu.opsu.audio.SoundEffect; import itdelatrisu.opsu.downloads.Updater; +import itdelatrisu.opsu.objects.HitResultType; import itdelatrisu.opsu.replay.Replay; import itdelatrisu.opsu.replay.ReplayFrame; @@ -48,7 +49,7 @@ public class GameData { public static final int HITRESULT_FADE_TIME = 500; /** Time, in milliseconds, for a hit circle to fade. */ - public static final int HITCIRCLE_FADE_TIME = 233; + public static final int HITCIRCLE_FADE_TIME = 300; /** Duration, in milliseconds, of a combo pop effect. */ private static final int COMBO_POP_TIME = 250; @@ -56,6 +57,18 @@ public class GameData { /** Time, in milliseconds, for a hit error tick to fade. */ private static final int HIT_ERROR_FADE_TIME = 5000; + /** Size of a hit circle at the end of the hit animation. */ + private static final float HITCIRCLE_ANIM_SCALE = 1.38f; + + /** Size of the hit result text at the end of its animation. */ + private static final float HITCIRCLE_TEXT_ANIM_SCALE = 1.28f; + + /** Time, in milliseconds, for the hit result text to bounce. */ + private static final int HITCIRCLE_TEXT_BOUNCE_TIME = 100; + + /** Time, in milliseconds, for the hit result text to fade. */ + private static final int HITCIRCLE_TEXT_FADE_TIME = 833; + /** Letter grades. */ public enum Grade { NULL (null, null), @@ -224,8 +237,8 @@ public class GameData { /** Combo color. */ public Color color; - /** Whether the hit object was a spinner. */ - public boolean isSpinner; + /** The type of the hit object. */ + public HitResultType hitResultType; /** Alpha level (for fading out). */ public float alpha = 1f; @@ -237,15 +250,15 @@ public class GameData { * @param x the center x coordinate * @param y the center y coordinate * @param color the color of the hit object - * @param isSpinner whether the hit object was a spinner + * @param hitResultType the type of the hit object */ - public OsuHitObjectResult(int time, int result, float x, float y, Color color, boolean isSpinner) { + public OsuHitObjectResult(int time, int result, float x, float y, Color color, HitResultType hitResultType) { this.time = time; this.result = result; this.x = x; this.y = y; this.color = color; - this.isSpinner = isSpinner; + this.hitResultType = hitResultType; } } @@ -827,7 +840,7 @@ public class GameData { OsuHitObjectResult hitResult = iter.next(); if (hitResult.time + HITRESULT_FADE_TIME > trackPosition) { // spinner - if (hitResult.isSpinner && hitResult.result != HIT_MISS) { + if (hitResult.hitResultType == HitResultType.SPINNER && hitResult.result != HIT_MISS) { Image spinnerOsu = GameImage.SPINNER_OSU.getImage(); spinnerOsu.setAlpha(hitResult.alpha); spinnerOsu.drawCentered(width / 2, height / 4); @@ -843,21 +856,55 @@ public class GameData { lighting.drawCentered(hitResult.x, hitResult.y, hitResult.color); } - // hit result - hitResults[hitResult.result].setAlpha(hitResult.alpha); - hitResults[hitResult.result].drawCentered(hitResult.x, hitResult.y); - hitResults[hitResult.result].setAlpha(1f); - // hit animation - Image scaledHitCircle = GameImage.HITCIRCLE.getImage().getScaledCopy( - 1f + (((float)(trackPosition - hitResult.time) / HITCIRCLE_FADE_TIME) / 2)); - scaledHitCircle.setAlpha(1f - Utils.clamp((float)(trackPosition - hitResult.time) / HITCIRCLE_FADE_TIME, 0, 1)); - Image scaledHitCircleOverlay = GameImage.HITCIRCLE_OVERLAY.getImage().getScaledCopy( - 1f + (((float)(trackPosition - hitResult.time) / HITCIRCLE_FADE_TIME) / 2)); - scaledHitCircleOverlay.setAlpha(1f - Utils.clamp((float) (trackPosition - hitResult.time) / HITCIRCLE_FADE_TIME, 0, 1)); + if (hitResult.hitResultType == HitResultType.CIRCLE + || hitResult.hitResultType == HitResultType.SLIDEREND + || hitResult.hitResultType == HitResultType.SLIDEREND_FIRSTOBJECT) { + float scale = Utils.easeOut( + Utils.clamp(trackPosition - hitResult.time, 0, HITCIRCLE_FADE_TIME), + 1f, + HITCIRCLE_ANIM_SCALE-1f, + HITCIRCLE_FADE_TIME + ); - scaledHitCircle.drawCentered(hitResult.x, hitResult.y, hitResult.color); - scaledHitCircleOverlay.drawCentered(hitResult.x, hitResult.y); + float alpha = Utils.easeOut( + Utils.clamp(trackPosition - hitResult.time, 0, HITCIRCLE_FADE_TIME), + 1f, + -1f, + HITCIRCLE_FADE_TIME + ); + + Image scaledHitCircle = GameImage.HITCIRCLE.getImage().getScaledCopy(scale); + scaledHitCircle.setAlpha(alpha); + Image scaledHitCircleOverlay = GameImage.HITCIRCLE_OVERLAY.getImage().getScaledCopy(scale); + scaledHitCircleOverlay.setAlpha(alpha); + + scaledHitCircle.drawCentered(hitResult.x, hitResult.y, hitResult.color); + scaledHitCircleOverlay.drawCentered(hitResult.x, hitResult.y); + } + + // hit result + if (hitResult.hitResultType == HitResultType.CIRCLE + || hitResult.hitResultType == HitResultType.SLIDEREND + || hitResult.hitResultType == HitResultType.SPINNER) { + float scale = Utils.easeBounce( + Utils.clamp(trackPosition - hitResult.time, 0, HITCIRCLE_TEXT_BOUNCE_TIME), + 1f, + HITCIRCLE_TEXT_ANIM_SCALE - 1f, + HITCIRCLE_TEXT_BOUNCE_TIME + ); + + float alpha = Utils.easeOut( + Utils.clamp((trackPosition - hitResult.time) - HITCIRCLE_FADE_TIME, 0, HITCIRCLE_TEXT_FADE_TIME), + 1f, + -1f, + HITCIRCLE_TEXT_FADE_TIME + ); + + Image scaledHitResult = hitResults[hitResult.result].getScaledCopy(scale); + scaledHitResult.setAlpha(alpha); + scaledHitResult.drawCentered(hitResult.x, hitResult.y); + } hitResult.alpha = 1 - ((float) (trackPosition - hitResult.time) / HITRESULT_FADE_TIME); } else @@ -1123,7 +1170,7 @@ public class GameData { if (!Options.isPerfectHitBurstEnabled()) ; // hide perfect hit results else - hitResultList.add(new OsuHitObjectResult(time, result, x, y, null, false)); + hitResultList.add(new OsuHitObjectResult(time, result, x, y, null, HitResultType.SLIDERTICK)); } } @@ -1137,9 +1184,10 @@ public class GameData { * @param end true if this is the last hit object in the combo * @param hitObject the hit object * @param repeat the current repeat number (for sliders, or 0 otherwise) + * @param hitResultType the type of hit object for the result */ public void hitResult(int time, int result, float x, float y, Color color, - boolean end, OsuHitObject hitObject, int repeat) { + boolean end, OsuHitObject hitObject, int repeat, HitResultType hitResultType) { int hitValue = 0; boolean perfectHit = false; switch (result) { @@ -1210,7 +1258,7 @@ public class GameData { else if (result == HIT_MISS && (GameMod.RELAX.isActive() || GameMod.AUTOPILOT.isActive())) ; // "relax" and "autopilot" mods: hide misses else - hitResultList.add(new OsuHitObjectResult(time, result, x, y, color, hitObject.isSpinner())); + hitResultList.add(new OsuHitObjectResult(time, result, x, y, color, hitResultType)); } /** diff --git a/src/itdelatrisu/opsu/Utils.java b/src/itdelatrisu/opsu/Utils.java index 6c13aec9..65678e55 100644 --- a/src/itdelatrisu/opsu/Utils.java +++ b/src/itdelatrisu/opsu/Utils.java @@ -607,4 +607,14 @@ public class Utils { else return String.format("%02d:%02d:%02d", seconds / 3600, (seconds / 60) % 60, seconds % 60); } + + public static float easeOut(float t, float a, float b, float d) { + return b * ((t = t / d - 1f) * t * t + 1f) + a; + } + + public static float easeBounce(float t, float a, float b, float d) { + if (t < d / 2) + return easeOut(t, a, b, d); + return easeOut(d-t, a, b, d); + } } diff --git a/src/itdelatrisu/opsu/objects/Circle.java b/src/itdelatrisu/opsu/objects/Circle.java index 6380078c..c8ee6c1b 100644 --- a/src/itdelatrisu/opsu/objects/Circle.java +++ b/src/itdelatrisu/opsu/objects/Circle.java @@ -138,7 +138,7 @@ public class Circle implements HitObject { if (result > -1) { data.addHitError(hitObject.getTime(), x, y, timeDiff); - data.hitResult(hitObject.getTime(), result, this.x, this.y, color, comboEnd, hitObject, 0); + data.hitResult(hitObject.getTime(), result, this.x, this.y, color, comboEnd, hitObject, 0, HitResultType.CIRCLE); return true; } } @@ -154,17 +154,17 @@ public class Circle implements HitObject { if (overlap || trackPosition > time + hitResultOffset[GameData.HIT_50]) { if (isAutoMod) // "auto" mod: catch any missed notes due to lag - data.hitResult(time, GameData.HIT_300, x, y, color, comboEnd, hitObject, 0); + data.hitResult(time, GameData.HIT_300, x, y, color, comboEnd, hitObject, 0, HitResultType.CIRCLE); else // no more points can be scored, so send a miss - data.hitResult(time, GameData.HIT_MISS, x, y, null, comboEnd, hitObject, 0); + data.hitResult(time, GameData.HIT_MISS, x, y, null, comboEnd, hitObject, 0, HitResultType.CIRCLE); return true; } // "auto" mod: send a perfect hit result else if (isAutoMod) { if (Math.abs(trackPosition - time) < hitResultOffset[GameData.HIT_300]) { - data.hitResult(time, GameData.HIT_300, x, y, color, comboEnd, hitObject, 0); + data.hitResult(time, GameData.HIT_300, x, y, color, comboEnd, hitObject, 0, HitResultType.CIRCLE); return true; } } diff --git a/src/itdelatrisu/opsu/objects/HitResultType.java b/src/itdelatrisu/opsu/objects/HitResultType.java new file mode 100644 index 00000000..3dea7458 --- /dev/null +++ b/src/itdelatrisu/opsu/objects/HitResultType.java @@ -0,0 +1,10 @@ +package itdelatrisu.opsu.objects; + +public enum HitResultType { + CIRCLE, + SLIDERSTART, + SLIDERTICK, + SLIDEREND, + SLIDEREND_FIRSTOBJECT, + SPINNER +} diff --git a/src/itdelatrisu/opsu/objects/Slider.java b/src/itdelatrisu/opsu/objects/Slider.java index 646e8c12..0d470a08 100644 --- a/src/itdelatrisu/opsu/objects/Slider.java +++ b/src/itdelatrisu/opsu/objects/Slider.java @@ -278,14 +278,13 @@ public class Slider implements HitObject { else result = GameData.HIT_MISS; - if (currentRepeats % 2 == 0) { // last circle - float[] lastPos = curve.pointAt(1); - data.hitResult(hitObject.getTime() + (int) sliderTimeTotal, result, - lastPos[0], lastPos[1], color, comboEnd, hitObject, currentRepeats + 1); - } else { // first circle - data.hitResult(hitObject.getTime() + (int) sliderTimeTotal, result, - x, y, color, comboEnd, hitObject, currentRepeats + 1); - } + float[] lastPos = curve.pointAt(1); + data.hitResult(hitObject.getTime() + (int) sliderTimeTotal, result, + x, y, color, comboEnd, hitObject, currentRepeats + 1, + currentRepeats % 2 == 0 ? HitResultType.SLIDEREND_FIRSTOBJECT : HitResultType.SLIDEREND); + data.hitResult(hitObject.getTime() + (int) sliderTimeTotal, result, + lastPos[0], lastPos[1], color, comboEnd, hitObject, currentRepeats + 1, + currentRepeats % 2 == 0 ? HitResultType.SLIDEREND : HitResultType.SLIDEREND_FIRSTOBJECT); return result; } diff --git a/src/itdelatrisu/opsu/objects/Spinner.java b/src/itdelatrisu/opsu/objects/Spinner.java index 1200418a..1cc6e290 100644 --- a/src/itdelatrisu/opsu/objects/Spinner.java +++ b/src/itdelatrisu/opsu/objects/Spinner.java @@ -191,7 +191,7 @@ public class Spinner implements HitObject { result = GameData.HIT_MISS; data.hitResult(hitObject.getEndTime(), result, width / 2, height / 2, - Color.transparent, true, hitObject, 0); + Color.transparent, true, hitObject, 0, HitResultType.SPINNER); return result; } From 792b511a46a55913c1b8c0ef0ecc3ecac3f6b337 Mon Sep 17 00:00:00 2001 From: Drew Lemmy Date: Tue, 7 Apr 2015 13:13:43 +0100 Subject: [PATCH 5/7] Added slider fading to hit animations --- src/itdelatrisu/opsu/GameData.java | 89 ++++++++++++++++++- src/itdelatrisu/opsu/objects/Slider.java | 2 +- .../opsu/objects/curves/Curve.java | 6 +- 3 files changed, 90 insertions(+), 7 deletions(-) diff --git a/src/itdelatrisu/opsu/GameData.java b/src/itdelatrisu/opsu/GameData.java index 4bcf47dc..1e644ec0 100644 --- a/src/itdelatrisu/opsu/GameData.java +++ b/src/itdelatrisu/opsu/GameData.java @@ -24,6 +24,7 @@ import itdelatrisu.opsu.audio.SoundController; import itdelatrisu.opsu.audio.SoundEffect; import itdelatrisu.opsu.downloads.Updater; import itdelatrisu.opsu.objects.HitResultType; +import itdelatrisu.opsu.objects.curves.Curve; import itdelatrisu.opsu.replay.Replay; import itdelatrisu.opsu.replay.ReplayFrame; @@ -45,6 +46,9 @@ public class GameData { /** Delta multiplier for steady HP drain. */ public static final float HP_DRAIN_MULTIPLIER = 1 / 200f; + /** Time, in milliseconds, for a hit result to remain existent. */ + public static final int HITRESULT_TIME = 833; + /** Time, in milliseconds, for a hit result to fade. */ public static final int HITRESULT_FADE_TIME = 500; @@ -243,6 +247,9 @@ public class GameData { /** Alpha level (for fading out). */ public float alpha = 1f; + /** Slider curve. */ + public Curve curve; + /** * Constructor. * @param time the result's starting track position @@ -260,6 +267,25 @@ public class GameData { this.color = color; this.hitResultType = hitResultType; } + + /** + * Constructor. + * @param time the result's starting track position + * @param result the hit result (HIT_* constants) + * @param x the center x coordinate + * @param y the center y coordinate + * @param color the color of the hit object + * @param curve the slider curve + */ + public OsuHitObjectResult(int time, int result, float x, float y, Color color, HitResultType hitResultType, Curve curve) { + this.time = time; + this.result = result; + this.x = x; + this.y = y; + this.color = color; + this.hitResultType = hitResultType; + this.curve = curve; + } } /** Current game score. */ @@ -838,7 +864,7 @@ public class GameData { Iterator iter = hitResultList.iterator(); while (iter.hasNext()) { OsuHitObjectResult hitResult = iter.next(); - if (hitResult.time + HITRESULT_FADE_TIME > trackPosition) { + if (hitResult.time + HITRESULT_TIME > trackPosition) { // spinner if (hitResult.hitResultType == HitResultType.SPINNER && hitResult.result != HIT_MISS) { Image spinnerOsu = GameImage.SPINNER_OSU.getImage(); @@ -874,6 +900,17 @@ public class GameData { HITCIRCLE_FADE_TIME ); + if (hitResult.curve != null) { + float oldAlpha = Utils.COLOR_WHITE_FADE.a; + + Curve curve = hitResult.curve; + Utils.COLOR_WHITE_FADE.a = alpha; + curve.color.a = alpha; + curve.draw(); + + Utils.COLOR_WHITE_FADE.a = oldAlpha; + } + Image scaledHitCircle = GameImage.HITCIRCLE.getImage().getScaledCopy(scale); scaledHitCircle.setAlpha(alpha); Image scaledHitCircleOverlay = GameImage.HITCIRCLE_OVERLAY.getImage().getScaledCopy(scale); @@ -1185,8 +1222,9 @@ public class GameData { * @param hitObject the hit object * @param repeat the current repeat number (for sliders, or 0 otherwise) * @param hitResultType the type of hit object for the result + * @return was this a perfect hit? */ - public void hitResult(int time, int result, float x, float y, Color color, + private boolean hitRes(int time, int result, float x, float y, Color color, boolean end, OsuHitObject hitObject, int repeat, HitResultType hitResultType) { int hitValue = 0; boolean perfectHit = false; @@ -1208,11 +1246,12 @@ public class GameData { case HIT_MISS: hitValue = 0; changeHealth(-10f); + changeHealth(-10f); comboEnd |= 2; resetComboStreak(); break; default: - return; + return false; } if (hitValue > 0) { SoundController.playHitSound( @@ -1253,6 +1292,25 @@ public class GameData { comboEnd = 0; } + return perfectHit; + } + + /** + * Handles a hit result. + * @param time the object start time + * @param result the hit result (HIT_* constants) + * @param x the x coordinate + * @param y the y coordinate + * @param color the combo color + * @param end true if this is the last hit object in the combo + * @param hitObject the hit object + * @param repeat the current repeat number (for sliders, or 0 otherwise) + * @param hitResultType the type of hit object for the result + */ + public void hitResult(int time, int result, float x, float y, Color color, + boolean end, OsuHitObject hitObject, int repeat, HitResultType hitResultType) { + boolean perfectHit = hitRes(time, result, x, y, color, end, hitObject, repeat, hitResultType); + if (perfectHit && !Options.isPerfectHitBurstEnabled()) ; // hide perfect hit results else if (result == HIT_MISS && (GameMod.RELAX.isActive() || GameMod.AUTOPILOT.isActive())) @@ -1261,6 +1319,31 @@ public class GameData { hitResultList.add(new OsuHitObjectResult(time, result, x, y, color, hitResultType)); } + /** + * Handles a slider hit result. + * @param time the object start time + * @param result the hit result (HIT_* constants) + * @param x the x coordinate + * @param y the y coordinate + * @param color the combo color + * @param end true if this is the last hit object in the combo + * @param hitObject the hit object + * @param repeat the current repeat number (for sliders, or 0 otherwise) + * @param hitResultType the type of hit object for the result + * @param curve the slider curve + */ + public void hitResult(int time, int result, float x, float y, Color color, + boolean end, OsuHitObject hitObject, int repeat, HitResultType hitResultType, Curve curve) { + boolean perfectHit = hitRes(time, result, x, y, color, end, hitObject, repeat, hitResultType); + + if (perfectHit && !Options.isPerfectHitBurstEnabled()) + ; // hide perfect hit results + else if (result == HIT_MISS && (GameMod.RELAX.isActive() || GameMod.AUTOPILOT.isActive())) + ; // "relax" and "autopilot" mods: hide misses + else + hitResultList.add(new OsuHitObjectResult(time, result, x, y, color, hitResultType, curve)); + } + /** * Returns a ScoreData object encapsulating all game data. * If score data already exists, the existing object will be returned diff --git a/src/itdelatrisu/opsu/objects/Slider.java b/src/itdelatrisu/opsu/objects/Slider.java index 0d470a08..2dbd40b3 100644 --- a/src/itdelatrisu/opsu/objects/Slider.java +++ b/src/itdelatrisu/opsu/objects/Slider.java @@ -281,7 +281,7 @@ public class Slider implements HitObject { float[] lastPos = curve.pointAt(1); data.hitResult(hitObject.getTime() + (int) sliderTimeTotal, result, x, y, color, comboEnd, hitObject, currentRepeats + 1, - currentRepeats % 2 == 0 ? HitResultType.SLIDEREND_FIRSTOBJECT : HitResultType.SLIDEREND); + currentRepeats % 2 == 0 ? HitResultType.SLIDEREND_FIRSTOBJECT : HitResultType.SLIDEREND, curve); data.hitResult(hitObject.getTime() + (int) sliderTimeTotal, result, lastPos[0], lastPos[1], color, comboEnd, hitObject, currentRepeats + 1, currentRepeats % 2 == 0 ? HitResultType.SLIDEREND : HitResultType.SLIDEREND_FIRSTOBJECT); diff --git a/src/itdelatrisu/opsu/objects/curves/Curve.java b/src/itdelatrisu/opsu/objects/curves/Curve.java index 028923be..c09de69f 100644 --- a/src/itdelatrisu/opsu/objects/curves/Curve.java +++ b/src/itdelatrisu/opsu/objects/curves/Curve.java @@ -28,12 +28,12 @@ import org.newdawn.slick.Color; * @author fluddokt (https://github.com/fluddokt) */ public abstract class Curve { + /** The color of this curve. */ + public Color color; + /** The associated OsuHitObject. */ protected OsuHitObject hitObject; - /** The color of this curve. */ - protected Color color; - /** The scaled starting x, y coordinates. */ protected float x, y; From 81b8182244acbbae3edb8a35fe1bf55732acadd1 Mon Sep 17 00:00:00 2001 From: Drew Lemmy Date: Tue, 7 Apr 2015 13:44:27 +0100 Subject: [PATCH 6/7] Fixed gekis and katus not being shown on hit results --- src/itdelatrisu/opsu/GameData.java | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/itdelatrisu/opsu/GameData.java b/src/itdelatrisu/opsu/GameData.java index 1e644ec0..a0ae4df7 100644 --- a/src/itdelatrisu/opsu/GameData.java +++ b/src/itdelatrisu/opsu/GameData.java @@ -1222,15 +1222,13 @@ public class GameData { * @param hitObject the hit object * @param repeat the current repeat number (for sliders, or 0 otherwise) * @param hitResultType the type of hit object for the result - * @return was this a perfect hit? + * @return the hit result (HIT_* constants) */ - private boolean hitRes(int time, int result, float x, float y, Color color, + private int hitRes(int time, int result, float x, float y, Color color, boolean end, OsuHitObject hitObject, int repeat, HitResultType hitResultType) { int hitValue = 0; - boolean perfectHit = false; switch (result) { case HIT_300: - perfectHit = true; hitValue = 300; changeHealth(5f); break; @@ -1251,7 +1249,7 @@ public class GameData { resetComboStreak(); break; default: - return false; + return HIT_MISS; } if (hitValue > 0) { SoundController.playHitSound( @@ -1292,7 +1290,7 @@ public class GameData { comboEnd = 0; } - return perfectHit; + return result; } /** @@ -1309,9 +1307,10 @@ public class GameData { */ public void hitResult(int time, int result, float x, float y, Color color, boolean end, OsuHitObject hitObject, int repeat, HitResultType hitResultType) { - boolean perfectHit = hitRes(time, result, x, y, color, end, hitObject, repeat, hitResultType); + result = hitRes(time, result, x, y, color, end, hitObject, repeat, hitResultType); - if (perfectHit && !Options.isPerfectHitBurstEnabled()) + if ((result == HIT_300 || result == HIT_300G || result == HIT_300K) + && !Options.isPerfectHitBurstEnabled()) ; // hide perfect hit results else if (result == HIT_MISS && (GameMod.RELAX.isActive() || GameMod.AUTOPILOT.isActive())) ; // "relax" and "autopilot" mods: hide misses @@ -1334,9 +1333,10 @@ public class GameData { */ public void hitResult(int time, int result, float x, float y, Color color, boolean end, OsuHitObject hitObject, int repeat, HitResultType hitResultType, Curve curve) { - boolean perfectHit = hitRes(time, result, x, y, color, end, hitObject, repeat, hitResultType); + result = hitRes(time, result, x, y, color, end, hitObject, repeat, hitResultType); - if (perfectHit && !Options.isPerfectHitBurstEnabled()) + if ((result == HIT_300 || result == HIT_300G || result == HIT_300K) + && !Options.isPerfectHitBurstEnabled()) ; // hide perfect hit results else if (result == HIT_MISS && (GameMod.RELAX.isActive() || GameMod.AUTOPILOT.isActive())) ; // "relax" and "autopilot" mods: hide misses From f7d6fed0c6b9c1fc495052d7154180fa9fed1611 Mon Sep 17 00:00:00 2001 From: Drew Lemmy Date: Tue, 7 Apr 2015 19:23:54 +0100 Subject: [PATCH 7/7] Final fixes #71 --- src/itdelatrisu/opsu/GameData.java | 1 - src/itdelatrisu/opsu/Utils.java | 18 +++++++++++++++++- .../opsu/objects/HitResultType.java | 2 +- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/itdelatrisu/opsu/GameData.java b/src/itdelatrisu/opsu/GameData.java index a0ae4df7..210b7188 100644 --- a/src/itdelatrisu/opsu/GameData.java +++ b/src/itdelatrisu/opsu/GameData.java @@ -1244,7 +1244,6 @@ public class GameData { case HIT_MISS: hitValue = 0; changeHealth(-10f); - changeHealth(-10f); comboEnd |= 2; resetComboStreak(); break; diff --git a/src/itdelatrisu/opsu/Utils.java b/src/itdelatrisu/opsu/Utils.java index 65678e55..db200ee4 100644 --- a/src/itdelatrisu/opsu/Utils.java +++ b/src/itdelatrisu/opsu/Utils.java @@ -608,10 +608,26 @@ public class Utils { return String.format("%02d:%02d:%02d", seconds / 3600, (seconds / 60) % 60, seconds % 60); } + /** + * Cubic ease out function + * @param t the current time + * @param a the starting position + * @param b the finishing position + * @param d the duration + * @return the eased float + */ public static float easeOut(float t, float a, float b, float d) { return b * ((t = t / d - 1f) * t * t + 1f) + a; } - + + /** + * Fake bounce ease function + * @param t the current time + * @param a the starting position + * @param b the finishing position + * @param d the duration + * @return the eased float + */ public static float easeBounce(float t, float a, float b, float d) { if (t < d / 2) return easeOut(t, a, b, d); diff --git a/src/itdelatrisu/opsu/objects/HitResultType.java b/src/itdelatrisu/opsu/objects/HitResultType.java index 3dea7458..0f7f4311 100644 --- a/src/itdelatrisu/opsu/objects/HitResultType.java +++ b/src/itdelatrisu/opsu/objects/HitResultType.java @@ -2,7 +2,7 @@ package itdelatrisu.opsu.objects; public enum HitResultType { CIRCLE, - SLIDERSTART, + //SLIDERSTART, SLIDERTICK, SLIDEREND, SLIDEREND_FIRSTOBJECT,