Move BehaviourFile processing to OMI lib

This commit is contained in:
miku-666
2023-03-05 20:08:05 +01:00
parent dc9284182a
commit c4914d7f64
7 changed files with 11 additions and 140 deletions

View File

@@ -1,31 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PckStudio.Classes.FileTypes
{
public class BehaviourFile
{
public List<RiderPositionOverride> entries { get; } = new List<RiderPositionOverride>();
public class RiderPositionOverride
{
public string name;
public List<PositionOverride> overrides { get; }
public RiderPositionOverride(string name)
{
this.name = name;
overrides = new List<PositionOverride>();
}
public class PositionOverride
{
public bool EntityIsTamed;
public bool EntityHasSaddle;
public float x, y, z;
}
}
}
}

View File

@@ -1,53 +0,0 @@
using PckStudio.Classes.FileTypes;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PckStudio.Classes.IO.Behaviour
{
public class BehavioursReader : StreamDataReader<BehaviourFile>
{
public static BehaviourFile Read(Stream stream)
{
return new BehavioursReader().ReadFromStream(stream);
}
protected BehavioursReader() : base(false) // Doesn't seem that Behaviours uses little endian
{
}
protected override BehaviourFile ReadFromStream(Stream stream)
{
BehaviourFile behaviourFile = new BehaviourFile();
_ = ReadInt(stream);
int riderPosOverrideCount = ReadInt(stream);
for (int i = 0; i < riderPosOverrideCount; i++)
{
string name = ReadString(stream);
var riderPositionOverride = new BehaviourFile.RiderPositionOverride(name);
int posOverideCount = ReadInt(stream);
for (; 0 < posOverideCount; posOverideCount--)
{
var posOverride = new BehaviourFile.RiderPositionOverride.PositionOverride();
posOverride.EntityIsTamed = ReadBool(stream);
posOverride.EntityHasSaddle = ReadBool(stream);
posOverride.x = ReadFloat(stream);
posOverride.y = ReadFloat(stream);
posOverride.z = ReadFloat(stream);
riderPositionOverride.overrides.Add(posOverride);
}
behaviourFile.entries.Add(riderPositionOverride);
}
return behaviourFile;
}
private string ReadString(Stream stream)
{
short length = ReadShort(stream);
return ReadString(stream, length, Encoding.ASCII);
}
}
}

View File

@@ -1,47 +0,0 @@
using PckStudio.Classes.FileTypes;
using System;
using System.IO;
using System.Text;
namespace PckStudio.Classes.IO.Behaviour
{
internal class BehavioursWriter : StreamDataWriter
{
private BehaviourFile behaviourFile;
public static void Write(Stream stream, BehaviourFile file)
{
new BehavioursWriter(file).WriteToStream(stream);
}
public BehavioursWriter(BehaviourFile file) : base(false)
{
behaviourFile = file;
}
protected override void WriteToStream(Stream stream)
{
WriteInt(stream, 0);
WriteInt(stream, behaviourFile.entries.Count);
foreach (var entry in behaviourFile.entries)
{
WriteString(stream, entry.name);
WriteInt(stream, entry.overrides.Count);
foreach(var posOverride in entry.overrides)
{
WriteBool(stream, posOverride.EntityIsTamed);
WriteBool(stream, posOverride.EntityHasSaddle);
WriteFloat(stream, posOverride.x);
WriteFloat(stream, posOverride.y);
WriteFloat(stream, posOverride.z);
}
}
}
private void WriteString(Stream stream, string s)
{
WriteShort(stream, (short)s.Length);
WriteString(stream, s, Encoding.ASCII);
}
}
}

View File

@@ -7,9 +7,10 @@ using System.Linq;
using System.Windows.Forms;
using MetroFramework.Forms;
using PckStudio.Classes.FileTypes;
using PckStudio.Classes.IO.Behaviour;
using PckStudio.Forms.Additional_Popups.EntityForms;
using Newtonsoft.Json.Linq;
using OMI.Formats.Behaviour;
using OMI.Workers.Behaviour;
namespace PckStudio.Forms.Editor
{
@@ -62,7 +63,8 @@ namespace PckStudio.Forms.Editor
using (var stream = new MemoryStream(file.Data))
{
behaviourFile = BehavioursReader.Read(stream);
var reader = new BehavioursReader();
behaviourFile = reader.FromStream(stream);
}
treeView1.ImageList = new ImageList();
@@ -267,7 +269,8 @@ namespace PckStudio.Forms.Editor
}
}
BehavioursWriter.Write(stream, behaviourFile);
var writer = new BehavioursWriter(behaviourFile);
writer.WriteToStream(stream);
_file.SetData(stream.ToArray());
}
DialogResult = DialogResult.OK;

View File

@@ -5,8 +5,9 @@ using System.IO;
using PckStudio.Properties;
using PckStudio.Classes.FileTypes;
using PckStudio.Classes.IO.Behaviour;
using PckStudio.Classes.Extentions;
using OMI.Formats.Behaviour;
using OMI.Workers.Behaviour;
namespace PckStudio.Forms.Utilities
{
@@ -23,7 +24,8 @@ namespace PckStudio.Forms.Utilities
using (var stream = new MemoryStream())
{
BehavioursWriter.Write(stream, new BehaviourFile());
var writer = new BehavioursWriter(new BehaviourFile());
writer.WriteToStream(stream);
file.SetData(stream.ToArray());
}

View File

@@ -171,15 +171,12 @@
<Compile Include="Classes\API\PCKCenter\PCKCollectionsLocal.cs" />
<Compile Include="Classes\API\PCKCenter\SaveLocalJSON.cs" />
<Compile Include="Classes\FileTypes\MaterialsFile.cs" />
<Compile Include="Classes\FileTypes\BehaviourFile.cs" />
<Compile Include="Classes\FileTypes\CSMBFile.cs" />
<Compile Include="Classes\FileTypes\ModelFile.cs" />
<Compile Include="Classes\FileTypes\PCKAudioFile.cs" />
<Compile Include="Classes\FileTypes\Binka.cs" />
<Compile Include="Classes\FileTypes\CSM.cs" />
<Compile Include="Classes\FileTypes\GRFFile.cs" />
<Compile Include="Classes\IO\Behaviour\BehavioursReader.cs" />
<Compile Include="Classes\IO\Behaviour\BehavioursWriter.cs" />
<Compile Include="Classes\IO\CSMB\CSMBFileReader.cs" />
<Compile Include="Classes\IO\CSMB\CSMBFileWriter.cs" />
<Compile Include="Classes\IO\Materials\MaterialsReader.cs" />

2
Vendor/OMI-Lib vendored