From d3a11d876a929be79c09fbe4de875fd606a7d74a Mon Sep 17 00:00:00 2001 From: Scribble Date: Mon, 8 Jul 2024 23:03:47 +0200 Subject: [PATCH] [PlaybackSerialiser] Reduced clutter Removed a lot empty slots from the file - [VirtualInput] Added #isEmpty() - Fixed currentLine not containing the rough line during serialisation --- .../tasfile/flavor/SerialiserFlavorBase.java | 81 +++++++++++++++++-- .../tasmod/virtual/Subtickable.java | 4 + .../tasmod/virtual/VirtualCameraAngle.java | 5 ++ .../tasmod/virtual/VirtualKeyboard.java | 4 + .../tasmod/virtual/VirtualMouse.java | 5 ++ .../tasmod/virtual/VirtualPeripheral.java | 8 ++ .../tasfile/SerialiserFlavorBaseTest.java | 1 + 7 files changed, 100 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/minecrafttas/tasmod/playback/tasfile/flavor/SerialiserFlavorBase.java b/src/main/java/com/minecrafttas/tasmod/playback/tasfile/flavor/SerialiserFlavorBase.java index 94d153f3..b679bed3 100644 --- a/src/main/java/com/minecrafttas/tasmod/playback/tasfile/flavor/SerialiserFlavorBase.java +++ b/src/main/java/com/minecrafttas/tasmod/playback/tasfile/flavor/SerialiserFlavorBase.java @@ -21,6 +21,7 @@ import com.minecrafttas.tasmod.playback.metadata.PlaybackMetadata; import com.minecrafttas.tasmod.playback.tasfile.exception.PlaybackLoadException; import com.minecrafttas.tasmod.registries.TASmodAPIRegistry; +import com.minecrafttas.tasmod.virtual.Subtickable; import com.minecrafttas.tasmod.virtual.VirtualCameraAngle; import com.minecrafttas.tasmod.virtual.VirtualKey; import com.minecrafttas.tasmod.virtual.VirtualKeyboard; @@ -90,6 +91,7 @@ protected void serialiseFileCommandNames(List out) { List extensionList = TASmodAPIRegistry.PLAYBACK_FILE_COMMAND.getEnabled(); extensionList.forEach(extension -> stringlist.add(extension.getExtensionName())); out.add("FileCommand-Extensions: " + String.join(", ", stringlist)); + out.add(""); } protected void serialiseMetadata(List out) { @@ -122,14 +124,17 @@ public BigArrayList serialise(BigArrayList inputs, long t currentTick = i; TickContainer container = inputs.get(i); serialiseContainer(out, container); + previousTickContainer = container; } return out; } protected void serialiseContainer(BigArrayList out, TickContainer container) { + currentLine = out.size()-1; List serialisedKeyboard = serialiseKeyboard(container.getKeyboard()); List serialisedMouse = serialiseMouse(container.getMouse()); List serialisedCameraAngle = serialiseCameraAngle(container.getCameraAngle()); + pruneListEndEmpty(serialisedCameraAngle); PlaybackFileCommandContainer fileCommandsInline = TASmodAPIRegistry.PLAYBACK_FILE_COMMAND.handleOnSerialiseInline(currentTick, container); PlaybackFileCommandContainer fileCommandsEndline = TASmodAPIRegistry.PLAYBACK_FILE_COMMAND.handleOnSerialiseEndline(currentTick, container); @@ -163,8 +168,11 @@ protected String serialiseFileCommandsInLine(List fileComma protected List serialiseKeyboard(VirtualKeyboard keyboard) { List out = new ArrayList<>(); - List list = keyboard.getAll(); - for (VirtualKeyboard subtick : list) { + + List subticks = new ArrayList<>(keyboard.getAll()); + pruneListEndEmptySubtickable(subticks); + + for (VirtualKeyboard subtick : subticks) { out.add(subtick.toString2()); } return out; @@ -172,16 +180,30 @@ protected List serialiseKeyboard(VirtualKeyboard keyboard) { protected List serialiseMouse(VirtualMouse mouse) { List out = new ArrayList<>(); - for (VirtualMouse subtick : mouse.getAll()) { + + List subticks = new ArrayList<>(mouse.getAll()); + pruneListEndEmptySubtickable(subticks); + + for (VirtualMouse subtick : subticks) { out.add(subtick.toString2()); } return out; } protected List serialiseCameraAngle(VirtualCameraAngle cameraAngle) { + + VirtualCameraAngle previousCamera = null; + if(previousTickContainer != null) { + previousCamera = previousTickContainer.getCameraAngle(); + } + List out = new ArrayList<>(); for (VirtualCameraAngle subtick : cameraAngle.getAll()) { - out.add(subtick.toString2()); + + if(!subtick.equals(previousCamera)) + out.add(subtick.toString2()); + + previousCamera = subtick; } return out; } @@ -588,7 +610,7 @@ protected void deserialiseContainer(BigArrayList out, List lines, List serialisedKeyboard, List serialisedMouse, List serialisedCameraAngle, List commentsAtEnd, List> endlineFileCommands) { + String previousCamera = null; + if(previousTickContainer != null) { + previousCamera = previousTickContainer.getCameraAngle().toString2(); + } + for (String line : lines) { - Matcher tickMatcher = extract("^\\t?\\d+\\|(.*?)\\|(.*?)\\|(\\S*)\\s?", line); + if (tickMatcher.find()) { if (!tickMatcher.group(1).isEmpty()) { serialisedKeyboard.add(tickMatcher.group(1)); @@ -829,8 +856,13 @@ protected void splitInputs(List lines, List serialisedKeyboard, if (!tickMatcher.group(2).isEmpty()) { serialisedMouse.add(tickMatcher.group(2)); } + if (!tickMatcher.group(3).isEmpty()) { serialisedCameraAngle.add(tickMatcher.group(3)); + previousCamera = tickMatcher.group(3); + } else { + if(previousCamera!=null) + serialisedCameraAngle.add(previousCamera); } List deserialisedFileCommands = new ArrayList<>(); @@ -926,12 +958,12 @@ public static void addAll(BigArrayList list, List } /** - * Empties the list if it only consists of null values + * Empties the list starting from the back if the values are null * * @param The element of the list * @param list The list to prune */ - protected void pruneListEnd(List list) { + protected void pruneListEndNull(List list) { List copy = new ArrayList<>(list); for (int i = copy.size() - 1; i >= 0; i--) { T element = copy.get(i); @@ -940,6 +972,39 @@ protected void pruneListEnd(List list) { list.remove(list.size() - 1); } } + + /** + * Empties the list starting from the back if the values are empty + * + * @param The element of the list + * @param list The list to prune + */ + protected void pruneListEndEmpty(List list) { + List copy = new ArrayList<>(list); + for (int i = copy.size() - 1; i >= 0; i--) { + String element = copy.get(i); + if (!element.isEmpty()) + return; + list.remove(list.size() - 1); + } + } + + /** + * Empties the list starting from the back if the values are empty + * + * @param The element of the list + * @param list The list to prune + */ + protected > void pruneListEndEmptySubtickable(List list) { + List copy = new ArrayList<>(list); + for (int i = copy.size() - 1; i >= 0; i--) { + T element = copy.get(i); + if (!element.isEmpty()) + return; + list.remove(list.size() - 1); + } + } + @Override public abstract SerialiserFlavorBase clone(); diff --git a/src/main/java/com/minecrafttas/tasmod/virtual/Subtickable.java b/src/main/java/com/minecrafttas/tasmod/virtual/Subtickable.java index 56a0873e..6e5b407d 100644 --- a/src/main/java/com/minecrafttas/tasmod/virtual/Subtickable.java +++ b/src/main/java/com/minecrafttas/tasmod/virtual/Subtickable.java @@ -98,4 +98,8 @@ protected boolean isIgnoreFirstUpdate() { protected void resetFirstUpdate() { ignoreFirstUpdate = true; } + + public boolean isEmpty() { + return true; + } } diff --git a/src/main/java/com/minecrafttas/tasmod/virtual/VirtualCameraAngle.java b/src/main/java/com/minecrafttas/tasmod/virtual/VirtualCameraAngle.java index 021ed975..7150e056 100644 --- a/src/main/java/com/minecrafttas/tasmod/virtual/VirtualCameraAngle.java +++ b/src/main/java/com/minecrafttas/tasmod/virtual/VirtualCameraAngle.java @@ -232,4 +232,9 @@ public Float getPitch() { public Float getYaw() { return yaw; } + + @Override + public boolean isEmpty() { + return super.isEmpty() && (pitch == null || pitch == 0) && (yaw == null || yaw == 0) ; + } } diff --git a/src/main/java/com/minecrafttas/tasmod/virtual/VirtualKeyboard.java b/src/main/java/com/minecrafttas/tasmod/virtual/VirtualKeyboard.java index cee04f72..f99cba45 100644 --- a/src/main/java/com/minecrafttas/tasmod/virtual/VirtualKeyboard.java +++ b/src/main/java/com/minecrafttas/tasmod/virtual/VirtualKeyboard.java @@ -389,4 +389,8 @@ public boolean equals(Object obj) { public List getCharList() { return ImmutableList.copyOf(charList); } + + public boolean isEmpty() { + return super.isEmpty() && charList.isEmpty(); + } } diff --git a/src/main/java/com/minecrafttas/tasmod/virtual/VirtualMouse.java b/src/main/java/com/minecrafttas/tasmod/virtual/VirtualMouse.java index b0bdb8bd..8398a231 100644 --- a/src/main/java/com/minecrafttas/tasmod/virtual/VirtualMouse.java +++ b/src/main/java/com/minecrafttas/tasmod/virtual/VirtualMouse.java @@ -352,4 +352,9 @@ public int getCursorX() { public int getCursorY() { return cursorY; } + + @Override + public boolean isEmpty() { + return super.isEmpty() && scrollWheel == 0 && cursorX == 0 && cursorY == 0; + } } diff --git a/src/main/java/com/minecrafttas/tasmod/virtual/VirtualPeripheral.java b/src/main/java/com/minecrafttas/tasmod/virtual/VirtualPeripheral.java index 32a90dfc..49f4c2b7 100644 --- a/src/main/java/com/minecrafttas/tasmod/virtual/VirtualPeripheral.java +++ b/src/main/java/com/minecrafttas/tasmod/virtual/VirtualPeripheral.java @@ -180,4 +180,12 @@ protected void deepCopyFrom(T peripheral) { this.subtickList.addAll(peripheral.subtickList); } + @Override + public boolean isEmpty() { + boolean flag = pressedKeys.isEmpty(); + if(pressedKeys.size() == 1) { + flag = pressedKeys.contains(VirtualKey.ZERO.getKeycode()) || pressedKeys.contains(VirtualKey.MOUSEMOVED.getKeycode()); + } + return super.isEmpty() && flag; + } } diff --git a/src/test/java/tasmod/playback/tasfile/SerialiserFlavorBaseTest.java b/src/test/java/tasmod/playback/tasfile/SerialiserFlavorBaseTest.java index 7768a641..77f19fc3 100644 --- a/src/test/java/tasmod/playback/tasfile/SerialiserFlavorBaseTest.java +++ b/src/test/java/tasmod/playback/tasfile/SerialiserFlavorBaseTest.java @@ -186,6 +186,7 @@ public String[] getFileCommandNames() { List expected = new ArrayList<>(); expected.add("FileCommand-Extensions: tasmod_testFileCommand"); + expected.add(""); assertIterableEquals(expected, actual); }