mirror of
https://github.com/kwsch/pkNX.git
synced 2026-08-26 20:34:07 -05:00
File scoped namespaces for all lib projects netstandard2.0 => net6; now uniform. bye netframework!
89 lines
3.5 KiB
C#
89 lines
3.5 KiB
C#
using System.ComponentModel;
|
|
using System.Text;
|
|
using FlatSharp;
|
|
using FlatSharp.Attributes;
|
|
// ReSharper disable UnusedAutoPropertyAccessor.Global
|
|
// ReSharper disable ClassNeverInstantiated.Global
|
|
// ReSharper disable MemberCanBePrivate.Global
|
|
// ReSharper disable UnusedType.Global
|
|
// ReSharper disable UnusedMember.Global
|
|
#nullable disable
|
|
#pragma warning disable CA1819 // Properties should not return arrays
|
|
|
|
namespace pkNX.Structures.FlatBuffers;
|
|
|
|
// poke_memory_data.prmb and others
|
|
// this is oddly similar to the map data FlatBuffer, assumed the same schema to encode an excel table?
|
|
[FlatBufferTable, TypeConverter(typeof(ExpandableObjectConverter))]
|
|
public class CellTable
|
|
{
|
|
[FlatBufferItem(0)] public CellMetaQuad[] QuadTable { get; set; }
|
|
[FlatBufferItem(1)] public CellUnion[] MainTable { get; set; }
|
|
[FlatBufferItem(2)] public CellMetaHashes[] DualTable { get; set; }
|
|
|
|
public string[] Dump(int cellsPerRow, char tab = '\t')
|
|
{
|
|
var result = new string[MainTable.Length / cellsPerRow];
|
|
for (int i = 0; i < result.Length; i++)
|
|
{
|
|
var index = i * cellsPerRow;
|
|
var sb = new StringBuilder();
|
|
for (int j = 0; j < cellsPerRow; j++)
|
|
{
|
|
if (j != 0)
|
|
sb.Append(tab);
|
|
sb.Append(MainTable[index + j]);
|
|
}
|
|
result[i] = sb.ToString();
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
[FlatBufferTable, TypeConverter(typeof(ExpandableObjectConverter))]
|
|
public class CellMetaQuad
|
|
{
|
|
[FlatBufferItem(0)] public int Field0 { get; set; }
|
|
[FlatBufferItem(1)] public int Field1 { get; set; }
|
|
[FlatBufferItem(2)] public int Field2 { get; set; }
|
|
[FlatBufferItem(3)] public int Field3 { get; set; }
|
|
|
|
public override string ToString() => $"{Field0}|{Field1}|{Field2}|{Field3}";
|
|
}
|
|
|
|
[FlatBufferTable, TypeConverter(typeof(ExpandableObjectConverter))]
|
|
public class CellUnion
|
|
{
|
|
#nullable enable
|
|
[FlatBufferItem(0)] public FlatBufferUnion<CellInt, CellBool, CellString, CellHash>? Field1 { get; set; }
|
|
#nullable disable
|
|
public override string ToString() => Field1?.Discriminator switch
|
|
{
|
|
1 => Field1.Item1.ToString(),
|
|
2 => Field1.Item3.ToString(),
|
|
4 => Field1.Item4.ToString(),
|
|
_ => "Empty",
|
|
};
|
|
}
|
|
|
|
[FlatBufferTable, TypeConverter(typeof(ExpandableObjectConverter))] public class CellInt { [FlatBufferItem(0)] public int Value { get; set; } public override string ToString() => Value.ToString(); }
|
|
[FlatBufferTable, TypeConverter(typeof(ExpandableObjectConverter))] public class CellBool { [FlatBufferItem(0)] public bool Flag { get; set; } public override string ToString() => Flag.ToString(); }
|
|
[FlatBufferTable, TypeConverter(typeof(ExpandableObjectConverter))] public class CellString { [FlatBufferItem(0)] public string Name { get; set; } public override string ToString() => Name; }
|
|
[FlatBufferTable, TypeConverter(typeof(ExpandableObjectConverter))] public class CellHash { [FlatBufferItem(0)] public ulong Hash { get; set; } public override string ToString() => Hash.ToString("X16"); }
|
|
|
|
[FlatBufferTable, TypeConverter(typeof(ExpandableObjectConverter))]
|
|
public class CellMetaHashes
|
|
{
|
|
[FlatBufferItem(0)] public ulong Hash { get; set; }
|
|
[FlatBufferItem(1)] public CellHashTuple[] Pairs { get; set; }
|
|
}
|
|
|
|
[FlatBufferTable, TypeConverter(typeof(ExpandableObjectConverter))]
|
|
public class CellHashTuple
|
|
{
|
|
[FlatBufferItem(0)] public ulong Hash0 { get; set; }
|
|
[FlatBufferItem(1)] public ulong Hash1 { get; set; }
|
|
|
|
public override string ToString() => $"{Hash0:X16} {Hash1:X16}";
|
|
}
|