Skip to content

Commit d7b4d41

Browse files
committed
Add support for Tuanjie Mesh assets
1 parent 95f7d70 commit d7b4d41

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

AssetStudio/Classes/Mesh.cs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,49 @@ public SubMesh(ObjectReader reader)
444444
}
445445
}
446446

447+
public class VGPackedHierarchyNode
448+
{
449+
public Vector4[] LODBounds = new Vector4[8];
450+
public Vector3[] BoxBoundsCenter = new Vector3[8];
451+
public uint[] MinLODError_MaxParentLODError = new uint[8];
452+
public Vector3[] BoxBoundsExtent = new Vector3[8];
453+
public uint[] ChildStartReference = new uint[8];
454+
public uint[] ResourcePageIndex_NumPages_GroupPartSize = new uint[8];
455+
456+
public VGPackedHierarchyNode(BinaryReader reader)
457+
{
458+
for (var i = 0; i < 8; i++)
459+
{
460+
LODBounds[i] = reader.ReadVector4();
461+
BoxBoundsCenter[i] = reader.ReadVector3();
462+
MinLODError_MaxParentLODError[i] = reader.ReadUInt32();
463+
BoxBoundsExtent[i] = reader.ReadVector3();
464+
ChildStartReference[i] = reader.ReadUInt32();
465+
ResourcePageIndex_NumPages_GroupPartSize[i] = reader.ReadUInt32();
466+
}
467+
}
468+
}
469+
470+
public class VGPageStreamingState
471+
{
472+
public uint BulkOffset;
473+
public uint BulkSize;
474+
public uint PageSize;
475+
public uint DependenciesStart;
476+
public uint DependenciesNum;
477+
public uint Flags;
478+
479+
public VGPageStreamingState(BinaryReader reader)
480+
{
481+
BulkOffset = reader.ReadUInt32();
482+
BulkSize = reader.ReadUInt32();
483+
PageSize = reader.ReadUInt32();
484+
DependenciesStart = reader.ReadUInt32();
485+
DependenciesNum = reader.ReadUInt32();
486+
Flags = reader.ReadUInt32();
487+
}
488+
}
489+
447490
public sealed class Mesh : NamedObject
448491
{
449492
private bool m_Use16BitIndices = true;
@@ -542,6 +585,36 @@ public Mesh(ObjectReader reader) : base(reader)
542585
var m_KeepVertices = reader.ReadBoolean();
543586
var m_KeepIndices = reader.ReadBoolean();
544587
}
588+
if (version.IsTuanjie)
589+
{
590+
var m_LightmapUseUV1 = reader.ReadInt32();
591+
var m_fileScale = reader.ReadSingle();
592+
var NumInputTriangles = reader.ReadUInt32();
593+
var NumInputVertices = reader.ReadUInt32();
594+
var NumInputMeshes = reader.ReadUInt16();
595+
var NumInputTexCoords = reader.ReadUInt16();
596+
var ResourceFlags = reader.ReadUInt32();
597+
var RootClusterPageSize = reader.ReadInt32();
598+
reader.Position += RootClusterPageSize; //skip byte[] RootClusterPage
599+
var ImposterAtlasSize = reader.ReadInt32();
600+
reader.Position += ImposterAtlasSize * 2; //skip ushort[] ImposterAtlas
601+
var HierarchyNodesSize = reader.ReadInt32();
602+
for (var i = 0; i < HierarchyNodesSize; i++)
603+
{
604+
_ = new VGPackedHierarchyNode(reader);
605+
}
606+
var HierarchyRootOffsetsSize = reader.ReadInt32();
607+
reader.Position += HierarchyRootOffsetsSize * 4; //skip uint[] HierarchyRootOffsets
608+
var PageStreamingStatesSize = reader.ReadInt32();
609+
for (var i = 0; i < PageStreamingStatesSize; i++)
610+
{
611+
_ = new VGPageStreamingState(reader);
612+
}
613+
var PageDependenciesSize = reader.ReadInt32();
614+
reader.Position += PageDependenciesSize * 4; //skip uint[] PageDependencies
615+
var streamableClusterPageSize = reader.ReadInt32();
616+
reader.Position += streamableClusterPageSize; //skip byte[] streamableClusterPageSize
617+
}
545618
reader.AlignStream();
546619

547620
//Unity fixed it in 2017.3.1p1 and later versions

0 commit comments

Comments
 (0)