- [Core] Fix bug with assets parsing.

This commit is contained in:
Razmoth
2023-11-24 21:17:13 +04:00
parent 2568e4be08
commit 4c0f1ec44b
45 changed files with 725 additions and 672 deletions

View File

@@ -225,7 +225,7 @@ namespace AssetStudio
private ImportedFrame ConvertTransform(Transform trans)
{
var frame = new ImportedFrame(trans.m_Children.Length);
var frame = new ImportedFrame(trans.m_Children.Count);
transformDictionary.Add(trans, frame);
trans.m_GameObject.TryGet(out var m_GameObject);
frame.Name = m_GameObject.m_Name;
@@ -308,7 +308,7 @@ namespace AssetStudio
iMesh.hasColor = mesh.m_Colors?.Length > 0;
int firstFace = 0;
for (int i = 0; i < mesh.m_SubMeshes.Length; i++)
for (int i = 0; i < mesh.m_SubMeshes.Count; i++)
{
int numFaces = (int)mesh.m_SubMeshes[i].indexCount / 3;
if (subHashSet.Count > 0 && !subHashSet.Contains(i))
@@ -319,7 +319,7 @@ namespace AssetStudio
var submesh = mesh.m_SubMeshes[i];
var iSubmesh = new ImportedSubmesh();
Material mat = null;
if (i - firstSubMesh < meshR.m_Materials.Length)
if (i - firstSubMesh < meshR.m_Materials.Count)
{
if (meshR.m_Materials[i - firstSubMesh].TryGet(out var m_Material))
{
@@ -408,7 +408,7 @@ namespace AssetStudio
}
}
//BoneInfluence
if (mesh.m_Skin?.Length > 0)
if (mesh.m_Skin?.Count > 0)
{
var inf = mesh.m_Skin[j];
iVertex.BoneIndices = new int[4];
@@ -431,16 +431,16 @@ namespace AssetStudio
* 2 - m_BoneNameHashes
*/
var boneType = 0;
if (sMesh.m_Bones.Length > 0)
if (sMesh.m_Bones.Count > 0)
{
if (sMesh.m_Bones.Length == mesh.m_BindPose.Length)
if (sMesh.m_Bones.Count == mesh.m_BindPose.Length)
{
var verifiedBoneCount = sMesh.m_Bones.Count(x => x.TryGet(out _));
if (verifiedBoneCount > 0)
{
boneType = 1;
}
if (verifiedBoneCount != sMesh.m_Bones.Length)
if (verifiedBoneCount != sMesh.m_Bones.Count)
{
//尝试使用m_BoneNameHashes 4.3 and up
if (mesh.m_BindPose.Length > 0 && (mesh.m_BindPose.Length == mesh.m_BoneNameHashes?.Length))
@@ -470,7 +470,7 @@ namespace AssetStudio
if (boneType == 1)
{
var boneCount = sMesh.m_Bones.Length;
var boneCount = sMesh.m_Bones.Count;
iMesh.BoneList = new List<ImportedBone>(boneCount);
for (int i = 0; i < boneCount; i++)
{
@@ -501,13 +501,13 @@ namespace AssetStudio
}
//Morphs
if (mesh.m_Shapes?.channels?.Length > 0)
if (mesh.m_Shapes?.channels?.Count > 0)
{
var morph = new ImportedMorph();
MorphList.Add(morph);
morph.Path = iMesh.Path;
morph.Channels = new List<ImportedMorphChannel>(mesh.m_Shapes.channels.Length);
for (int i = 0; i < mesh.m_Shapes.channels.Length; i++)
morph.Channels = new List<ImportedMorphChannel>(mesh.m_Shapes.channels.Count);
for (int i = 0; i < mesh.m_Shapes.channels.Count; i++)
{
var channel = new ImportedMorphChannel();
morph.Channels.Add(channel);
@@ -534,7 +534,7 @@ namespace AssetStudio
keyframe.hasTangents = shape.hasTangents;
keyframe.VertexList = new List<ImportedMorphVertex>((int)shape.vertexCount);
var vertexEnd = shape.firstVertex + shape.vertexCount;
for (uint j = shape.firstVertex; j < vertexEnd; j++)
for (int j = (int)shape.firstVertex; j < vertexEnd; j++)
{
var destVertex = new ImportedMorphVertex();
keyframe.VertexList.Add(destVertex);
@@ -918,7 +918,7 @@ namespace AssetStudio
{
var frame = streamedFrames[frameIndex];
var streamedValues = frame.keyList.Select(x => x.value).ToArray();
for (int curveIndex = 0; curveIndex < frame.keyList.Length;)
for (int curveIndex = 0; curveIndex < frame.keyList.Count;)
{
var index = frame.keyList[curveIndex].index;
if (!Game.Type.IsSRGroup())