diff --git a/PCK-Studio/Classes/IO/ARC/ARCFileReader.cs b/PCK-Studio/Classes/IO/ARC/ARCFileReader.cs index b4eb5c65..8d2d0c24 100644 --- a/PCK-Studio/Classes/IO/ARC/ARCFileReader.cs +++ b/PCK-Studio/Classes/IO/ARC/ARCFileReader.cs @@ -6,7 +6,7 @@ using PckStudio.Classes.FileTypes; namespace PckStudio.Classes.IO.ARC { - internal class ARCFileReader : StreamDataReader + internal class ARCFileReader : StreamDataReader { public static ConsoleArchive Read(Stream stream, bool useLittleEndian = false) { @@ -17,7 +17,7 @@ namespace PckStudio.Classes.IO.ARC { } - private ConsoleArchive ReadFromStream(Stream stream) + protected override ConsoleArchive ReadFromStream(Stream stream) { ConsoleArchive _archive = new ConsoleArchive(); int numberOfFiles = ReadInt(stream); diff --git a/PCK-Studio/Classes/IO/ARC/ARCFileWriter.cs b/PCK-Studio/Classes/IO/ARC/ARCFileWriter.cs index 7f3604f9..7c1a9239 100644 --- a/PCK-Studio/Classes/IO/ARC/ARCFileWriter.cs +++ b/PCK-Studio/Classes/IO/ARC/ARCFileWriter.cs @@ -22,7 +22,7 @@ namespace PckStudio.Classes.IO.ARC _archive = archive; } - private void WriteToStream(Stream stream) + protected override void WriteToStream(Stream stream) { WriteInt(stream, _archive.Count); int currentOffset = 4 + _archive.Keys.Sum(key => 10 + key.Length); diff --git a/PCK-Studio/Classes/IO/Behaviour/BehavioursReader.cs b/PCK-Studio/Classes/IO/Behaviour/BehavioursReader.cs index 1501cacc..e3421ac5 100644 --- a/PCK-Studio/Classes/IO/Behaviour/BehavioursReader.cs +++ b/PCK-Studio/Classes/IO/Behaviour/BehavioursReader.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace PckStudio.Classes.IO.Behaviour { - public class BehavioursReader : StreamDataReader + public class BehavioursReader : StreamDataReader { public static BehaviourFile Read(Stream stream, bool useLittleEndian) { @@ -19,7 +19,7 @@ namespace PckStudio.Classes.IO.Behaviour { } - private BehaviourFile ReadFromStream(Stream stream) + protected override BehaviourFile ReadFromStream(Stream stream) { BehaviourFile behaviourFile = new BehaviourFile(); _ = ReadInt(stream); diff --git a/PCK-Studio/Classes/IO/COL/COLFileReader.cs b/PCK-Studio/Classes/IO/COL/COLFileReader.cs index beaec7be..92ac57c5 100644 --- a/PCK-Studio/Classes/IO/COL/COLFileReader.cs +++ b/PCK-Studio/Classes/IO/COL/COLFileReader.cs @@ -5,7 +5,7 @@ using static PckStudio.Classes.FileTypes.COLFile; namespace PckStudio.Classes.IO.COL { - internal class COLFileReader : StreamDataReader + internal class COLFileReader : StreamDataReader { public static COLFile Read(Stream stream) { @@ -15,7 +15,7 @@ namespace PckStudio.Classes.IO.COL private COLFileReader() : base(false) {} - private COLFile ReadFromStream(Stream stream) + protected override COLFile ReadFromStream(Stream stream) { COLFile colourFile = new COLFile(); int has_water_colors = ReadInt(stream); diff --git a/PCK-Studio/Classes/IO/COL/COLFileWriter.cs b/PCK-Studio/Classes/IO/COL/COLFileWriter.cs index 93ad6300..509887fa 100644 --- a/PCK-Studio/Classes/IO/COL/COLFileWriter.cs +++ b/PCK-Studio/Classes/IO/COL/COLFileWriter.cs @@ -7,15 +7,19 @@ namespace PckStudio.Classes.IO.COL { internal class COLFileWriter : StreamDataWriter { + private COLFile colourFile; + public static void Write(Stream stream, COLFile file) { - new COLFileWriter().WriteToStream(stream, file); + new COLFileWriter(file).WriteToStream(stream); } - private COLFileWriter() : base(false) - {} + public COLFileWriter(COLFile file) : base(false) + { + colourFile = file; + } - private void WriteToStream(Stream stream, COLFile colourFile) + protected override void WriteToStream(Stream stream) { WriteInt(stream, Convert.ToInt32(colourFile.waterEntries.Count > 0)); WriteInt(stream, colourFile.entries.Count); diff --git a/PCK-Studio/Classes/IO/CSMB/CSMBFileReader.cs b/PCK-Studio/Classes/IO/CSMB/CSMBFileReader.cs index f57de12c..0ebe928c 100644 --- a/PCK-Studio/Classes/IO/CSMB/CSMBFileReader.cs +++ b/PCK-Studio/Classes/IO/CSMB/CSMBFileReader.cs @@ -4,7 +4,7 @@ using PckStudio.Classes.FileTypes; namespace PckStudio.Classes.IO.CSMB { - internal class CSMBFileReader : StreamDataReader + internal class CSMBFileReader : StreamDataReader { public static CSMBFile Read(Stream stream) { @@ -14,7 +14,7 @@ namespace PckStudio.Classes.IO.CSMB private CSMBFileReader() : base(false) { } - private CSMBFile ReadFromStream(Stream stream) + protected override CSMBFile ReadFromStream(Stream stream) { CSMBFile BinFile = new CSMBFile(); ReadInt(stream); diff --git a/PCK-Studio/Classes/IO/CSMB/CSMBFileWriter.cs b/PCK-Studio/Classes/IO/CSMB/CSMBFileWriter.cs index 2614c1d4..5855c6e0 100644 --- a/PCK-Studio/Classes/IO/CSMB/CSMBFileWriter.cs +++ b/PCK-Studio/Classes/IO/CSMB/CSMBFileWriter.cs @@ -6,18 +6,22 @@ namespace PckStudio.Classes.IO.CSMB { internal class CSMBFileWriter : StreamDataWriter { + CSMBFile _CSMB; public static void Write(Stream stream, CSMBFile file) { - new CSMBFileWriter().WriteToStream(stream, file); + new CSMBFileWriter(file).WriteToStream(stream); } - private CSMBFileWriter() : base(false) - { } - private void WriteToStream(Stream stream, CSMBFile CSMB) + public CSMBFileWriter(CSMBFile csmb) : base(false) + { + _CSMB = csmb; + } + + protected override void WriteToStream(Stream stream) { WriteInt(stream, 0); - WriteInt(stream, CSMB.Parts.Count); - foreach(CSMBPart part in CSMB.Parts) + WriteInt(stream, _CSMB.Parts.Count); + foreach(CSMBPart part in _CSMB.Parts) { WriteString(stream, part.Name); WriteInt(stream, (int)part.Parent); @@ -33,8 +37,8 @@ namespace PckStudio.Classes.IO.CSMB WriteBool(stream, part.HideWArmour); WriteFloat(stream, part.Inflation); } - WriteInt(stream, CSMB.Offsets.Count); - foreach (CSMBOffset offset in CSMB.Offsets) + WriteInt(stream, _CSMB.Offsets.Count); + foreach (CSMBOffset offset in _CSMB.Offsets) { WriteInt(stream, (int)offset.offsetPart); WriteFloat(stream, offset.VerticalOffset); diff --git a/PCK-Studio/Classes/IO/GRF/GRFFileReader.cs b/PCK-Studio/Classes/IO/GRF/GRFFileReader.cs index 3a223da3..5c1868a1 100644 --- a/PCK-Studio/Classes/IO/GRF/GRFFileReader.cs +++ b/PCK-Studio/Classes/IO/GRF/GRFFileReader.cs @@ -10,7 +10,7 @@ using System.Diagnostics; namespace PckStudio.Classes.IO.GRF { - internal class GRFFileReader : StreamDataReader + internal class GRFFileReader : StreamDataReader { private IList StringLookUpTable; private GRFFile _file; @@ -23,7 +23,7 @@ namespace PckStudio.Classes.IO.GRF private GRFFileReader() : base(false) { } - private GRFFile ReadFromStream(Stream stream) + protected override GRFFile ReadFromStream(Stream stream) { stream = ReadHeader(stream); ReadBody(stream); diff --git a/PCK-Studio/Classes/IO/GRF/GRFFileWriter.cs b/PCK-Studio/Classes/IO/GRF/GRFFileWriter.cs index 5c337493..27d968ff 100644 --- a/PCK-Studio/Classes/IO/GRF/GRFFileWriter.cs +++ b/PCK-Studio/Classes/IO/GRF/GRFFileWriter.cs @@ -41,7 +41,7 @@ namespace PckStudio.Classes.IO.GRF if (!LUT.Contains(param.Key)) LUT.Add(param.Key); } - private void WriteToStream(Stream stream) + protected override void WriteToStream(Stream stream) { WriteHeader(stream); using (var uncompressed_stream = new MemoryStream()) diff --git a/PCK-Studio/Classes/IO/LOC/LOCFileReader.cs b/PCK-Studio/Classes/IO/LOC/LOCFileReader.cs index 632f7a6f..abb0af0f 100644 --- a/PCK-Studio/Classes/IO/LOC/LOCFileReader.cs +++ b/PCK-Studio/Classes/IO/LOC/LOCFileReader.cs @@ -6,7 +6,7 @@ using PckStudio.Classes.FileTypes; namespace PckStudio.Classes.IO.LOC { - internal class LOCFileReader : StreamDataReader + internal class LOCFileReader : StreamDataReader { internal LOCFile _file; @@ -20,7 +20,7 @@ namespace PckStudio.Classes.IO.LOC _file = new LOCFile(); } - private LOCFile ReadFromStream(Stream stream) + protected override LOCFile ReadFromStream(Stream stream) { int loc_type = ReadInt(stream); int language_count = ReadInt(stream); diff --git a/PCK-Studio/Classes/IO/LOC/LOCFileWriter.cs b/PCK-Studio/Classes/IO/LOC/LOCFileWriter.cs index be4a019f..d564ebac 100644 --- a/PCK-Studio/Classes/IO/LOC/LOCFileWriter.cs +++ b/PCK-Studio/Classes/IO/LOC/LOCFileWriter.cs @@ -7,25 +7,27 @@ namespace PckStudio.Classes.IO.LOC { internal class LOCFileWriter : StreamDataWriter { - internal LOCFile _locfile; + private LOCFile _locfile; + private int _type; public static void Write(Stream stream, LOCFile file, int type = 2) { - new LOCFileWriter(file).WriteToStream(stream, type); + new LOCFileWriter(file, type).WriteToStream(stream); } - private LOCFileWriter(LOCFile file) : base(false) + private LOCFileWriter(LOCFile file, int type) : base(false) { + _type = type; _locfile = file; } - private void WriteToStream(Stream stream, int type) + protected override void WriteToStream(Stream stream) { _ = _locfile ?? throw new ArgumentNullException(nameof(_locfile)); - WriteInt(stream, type); + WriteInt(stream, _type); WriteInt(stream, _locfile.Languages.Count); - if (type == 2) WriteLocKeys(stream); - WriteLanguages(stream, type); - WriteLanguageEntries(stream, type); + if (_type == 2) WriteLocKeys(stream); + WriteLanguages(stream, _type); + WriteLanguageEntries(stream, _type); } diff --git a/PCK-Studio/Classes/IO/Model/ModelReader.cs b/PCK-Studio/Classes/IO/Model/ModelReader.cs index 5c00479d..ca3f92e2 100644 --- a/PCK-Studio/Classes/IO/Model/ModelReader.cs +++ b/PCK-Studio/Classes/IO/Model/ModelReader.cs @@ -6,7 +6,7 @@ using System.Text; namespace PckStudio.Classes.IO.Model { - public class ModelReader : StreamDataReader + public class ModelReader : StreamDataReader { public static ModelFile Read(Stream stream, bool useLittleEndian = false) { @@ -17,7 +17,7 @@ namespace PckStudio.Classes.IO.Model { } - private ModelFile ReadFromStream(Stream stream) + protected override ModelFile ReadFromStream(Stream stream) { var modelFile = new ModelFile(); int version = ReadInt(stream); diff --git a/PCK-Studio/Classes/IO/PCK/PCKAudioFileReader.cs b/PCK-Studio/Classes/IO/PCK/PCKAudioFileReader.cs index 9127fc78..53d5a793 100644 --- a/PCK-Studio/Classes/IO/PCK/PCKAudioFileReader.cs +++ b/PCK-Studio/Classes/IO/PCK/PCKAudioFileReader.cs @@ -14,7 +14,7 @@ namespace PckStudio.Classes.IO.PCK { } } - internal class PCKAudioFileReader : StreamDataReader + internal class PCKAudioFileReader : StreamDataReader { private PCKAudioFile _file; private List LUT = new List(); @@ -30,7 +30,7 @@ namespace PckStudio.Classes.IO.PCK { } - private PCKAudioFile ReadFromStream(Stream stream) + protected override PCKAudioFile ReadFromStream(Stream stream) { int pck_type = ReadInt(stream); if (pck_type > 0xf00000) // 03 00 00 00 == true diff --git a/PCK-Studio/Classes/IO/PCK/PCKAudioFileWriter.cs b/PCK-Studio/Classes/IO/PCK/PCKAudioFileWriter.cs index 379fb533..129861d7 100644 --- a/PCK-Studio/Classes/IO/PCK/PCKAudioFileWriter.cs +++ b/PCK-Studio/Classes/IO/PCK/PCKAudioFileWriter.cs @@ -26,7 +26,7 @@ namespace PckStudio.Classes.IO.PCK _file = file; } - private void WriteToStream(Stream stream) + protected override void WriteToStream(Stream stream) { WriteInt(stream, _file.type); WriteLookUpTable(stream); diff --git a/PCK-Studio/Classes/IO/PCK/PCKFileReader.cs b/PCK-Studio/Classes/IO/PCK/PCKFileReader.cs index 1c33701a..5314d641 100644 --- a/PCK-Studio/Classes/IO/PCK/PCKFileReader.cs +++ b/PCK-Studio/Classes/IO/PCK/PCKFileReader.cs @@ -6,7 +6,7 @@ using System.Text; namespace PckStudio.Classes.IO { - internal class PCKFileReader : StreamDataReader + internal class PCKFileReader : StreamDataReader { private PCKFile _file; private List LUT; @@ -20,7 +20,7 @@ namespace PckStudio.Classes.IO { } - private PCKFile ReadFromStream(Stream stream) + protected override PCKFile ReadFromStream(Stream stream) { int pck_type = ReadInt(stream); if (pck_type > 0xf0_00_00) // 03 00 00 00 == true diff --git a/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs b/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs index d253dd30..c6edda67 100644 --- a/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs +++ b/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs @@ -23,7 +23,7 @@ namespace PckStudio.Classes.IO if (!LUT.Contains("XMLVERSION") && isSkinsPCK) LUT.Insert(0, "XMLVERSION"); } - private void WriteToStream(Stream stream) + protected override void WriteToStream(Stream stream) { WriteInt(stream, _pckfile.type); WriteLookUpTable(stream); diff --git a/PCK-Studio/Classes/IO/StreamDataReader.cs b/PCK-Studio/Classes/IO/StreamDataReader.cs index 9a29e197..407e3a42 100644 --- a/PCK-Studio/Classes/IO/StreamDataReader.cs +++ b/PCK-Studio/Classes/IO/StreamDataReader.cs @@ -1,4 +1,5 @@ -using System; +using PckStudio.Classes.FileTypes; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -7,13 +8,15 @@ using System.Threading.Tasks; namespace PckStudio.Classes.IO { - public class StreamDataReader + public abstract class StreamDataReader { private static bool useLittleEndian; protected static bool IsUsingLittleEndian => useLittleEndian; + protected abstract T ReadFromStream(Stream stream); + protected StreamDataReader(bool useLittleEndian) { - StreamDataReader.useLittleEndian = useLittleEndian; + StreamDataReader.useLittleEndian = useLittleEndian; } protected static string ReadString(Stream stream, int length, Encoding encoding) diff --git a/PCK-Studio/Classes/IO/StreamDataWriter.cs b/PCK-Studio/Classes/IO/StreamDataWriter.cs index a547b792..b8c6054c 100644 --- a/PCK-Studio/Classes/IO/StreamDataWriter.cs +++ b/PCK-Studio/Classes/IO/StreamDataWriter.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace PckStudio.Classes.IO { - internal class StreamDataWriter + internal abstract class StreamDataWriter { private static bool useLittleEndian; protected static bool IsUsingLittleEndian => useLittleEndian; @@ -17,6 +17,8 @@ namespace PckStudio.Classes.IO useLittleEndian = littleEndian; } + protected abstract void WriteToStream(Stream stream); + protected static void WriteBool(Stream stream, bool state) { stream.WriteByte((byte)(state ? 1 : 0));