diff --git a/pom.xml b/pom.xml index 57346244..bfd098be 100644 --- a/pom.xml +++ b/pom.xml @@ -36,8 +36,8 @@ maven-compiler-plugin 3.2 - 1.7 - 1.7 + 1.8 + 1.8 UTF-8 diff --git a/src/awlex/ospu/polymover/factory/PolyMoverFactory.java b/src/awlex/ospu/polymover/factory/PolyMoverFactory.java index d275fe7c..5548ca43 100644 --- a/src/awlex/ospu/polymover/factory/PolyMoverFactory.java +++ b/src/awlex/ospu/polymover/factory/PolyMoverFactory.java @@ -2,18 +2,18 @@ package awlex.ospu.polymover.factory; 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 yugecin.opsudance.movers.Mover; +import yugecin.opsudance.movers.factories.MoverFactory; -import java.util.Arrays; import java.util.LinkedList; import java.util.List; /** * Created by Awlex on 18.11.2016. */ -public abstract class PolyMoverFactory { +public abstract class PolyMoverFactory implements MoverFactory { private LinkedList movers; private int latestIndex; @@ -42,6 +42,16 @@ public abstract class PolyMoverFactory { return ret; } + @Override + public Mover create(GameObject start, GameObject end, int dir) { + throw new UnsupportedOperationException("Polymovers should use the create variant with all the gameobjects + startindex"); + } + + @Override + public boolean isMultiPoint() { + return true; + } + public final void create(GameObject[] objects, int startIndex) { if (latestIndex <= startIndex) { movers.clear(); diff --git a/src/itdelatrisu/opsu/Options.java b/src/itdelatrisu/opsu/Options.java index 4f25512a..f5cbed58 100644 --- a/src/itdelatrisu/opsu/Options.java +++ b/src/itdelatrisu/opsu/Options.java @@ -595,51 +595,31 @@ public class Options { DISABLE_UPDATER ("Disable Automatic Updates", "DisableUpdater", "Disable automatic checking for updates upon starting opsu!.", false), ENABLE_WATCH_SERVICE ("Enable Watch Service", "WatchService", "Watch the beatmap directory for changes. Requires a restart.", false), - DANCE_MOVER_TYPE("Mover Type", "Mover type", "More than 2 Points", Dancer.multipoint) { - @Override - public void click(GameContainer container) { - bool = !bool; - Dancer.multipoint = bool; - } - - @Override - public void read(String s) { - super.read(s); - Dancer.multipoint = bool; - } - }, - DANCE_MOVER ("Mover algorithm", "Mover", "Algorithm that decides how to move from note to note" ) { @Override public Object[] getListItems() { - return Dancer.multipoint ? Dancer.polyMoverFactories : Dancer.moverFactories; + return Dancer.moverFactories; } @Override public void clickListItem(int index) { - if (Dancer.multipoint) - Dancer.instance.setPolyMoverFactoryIndex(index); - else - Dancer.instance.setMoverFactoryIndex(index); + Dancer.instance.setMoverFactoryIndex(index); } @Override public String getValueString() { - return Dancer.multipoint ? Dancer.polyMoverFactories[Dancer.instance.getPolyMoverFactoryIndex()].toString() : Dancer.moverFactories[Dancer.instance.getMoverFactoryIndex()].toString(); + return Dancer.moverFactories[Dancer.instance.getMoverFactoryIndex()].toString(); } @Override public String write() { - return String.valueOf(Dancer.multipoint ? Dancer.instance.getPolyMoverFactoryIndex() : Dancer.instance.getMoverFactoryIndex()); + return String.valueOf(Dancer.instance.getMoverFactoryIndex()); } @Override public void read(String s) { int i = Integer.parseInt(s); - if (Dancer.multipoint) - Dancer.instance.setPolyMoverFactoryIndex(i); - else - Dancer.instance.setMoverFactoryIndex(i); + Dancer.instance.setMoverFactoryIndex(i); } }, diff --git a/src/itdelatrisu/opsu/states/Game.java b/src/itdelatrisu/opsu/states/Game.java index d3968678..ccb4f1f9 100644 --- a/src/itdelatrisu/opsu/states/Game.java +++ b/src/itdelatrisu/opsu/states/Game.java @@ -424,11 +424,7 @@ public class Game extends BasicGameState { autoMousePressed = false; if (GameMod.AUTO.isActive() || GameMod.AUTOPILOT.isActive()) { Vec2f autoPoint; - int lastObjectForDancer = beatmap.objects.length; - if (Dancer.multipoint) { - lastObjectForDancer -= Dancer.polyMoverFactories[Dancer.instance.getPolyMoverFactoryIndex()].getMinBufferSize(); - } - if (objectIndex < lastObjectForDancer) { + if (objectIndex < beatmap.objects.length - Dancer.instance.getPolyMoverFactoryMinBufferSize()) { Dancer d = Dancer.instance; d.update(trackPosition, objectIndex); autoPoint = new Vec2f(d.x, d.y); diff --git a/src/itdelatrisu/opsu/states/OptionsMenu.java b/src/itdelatrisu/opsu/states/OptionsMenu.java index a034db01..8478095c 100644 --- a/src/itdelatrisu/opsu/states/OptionsMenu.java +++ b/src/itdelatrisu/opsu/states/OptionsMenu.java @@ -112,7 +112,6 @@ public class OptionsMenu extends BasicGameState { GameOption.ENABLE_WATCH_SERVICE }), DANCE ("Dance", new GameOption[] { - GameOption.DANCE_MOVER_TYPE, GameOption.DANCE_MOVER, GameOption.DANCE_MOVER_DIRECTION, GameOption.DANCE_SLIDER_MOVER_TYPE, diff --git a/src/yugecin/opsudance/Dancer.java b/src/yugecin/opsudance/Dancer.java index ce57a2b8..43ed9c9c 100644 --- a/src/yugecin/opsudance/Dancer.java +++ b/src/yugecin/opsudance/Dancer.java @@ -19,6 +19,7 @@ package yugecin.opsudance; import awlex.ospu.movers.factories.CenterSpiralMoverFactory; import awlex.ospu.movers.factories.SpiralMoverFactory; +import awlex.ospu.polymover.PolyMover; import awlex.ospu.polymover.factory.ArcFactory; import awlex.ospu.polymover.factory.LinearFactory; import awlex.ospu.polymover.factory.PolyMoverFactory; @@ -52,6 +53,8 @@ public class Dancer { new QuartCircleMoverFactory(), new SpiralMoverFactory(), new CenterSpiralMoverFactory(), + new LinearFactory(), + new ArcFactory(), }; public static Spinner[] spinners = new Spinner[]{ @@ -73,11 +76,6 @@ public class Dancer { new InheritedSliderMoverController(), }; - public static PolyMoverFactory[] polyMoverFactories = new PolyMoverFactory[]{ - new LinearFactory(), - new ArcFactory() - }; - public static Dancer instance = new Dancer(); public static boolean multipoint = false; @@ -104,13 +102,11 @@ public class Dancer { private GameObject[] gameObjects; private MoverFactory moverFactory; - private PolyMoverFactory polyMoverFactory; private Mover mover; private Spinner spinner; public static SliderMoverController sliderMoverController; private int moverFactoryIndex; - private int polyMoverFactoryIndex; private int spinnerIndex; public float x; @@ -157,18 +153,14 @@ public class Dancer { } this.moverFactoryIndex = moverFactoryIndex; moverFactory = moverFactories[moverFactoryIndex]; + multipoint = moverFactory.isMultiPoint(); } - public int getPolyMoverFactoryIndex() { - return polyMoverFactoryIndex; - } - - public void setPolyMoverFactoryIndex(int polyMoverFactoryIndex) { - if (polyMoverFactoryIndex < 0 || polyMoverFactoryIndex >= polyMoverFactories.length) { - polyMoverFactoryIndex = 0; + public int getPolyMoverFactoryMinBufferSize() { + if (!multipoint) { + return 0; } - this.polyMoverFactoryIndex = polyMoverFactoryIndex; - polyMoverFactory = polyMoverFactories[polyMoverFactoryIndex]; + return ((PolyMoverFactory) moverFactory).getMinBufferSize(); } public void setGameObjects(GameObject[] objs) { @@ -215,10 +207,11 @@ public class Dancer { } if (multipoint) { - if (polyMoverFactory.isInitialized() && polyMoverFactory.getLatestIndex() < objectIndex + polyMoverFactory.getLatestIndex() - 1) { - polyMoverFactory.update(gameObjects[objectIndex + polyMoverFactory.getMaxBufferSize() - 1]); + PolyMoverFactory pmf = (PolyMoverFactory) moverFactory; + if (pmf.isInitialized() && pmf.getLatestIndex() < objectIndex + pmf.getLatestIndex() - 1) { + pmf.update(gameObjects[objectIndex + pmf.getMaxBufferSize() - 1]); } else { - polyMoverFactory.create(gameObjects, objectIndex - 1); + pmf.create(gameObjects, objectIndex - 1); } } else if (mover == null || mover.getEnd() != c) { if (p == d) { @@ -233,7 +226,7 @@ public class Dancer { if (!p.isSpinner() || !c.isSpinner()) { double[] point; if (multipoint) { - point = polyMoverFactory.getPointAt(time); + point = ((PolyMoverFactory) moverFactory).getPointAt(time); } else { point = mover.getPointAt(time); } diff --git a/src/yugecin/opsudance/movers/factories/MoverFactory.java b/src/yugecin/opsudance/movers/factories/MoverFactory.java index 95423b15..ba190795 100644 --- a/src/yugecin/opsudance/movers/factories/MoverFactory.java +++ b/src/yugecin/opsudance/movers/factories/MoverFactory.java @@ -24,4 +24,8 @@ public interface MoverFactory { Mover create(GameObject start, GameObject end, int dir); + default boolean isMultiPoint() { + return false; + } + }