fix replay hit results

This commit is contained in:
yugecin
2017-12-21 23:55:16 +01:00
parent 35769b31c7
commit 408c162741
4 changed files with 33 additions and 41 deletions

View File

@@ -85,7 +85,9 @@ public class Circle extends GameObject {
@Override
public GameObject clone(GameData data) {
return new Circle(hitObject, game, data, comboColorIndex, comboEnd);
Circle c = new Circle(hitObject, game, data, comboColorIndex, comboEnd);
c.isreplay = true;
return c;
}
@Override
@@ -170,12 +172,13 @@ public class Circle extends GameObject {
return false;
}
private boolean isreplay;
@Override
public boolean update(boolean overlap, int delta, int mouseX, int mouseY, boolean keyPressed, int trackPosition) {
int time = hitObject.getTime();
int[] hitResultOffset = game.getHitResultOffsets();
boolean isAutoMod = GameMod.AUTO.isActive();
boolean isAutoMod = !isreplay && GameMod.AUTO.isActive();
if (trackPosition > time + hitResultOffset[GameData.HIT_50]) {
if (isAutoMod) {// "auto" mod: catch any missed notes due to lag

View File

@@ -191,7 +191,9 @@ public class Slider extends GameObject {
@Override
public GameObject clone(GameData data) {
return new Slider(hitObject, game, data, comboColorIndex, comboEnd);
Slider s = new Slider(hitObject, game, data, comboColorIndex, comboEnd);
s.isreplay = true;
return s;
}
@Override
@@ -627,11 +629,12 @@ public class Slider extends GameObject {
return false;
}
boolean isreplay;
@Override
public boolean update(boolean overlap, int delta, int mouseX, int mouseY, boolean keyPressed, int trackPosition) {
int repeatCount = hitObject.getRepeatCount();
int[] hitResultOffset = game.getHitResultOffsets();
boolean isAutoMod = GameMod.AUTO.isActive();
boolean isAutoMod = !isreplay && GameMod.AUTO.isActive();
if (!sliderClickedInitial) {
int time = hitObject.getTime();

View File

@@ -1558,6 +1558,9 @@ public class Game extends ComplexOpsuState {
}
gameObjects = new GameObject[beatmap.objects.length];
for (ReplayPlayback replayPlayback : replays) {
replayPlayback.gameObjects = new GameObject[gameObjects.length];
}
playbackSpeed = PlaybackSpeed.NORMAL;
// reset game data
@@ -1604,6 +1607,9 @@ public class Game extends ComplexOpsuState {
} else if (hitObject.isSpinner()) {
gameObjects[i] = new Spinner(hitObject, this, data);
}
for (ReplayPlayback replayPlayback : replays) {
replayPlayback.gameObjects[i] = gameObjects[i].clone(replayPlayback.gdata);
}
} catch (Exception e) {
String message = String.format("Failed to create %s at index %d:\n%s", hitObject.getTypeName(), i, hitObject.toString());
Log.error(message, e);
@@ -1718,14 +1724,6 @@ public class Game extends ComplexOpsuState {
}
}
for (ReplayPlayback replayPlayback : replays) {
GameObject[] objs = new GameObject[gameObjects.length];
for (int i = 0; i < objs.length; i++) {
objs[i] = gameObjects[i].clone(replayPlayback.new GData());
}
replayPlayback.setGameObjects(objs);
}
Dancer.instance.setGameObjects(gameObjects);
storyboardOverlay.setGameObjects(gameObjects);
if (!skippedToCheckpoint) {