Skip to content

Commit

Permalink
[PlaybackSerialiser] Reduced clutter
Browse files Browse the repository at this point in the history
Removed a lot empty slots from the file

- [VirtualInput] Added #isEmpty()
- Fixed currentLine not containing the rough line during serialisation
  • Loading branch information
ScribbleTAS committed Jul 8, 2024
1 parent ab5f91d commit d3a11d8
Show file tree
Hide file tree
Showing 7 changed files with 100 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -90,6 +91,7 @@ protected void serialiseFileCommandNames(List<String> out) {
List<PlaybackFileCommandExtension> 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<String> out) {
Expand Down Expand Up @@ -122,14 +124,17 @@ public BigArrayList<String> serialise(BigArrayList<TickContainer> inputs, long t
currentTick = i;
TickContainer container = inputs.get(i);
serialiseContainer(out, container);
previousTickContainer = container;
}
return out;
}

protected void serialiseContainer(BigArrayList<String> out, TickContainer container) {
currentLine = out.size()-1;
List<String> serialisedKeyboard = serialiseKeyboard(container.getKeyboard());
List<String> serialisedMouse = serialiseMouse(container.getMouse());
List<String> serialisedCameraAngle = serialiseCameraAngle(container.getCameraAngle());
pruneListEndEmpty(serialisedCameraAngle);

PlaybackFileCommandContainer fileCommandsInline = TASmodAPIRegistry.PLAYBACK_FILE_COMMAND.handleOnSerialiseInline(currentTick, container);
PlaybackFileCommandContainer fileCommandsEndline = TASmodAPIRegistry.PLAYBACK_FILE_COMMAND.handleOnSerialiseEndline(currentTick, container);
Expand Down Expand Up @@ -163,25 +168,42 @@ protected String serialiseFileCommandsInLine(List<PlaybackFileCommand> fileComma

protected List<String> serialiseKeyboard(VirtualKeyboard keyboard) {
List<String> out = new ArrayList<>();
List<VirtualKeyboard> list = keyboard.getAll();
for (VirtualKeyboard subtick : list) {

List<VirtualKeyboard> subticks = new ArrayList<>(keyboard.getAll());
pruneListEndEmptySubtickable(subticks);

for (VirtualKeyboard subtick : subticks) {
out.add(subtick.toString2());
}
return out;
}

protected List<String> serialiseMouse(VirtualMouse mouse) {
List<String> out = new ArrayList<>();
for (VirtualMouse subtick : mouse.getAll()) {

List<VirtualMouse> subticks = new ArrayList<>(mouse.getAll());
pruneListEndEmptySubtickable(subticks);

for (VirtualMouse subtick : subticks) {
out.add(subtick.toString2());
}
return out;
}

protected List<String> serialiseCameraAngle(VirtualCameraAngle cameraAngle) {

VirtualCameraAngle previousCamera = null;
if(previousTickContainer != null) {
previousCamera = previousTickContainer.getCameraAngle();
}

List<String> out = new ArrayList<>();
for (VirtualCameraAngle subtick : cameraAngle.getAll()) {
out.add(subtick.toString2());

if(!subtick.equals(previousCamera))
out.add(subtick.toString2());

previousCamera = subtick;
}
return out;
}
Expand Down Expand Up @@ -588,7 +610,7 @@ protected void deserialiseContainer(BigArrayList<TickContainer> out, List<String

splitInputs(containerLines, keyboardStrings, mouseStrings, cameraAngleStrings, endlineComments, endlineFileCommands);

pruneListEnd(endlineComments);
pruneListEndNull(endlineComments);

VirtualKeyboard keyboard = deserialiseKeyboard(keyboardStrings);
VirtualMouse mouse = deserialiseMouse(mouseStrings);
Expand Down Expand Up @@ -819,18 +841,28 @@ protected Float deserialiseRelativeFloat(String name, String floatstring, Float

protected void splitInputs(List<String> lines, List<String> serialisedKeyboard, List<String> serialisedMouse, List<String> serialisedCameraAngle, List<String> commentsAtEnd, List<List<PlaybackFileCommand>> 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));
}
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<PlaybackFileCommand> deserialisedFileCommands = new ArrayList<>();
Expand Down Expand Up @@ -926,12 +958,12 @@ public static <T extends Serializable> void addAll(BigArrayList<T> list, List<T>
}

/**
* Empties the list if it only consists of null values
* Empties the list starting from the back if the values are null
*
* @param <T> The element of the list
* @param list The list to prune
*/
protected <T> void pruneListEnd(List<T> list) {
protected <T> void pruneListEndNull(List<T> list) {
List<T> copy = new ArrayList<>(list);
for (int i = copy.size() - 1; i >= 0; i--) {
T element = copy.get(i);
Expand All @@ -940,6 +972,39 @@ protected <T> void pruneListEnd(List<T> list) {
list.remove(list.size() - 1);
}
}

/**
* Empties the list starting from the back if the values are empty
*
* @param <T> The element of the list
* @param list The list to prune
*/
protected void pruneListEndEmpty(List<String> list) {
List<String> 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 <T> The element of the list
* @param list The list to prune
*/
protected <T extends Subtickable<T>> void pruneListEndEmptySubtickable(List<T> list) {
List<T> 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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,8 @@ protected boolean isIgnoreFirstUpdate() {
protected void resetFirstUpdate() {
ignoreFirstUpdate = true;
}

public boolean isEmpty() {
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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) ;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -389,4 +389,8 @@ public boolean equals(Object obj) {
public List<Character> getCharList() {
return ImmutableList.copyOf(charList);
}

public boolean isEmpty() {
return super.isEmpty() && charList.isEmpty();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ public String[] getFileCommandNames() {

List<String> expected = new ArrayList<>();
expected.add("FileCommand-Extensions: tasmod_testFileCommand");
expected.add("");

assertIterableEquals(expected, actual);
}
Expand Down

0 comments on commit d3a11d8

Please sign in to comment.