From 4409d538fd2e588c0b153d0d03c2912673748093 Mon Sep 17 00:00:00 2001 From: yugecin Date: Fri, 30 Sep 2016 23:51:28 +0200 Subject: [PATCH] Show mirrored results for hitcircles --- src/itdelatrisu/opsu/objects/Circle.java | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/itdelatrisu/opsu/objects/Circle.java b/src/itdelatrisu/opsu/objects/Circle.java index 228347dd..d0dad808 100644 --- a/src/itdelatrisu/opsu/objects/Circle.java +++ b/src/itdelatrisu/opsu/objects/Circle.java @@ -187,8 +187,18 @@ public class Circle extends GameObject { boolean isAutoMod = GameMod.AUTO.isActive(); if (trackPosition > time + hitResultOffset[GameData.HIT_50]) { - if (isAutoMod) // "auto" mod: catch any missed notes due to lag + if (isAutoMod) {// "auto" mod: catch any missed notes due to lag data.hitResult(time, GameData.HIT_300, x, y, color, comboEnd, hitObject, HitObjectType.CIRCLE, true, 0, null, false); + if (Dancer.mirror) { + double dx = x - Options.width / 2d; + double dy = y - Options.height / 2d; + double ang = Math.atan2(dy, dx); + double d = -Math.sqrt(dx * dx + dy * dy); + float nx = (float) (Options.width / 2d + Math.cos(ang) * d); + float ny = (float) (Options.height / 2d + Math.sin(ang) * d); + data.hitResult(time, GameData.HIT_300, nx, ny, mirrorColor, comboEnd, hitObject, HitObjectType.CIRCLE, true, 0, null, false); + } + } else // no more points can be scored, so send a miss data.hitResult(trackPosition, GameData.HIT_MISS, x, y, null, comboEnd, hitObject, HitObjectType.CIRCLE, true, 0, null, false); @@ -199,6 +209,15 @@ public class Circle extends GameObject { else if (isAutoMod) { if (Math.abs(trackPosition - time) < hitResultOffset[GameData.HIT_300]) { data.hitResult(time, GameData.HIT_300, x, y, color, comboEnd, hitObject, HitObjectType.CIRCLE, true, 0, null, false); + if (Dancer.mirror) { + double dx = x - Options.width / 2d; + double dy = y - Options.height / 2d; + double ang = Math.atan2(dy, dx); + double d = -Math.sqrt(dx * dx + dy * dy); + float nx = (float) (Options.width / 2d + Math.cos(ang) * d); + float ny = (float) (Options.height / 2d + Math.sin(ang) * d); + data.hitResult(time, GameData.HIT_300, nx, ny, mirrorColor, comboEnd, hitObject, HitObjectType.CIRCLE, true, 0, null, false); + } return true; } }