Files
korenkonder_PD_Tool/KKdBaseLib/F2/Struct.cs
T
KujiKita 4698c75c7a Release v0.4.7.5
A3DA, Aet, AetDB, AuthDB, Databank, DEX, MOT, STR, VAG
2019-09-30 20:44:46 +03:00

49 lines
1.5 KiB
C#

namespace KKdBaseLib.F2
{
public struct Struct
{
public Header Header;
public byte[] Data;
public Struct[] SubStructs;
public ENRSList ENRS;
public POF POF;
public int Length => length(false);
public int LengthX => length( true);
public int Depth => Header.Depth;
public bool HasPOF => POF .NotNull;
public bool HasENRS => ENRS.NotNull;
public bool HasSubStructs => SubStructs != null;
public long DataOffset;
public override string ToString() => $"{Header.ToString()}" +
$"{(HasSubStructs ? $"; SubStructs: {SubStructs.Length}" : "")}" +
$"{(HasENRS ? "; Has ENRS" : "")}{(HasPOF ? "; Has POF" : "")}";
private int length(bool ShiftX = false)
{
int length = Data != null ? Data.Length : 0;
if (HasPOF ) length += 0x20 + (ShiftX ? POF.LengthX : POF.Length);
if (HasENRS) length += 0x20 + ENRS.Length;
if (HasSubStructs)
{
for (int i = 0; i < SubStructs.Length; i++)
length += (ShiftX ? SubStructs[i].LengthX : SubStructs[i].Length) + SubStructs[i].Header.Length;
length += 0x20;
}
return length;
}
public void Update(bool ShiftX = false)
{
Header.SectionSize = Data != null ? Data.Length : 0;
Header.DataSize = length(ShiftX);
}
}
}