From 14d88f38bf7eeb5a61d436e6db263c94f17bef99 Mon Sep 17 00:00:00 2001 From: Awlex Date: Sun, 20 Nov 2016 13:49:40 +0100 Subject: [PATCH] The model is now working and downwards compatible --- src/awlex/ospu/polymover/ArcMover.java | 6 +++++- src/awlex/ospu/polymover/LineMover.java | 11 +++++++++++ src/awlex/ospu/polymover/PolyMover.java | 2 ++ src/awlex/ospu/polymover/factory/ArcFactory.java | 5 ++--- .../ospu/polymover/factory/PolyMoverFactory.java | 12 ++++++------ src/yugecin/opsudance/Dancer.java | 2 +- 6 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/awlex/ospu/polymover/ArcMover.java b/src/awlex/ospu/polymover/ArcMover.java index c920a8da..b671cb08 100644 --- a/src/awlex/ospu/polymover/ArcMover.java +++ b/src/awlex/ospu/polymover/ArcMover.java @@ -21,7 +21,6 @@ public class ArcMover implements PolyMover { this.middle = middle; this.p2 = p2; init(); - System.out.println("r: " + r + " xm: " + xm + " ym: " + ym); } private void init() { @@ -99,4 +98,9 @@ public class ArcMover implements PolyMover { } return true; } + + @Override + public GameObject getLastItem() { + return p2; + } } diff --git a/src/awlex/ospu/polymover/LineMover.java b/src/awlex/ospu/polymover/LineMover.java index 6b36244f..2fff650f 100644 --- a/src/awlex/ospu/polymover/LineMover.java +++ b/src/awlex/ospu/polymover/LineMover.java @@ -41,4 +41,15 @@ public class LineMover implements PolyMover { return objects; } + @Override + public GameObject getLastItem() { + int i = objects.length - 1; + while (i > 0) { + if (objects[i] != null) { + break; + } + i--; + } + return objects[i]; + } } diff --git a/src/awlex/ospu/polymover/PolyMover.java b/src/awlex/ospu/polymover/PolyMover.java index 39d25267..316b6db9 100644 --- a/src/awlex/ospu/polymover/PolyMover.java +++ b/src/awlex/ospu/polymover/PolyMover.java @@ -10,4 +10,6 @@ public interface PolyMover { double[] getPointAt(int time); GameObject[] getItems(); + + GameObject getLastItem(); } \ No newline at end of file diff --git a/src/awlex/ospu/polymover/factory/ArcFactory.java b/src/awlex/ospu/polymover/factory/ArcFactory.java index 3a85c624..91885ea2 100644 --- a/src/awlex/ospu/polymover/factory/ArcFactory.java +++ b/src/awlex/ospu/polymover/factory/ArcFactory.java @@ -16,8 +16,7 @@ public class ArcFactory extends PolyMoverFactory { private static final int PREFFERED_BUFFER_SIZE = 3; public void init(GameObject[] objects, int count) { - System.out.println("count: " + count); - if (count < 3 || !ArcMover.canCricleExistBetweenItems(objects[0], objects[1], objects[2])) + if (count < 3 || (!ArcMover.canCricleExistBetweenItems(objects[0], objects[1], objects[2]))) addMover(new LineMover(objects, 3)); else addMover(new ArcMover(objects[0], objects[1], objects[2])); @@ -30,7 +29,7 @@ public class ArcFactory extends PolyMoverFactory { @Override public int getMinBufferSize() { - return ArcMover.ITEMS_NEEDED; + return LineMover.ITEMS_NEEDED; } @Override diff --git a/src/awlex/ospu/polymover/factory/PolyMoverFactory.java b/src/awlex/ospu/polymover/factory/PolyMoverFactory.java index 90bee837..d275fe7c 100644 --- a/src/awlex/ospu/polymover/factory/PolyMoverFactory.java +++ b/src/awlex/ospu/polymover/factory/PolyMoverFactory.java @@ -4,7 +4,9 @@ import awlex.ospu.polymover.LineMover; import awlex.ospu.polymover.PolyMover; import itdelatrisu.opsu.objects.DummyObject; import itdelatrisu.opsu.objects.GameObject; +import yugecin.opsudance.Dancer; +import java.util.Arrays; import java.util.LinkedList; import java.util.List; @@ -28,8 +30,7 @@ public abstract class PolyMoverFactory { double[] ret = new double[2]; int i = 0; while (i < movers.size()) { - GameObject[] items = movers.get(i).getItems(); - if (items[items.length - 1].getEndTime() < time) + if (movers.get(i).getLastItem().getEndTime() < time) break; double[] point = movers.get(i).getPointAt(time); ret[0] += point[0]; @@ -47,17 +48,16 @@ public abstract class PolyMoverFactory { } GameObject[] items = new GameObject[getMaxBufferSize()]; int i = 1; - items[0] = startIndex == -1 ? new DummyObject() : objects[startIndex]; - while (i < items.length - 2) { + items[0] = startIndex == -1 ? Dancer.d : objects[startIndex]; + while (i < items.length - 1) { GameObject g = objects[startIndex + i]; if (g.isSlider() || g.isSpinner()) break; items[i++] = g; } items[i] = objects[startIndex + i]; - i++; latestIndex = startIndex + getMaxBufferSize() + i - items.length; - if (i >= getMinBufferSize()) { + if (++i >= getMinBufferSize()) { init(items, i); } else { diff --git a/src/yugecin/opsudance/Dancer.java b/src/yugecin/opsudance/Dancer.java index 2f05f4c3..bfee92df 100644 --- a/src/yugecin/opsudance/Dancer.java +++ b/src/yugecin/opsudance/Dancer.java @@ -250,6 +250,7 @@ public class Dancer { c.start.set((float) spinnerStartPoint[0], (float) spinnerStartPoint[1]); } } + 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) { @@ -275,7 +276,6 @@ public class Dancer { polyMoverFactory.create(gameObjects, objectIndex - 1); } } - if (time < c.getTime()) { if (!(p.isSpinner() || c.isSpinner())) { double[] point = polyMoverFactory.getPointAt(time);