@@ -18,24 +18,29 @@ public abstract class PlaybackFlavorBase {
1818 /**
1919 * The current tick that is being serialised or deserialised
2020 */
21- private int currentTick ;
21+ protected int currentTick ;
2222
2323 public abstract String flavorName ();
2424
2525 public List <String > serialiseHeader (List <PlaybackMetadata > metadataList ) {
2626 List <String > out = new ArrayList <>();
27- out . add ( serialiseFlavorName () );
27+ serialiseFlavorName (out );
2828// out.add(serializeExtensionNames());
29- out . addAll ( serialiseMetadata (metadataList ) );
29+ serialiseMetadata (out , metadataList );
3030 return out ;
3131 }
3232
33- protected String serialiseFlavorName () {
34- return " Flavor:" + flavorName ();
33+ protected void serialiseFlavorName (List < String > out ) {
34+ out . add ( "# Flavor:" + flavorName () );
3535 }
3636
37- public List <String > serialiseMetadata (List <PlaybackMetadata > metadataList ) {
38- return null ;
37+ protected void serialiseMetadata (List <String > out , List <PlaybackMetadata > metadataList ) {
38+ for (PlaybackMetadata metadata : metadataList ) {
39+ out .add ("### " + metadata .getExtensionName ());
40+ for (String value : metadata .toStringList ()) {
41+ out .add ("# " + value );
42+ }
43+ }
3944 }
4045
4146 public BigArrayList <String > serialise (BigArrayList <TickInputContainer > inputs ) {
@@ -44,43 +49,57 @@ public BigArrayList<String> serialise(BigArrayList<TickInputContainer> inputs) {
4449 for (int i = 0 ; i < inputs .size (); i ++) {
4550 currentTick = i ;
4651 TickInputContainer container = inputs .get (i );
47- addAll (out , serialiseContainer ( container ) );
52+ serialiseContainer (out , container );
4853 }
4954 return out ;
5055 }
5156
52- protected List <String > serialiseContainer ( TickInputContainer container ) {
57+ protected void serialiseContainer ( BigArrayList <String > out , TickInputContainer container ) {
5358 List <String > serialisedKeyboard = serialiseKeyboard (container .getKeyboard ());
5459 List <String > serialisedMouse = serialiseMouse (container .getMouse ());
5560 List <String > serialisedCameraAngle = serialiseCameraAngle (container .getCameraAngle ());
5661
57- return mergeInputs (serialisedKeyboard , serialisedMouse , serialisedCameraAngle );
62+ mergeInputs (out , serialisedKeyboard , serialisedMouse , serialisedCameraAngle );
5863 }
5964
60- protected abstract List <String > serialiseKeyboard (VirtualKeyboard keyboard );
61-
62- protected abstract List <String > serialiseMouse (VirtualMouse mouse );
65+ protected List <String > serialiseKeyboard (VirtualKeyboard keyboard ) {
66+ List <String > out = new ArrayList <>();
67+ for (VirtualKeyboard subtick : keyboard .getAll ()) {
68+ out .add (subtick .toString ());
69+ }
70+ return out ;
71+ }
6372
64- protected abstract List <String > serialiseCameraAngle (VirtualCameraAngle cameraAngle );
73+ protected List <String > serialiseMouse (VirtualMouse mouse ) {
74+ List <String > out = new ArrayList <>();
75+ for (VirtualMouse subtick : mouse .getAll ()) {
76+ out .add (subtick .toString ());
77+ }
78+ return out ;
79+ }
6580
66- protected List <String > mergeInputs ( List < String > serialisedKeyboard , List < String > serialisedMouse , List < String > serialisedCameraAngle ) {
81+ protected List <String > serialiseCameraAngle ( VirtualCameraAngle cameraAngle ) {
6782 List <String > out = new ArrayList <>();
68-
83+ for (VirtualCameraAngle subtick : cameraAngle .getAll ()) {
84+ out .add (subtick .toString ());
85+ }
86+ return out ;
87+ }
88+
89+ protected void mergeInputs (BigArrayList <String > out , List <String > serialisedKeyboard , List <String > serialisedMouse , List <String > serialisedCameraAngle ) {
6990 Queue <String > keyboardQueue = new LinkedBlockingQueue <>(serialisedKeyboard );
7091 Queue <String > mouseQueue = new LinkedBlockingQueue <>(serialisedMouse );
7192 Queue <String > cameraAngleQueue = new LinkedBlockingQueue <>(serialisedCameraAngle );
72-
73- while (!keyboardQueue .isEmpty () && !mouseQueue .isEmpty () && !cameraAngleQueue .isEmpty ()) {
93+
94+ while (!keyboardQueue .isEmpty () || !mouseQueue .isEmpty () || !cameraAngleQueue .isEmpty ()) {
7495 String kb = getOrEmpty (keyboardQueue .poll ());
7596 String ms = getOrEmpty (mouseQueue .poll ());
7697 String ca = getOrEmpty (cameraAngleQueue .poll ());
77-
98+
7899 out .add (kb + ms + ca );
79100 }
80-
81- return out ;
82101 }
83-
102+
84103 protected String getOrEmpty (String string ) {
85104 return string == null ? "" : string ;
86105 }
0 commit comments