mirror of
https://mirror.ghproxy.com/https://github.com/dexyfex/CodeWalker
synced 2026-05-14 18:25:15 +08:00
YVR/XML and YWR/XML conversions
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
using System;
|
||||
using SharpDX;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml;
|
||||
|
||||
namespace CodeWalker.GameFiles
|
||||
{
|
||||
@@ -38,7 +40,6 @@ namespace CodeWalker.GameFiles
|
||||
this.EntriesCount
|
||||
);
|
||||
}
|
||||
|
||||
public override void Write(ResourceDataWriter writer, params object[] parameters)
|
||||
{
|
||||
base.Write(writer, parameters);
|
||||
@@ -56,6 +57,61 @@ namespace CodeWalker.GameFiles
|
||||
writer.Write(this.Unknown_28h);
|
||||
writer.Write(this.Unknown_2Ch);
|
||||
}
|
||||
public void WriteXml(StringBuilder sb, int indent)
|
||||
{
|
||||
|
||||
if (Entries?.Data != null)
|
||||
{
|
||||
foreach (var e in Entries.Data)
|
||||
{
|
||||
YwrXml.OpenTag(sb, indent, "Item");
|
||||
e.WriteXml(sb, indent + 1);
|
||||
YwrXml.CloseTag(sb, indent, "Item");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
public void ReadXml(XmlNode node)
|
||||
{
|
||||
var entries = new List<WaypointRecordEntry>();
|
||||
|
||||
var inodes = node.SelectNodes("Item");
|
||||
if (inodes != null)
|
||||
{
|
||||
foreach (XmlNode inode in inodes)
|
||||
{
|
||||
var e = new WaypointRecordEntry();
|
||||
e.ReadXml(inode);
|
||||
entries.Add(e);
|
||||
}
|
||||
}
|
||||
|
||||
Entries = new ResourceSimpleArray<WaypointRecordEntry>();
|
||||
Entries.Data = entries;
|
||||
|
||||
}
|
||||
public static void WriteXmlNode(WaypointRecordList l, StringBuilder sb, int indent, string name = "WaypointRecordList")
|
||||
{
|
||||
if (l == null) return;
|
||||
if ((l.Entries?.Data == null) || (l.Entries.Data.Count == 0))
|
||||
{
|
||||
YwrXml.SelfClosingTag(sb, indent, name);
|
||||
}
|
||||
else
|
||||
{
|
||||
YwrXml.OpenTag(sb, indent, name);
|
||||
l.WriteXml(sb, indent + 1);
|
||||
YwrXml.CloseTag(sb, indent, name);
|
||||
}
|
||||
}
|
||||
public static WaypointRecordList ReadXmlNode(XmlNode node)
|
||||
{
|
||||
if (node == null) return null;
|
||||
var l = new WaypointRecordList();
|
||||
l.ReadXml(node);
|
||||
return l;
|
||||
}
|
||||
|
||||
|
||||
public override IResourceBlock[] GetReferences()
|
||||
{
|
||||
@@ -70,9 +126,7 @@ namespace CodeWalker.GameFiles
|
||||
{
|
||||
public override long BlockLength => 20;
|
||||
|
||||
public float PositionX;
|
||||
public float PositionY;
|
||||
public float PositionZ;
|
||||
public Vector3 Position;
|
||||
public ushort Unk0;
|
||||
public ushort Unk1;
|
||||
public ushort Unk2;
|
||||
@@ -81,26 +135,38 @@ namespace CodeWalker.GameFiles
|
||||
public override void Read(ResourceDataReader reader, params object[] parameters)
|
||||
{
|
||||
// read structure data
|
||||
this.PositionX = reader.ReadSingle();
|
||||
this.PositionY = reader.ReadSingle();
|
||||
this.PositionZ = reader.ReadSingle();
|
||||
this.Position = reader.ReadVector3();
|
||||
this.Unk0 = reader.ReadUInt16();
|
||||
this.Unk1 = reader.ReadUInt16();
|
||||
this.Unk2 = reader.ReadUInt16();
|
||||
this.Unk3 = reader.ReadUInt16();
|
||||
}
|
||||
|
||||
public override void Write(ResourceDataWriter writer, params object[] parameters)
|
||||
{
|
||||
// write structure data
|
||||
writer.Write(this.PositionX);
|
||||
writer.Write(this.PositionY);
|
||||
writer.Write(this.PositionZ);
|
||||
writer.Write(this.Position);
|
||||
writer.Write(this.Unk0);
|
||||
writer.Write(this.Unk1);
|
||||
writer.Write(this.Unk2);
|
||||
writer.Write(this.Unk3);
|
||||
}
|
||||
public void WriteXml(StringBuilder sb, int indent)
|
||||
{
|
||||
YwrXml.SelfClosingTag(sb, indent, "Position " + FloatUtil.GetVector3XmlString(Position));
|
||||
YwrXml.ValueTag(sb, indent, "Unk0", Unk0.ToString());
|
||||
YwrXml.ValueTag(sb, indent, "Unk1", Unk1.ToString());
|
||||
YwrXml.ValueTag(sb, indent, "Unk2", Unk2.ToString());
|
||||
YwrXml.ValueTag(sb, indent, "Unk3", Unk3.ToString());
|
||||
}
|
||||
public void ReadXml(XmlNode node)
|
||||
{
|
||||
Position = Xml.GetChildVector3Attributes(node, "Position");
|
||||
Unk0 = (ushort)Xml.GetChildUIntAttribute(node, "Unk0", "value");
|
||||
Unk1 = (ushort)Xml.GetChildUIntAttribute(node, "Unk1", "value");
|
||||
Unk2 = (ushort)Xml.GetChildUIntAttribute(node, "Unk2", "value");
|
||||
Unk3 = (ushort)Xml.GetChildUIntAttribute(node, "Unk3", "value");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user