Update stacking algorythm.
Revert previous commit. Curve should be re-created or updated. No more extra updatePosition() calls.
This commit is contained in:
parent
eadbdbee78
commit
e441d3e4e1
|
@ -455,6 +455,11 @@ public class Slider implements HitObject {
|
||||||
public void updatePosition() {
|
public void updatePosition() {
|
||||||
this.x = hitObject.getScaledX();
|
this.x = hitObject.getScaledX();
|
||||||
this.y = hitObject.getScaledY();
|
this.y = hitObject.getScaledY();
|
||||||
|
|
||||||
|
if (hitObject.getSliderType() == OsuHitObject.SLIDER_PASSTHROUGH && hitObject.getSliderX().length == 2)
|
||||||
|
this.curve = new CircumscribedCircle(hitObject, color);
|
||||||
|
else
|
||||||
|
this.curve = new LinearBezier(hitObject, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -92,6 +92,9 @@ public class Game extends BasicGameState {
|
||||||
/** Stack time window of the previous object in ms. */
|
/** Stack time window of the previous object in ms. */
|
||||||
private static final int STACK_TIMEOUT = 1000;
|
private static final int STACK_TIMEOUT = 1000;
|
||||||
|
|
||||||
|
/** Stack position offset modifier. */
|
||||||
|
private static final float STACK_OFFSET_MODIFIER = 0.05f;
|
||||||
|
|
||||||
/** The associated OsuFile object. */
|
/** The associated OsuFile object. */
|
||||||
private OsuFile osu;
|
private OsuFile osu;
|
||||||
|
|
||||||
|
@ -1109,12 +1112,9 @@ public class Game extends BasicGameState {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// not a special case. stack moves up left
|
// not a special case. stack moves up left
|
||||||
float x1 = hitObjectI.getX();
|
float distance = Utils.distance(hitObjectI.getX(), hitObjectI.getY(),
|
||||||
float y1 = hitObjectI.getY();
|
hitObjectN.getX(), hitObjectN.getY());
|
||||||
float x2 = hitObjectN.getX();
|
if (distance < STACK_LENIENCE) {
|
||||||
float y2 = hitObjectN.getY();
|
|
||||||
float distance = Utils.distance(x1, y1, x2, y2);
|
|
||||||
if (distance < STACK_LENIENCE * OsuHitObject.getXMultiplier()) {
|
|
||||||
hitObjectN.setStack(hitObjectI.getStack() + 1);
|
hitObjectN.setStack(hitObjectI.getStack() + 1);
|
||||||
hitObjectI = hitObjectN;
|
hitObjectI = hitObjectN;
|
||||||
}
|
}
|
||||||
|
@ -1123,8 +1123,10 @@ public class Game extends BasicGameState {
|
||||||
|
|
||||||
// update hit objects positions
|
// update hit objects positions
|
||||||
for (int i = 0; i < hitObjects.length; i++) {
|
for (int i = 0; i < hitObjects.length; i++) {
|
||||||
|
if(osu.objects[i].getStack() != 0) {
|
||||||
hitObjects[i].updatePosition();
|
hitObjects[i].updatePosition();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// load the first timingPoint
|
// load the first timingPoint
|
||||||
if (!osu.timingPoints.isEmpty()) {
|
if (!osu.timingPoints.isEmpty()) {
|
||||||
|
@ -1415,8 +1417,9 @@ public class Game extends BasicGameState {
|
||||||
HPDrainRate = Options.getFixedHP();
|
HPDrainRate = Options.getFixedHP();
|
||||||
|
|
||||||
// Stack modifier scales with hit object size
|
// Stack modifier scales with hit object size
|
||||||
|
// StackOffset = HitObjectRadius / 10
|
||||||
int diameter = (int) (104 - (circleSize * 8));
|
int diameter = (int) (104 - (circleSize * 8));
|
||||||
OsuHitObject.setStackOffset(diameter * 0.05f);
|
OsuHitObject.setStackOffset(diameter * STACK_OFFSET_MODIFIER);
|
||||||
|
|
||||||
// initialize objects
|
// initialize objects
|
||||||
Circle.init(container, circleSize);
|
Circle.init(container, circleSize);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user