implement lazy sliders
This commit is contained in:
@@ -19,7 +19,9 @@ package yugecin.opsudance;
|
||||
|
||||
import itdelatrisu.opsu.Options;
|
||||
import itdelatrisu.opsu.Utils;
|
||||
import itdelatrisu.opsu.objects.Circle;
|
||||
import itdelatrisu.opsu.objects.GameObject;
|
||||
import itdelatrisu.opsu.objects.Slider;
|
||||
import itdelatrisu.opsu.objects.curves.Vec2f;
|
||||
import yugecin.opsudance.movers.Mover;
|
||||
import yugecin.opsudance.movers.factories.*;
|
||||
@@ -62,12 +64,17 @@ public class Dancer {
|
||||
public float x;
|
||||
public float y;
|
||||
|
||||
private boolean isCurrentLazySlider;
|
||||
|
||||
public static boolean LAZY_SLIDERS;
|
||||
|
||||
public Dancer() {
|
||||
moverFactory = moverFactories[0];
|
||||
spinner = spinners[0];
|
||||
}
|
||||
|
||||
public void init(String mapname) {
|
||||
isCurrentLazySlider = false;
|
||||
p = null;
|
||||
rand = new Random(mapname.hashCode());
|
||||
dir = 1;
|
||||
@@ -103,6 +110,18 @@ public class Dancer {
|
||||
public void update(int time, GameObject p, GameObject c) {
|
||||
if (this.p != p) {
|
||||
this.p = p;
|
||||
isCurrentLazySlider = false;
|
||||
// detect lazy sliders, should work pretty good
|
||||
if (c.isSlider() && LAZY_SLIDERS && Utils.distance(c.start.x, c.start.y, c.end.x , c.end.y) <= Circle.diameter * 0.8f) {
|
||||
Slider s = (Slider) c;
|
||||
Vec2f mid = s.getCurve().pointAt(1f);
|
||||
if (s.getRepeats() == 1 || Utils.distance(c.start.x, c.start.y, mid.x, mid.y) <= Circle.diameter * 0.8f) {
|
||||
mid = s.getCurve().pointAt(0.5f);
|
||||
if (Utils.distance(c.start.x, c.start.y, mid.x, mid.y) <= Circle.diameter * 0.8f) {
|
||||
isCurrentLazySlider = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (rand.nextInt(2) == 1) {
|
||||
dir *= -1;
|
||||
}
|
||||
@@ -129,6 +148,9 @@ public class Dancer {
|
||||
c.end = new Vec2f(x, y);
|
||||
} else {
|
||||
Vec2f point = c.getPointAt(time);
|
||||
if (isCurrentLazySlider) {
|
||||
point = c.start;
|
||||
}
|
||||
x = point.x;
|
||||
y = point.y;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user