1
0
mirror of synced 2024-12-03 03:27:23 +01:00

More adjustments ot prevent crash issues

This commit is contained in:
KillzXGaming 2019-05-11 12:09:06 -04:00
parent 8768f23c4e
commit c648a78de9
6 changed files with 42 additions and 19 deletions

Binary file not shown.

View File

@ -862,6 +862,25 @@ namespace Bfres.Structs
} }
} }
//Genericate indices
//Check for rigged bones
for (int ob = 0; ob < assimp.objects.Count; ob++)
{
foreach (string NewBone in assimp.objects[ob].boneList)
{
foreach (var bones in Skeleton.bones)
{
if (bones.Text == NewBone)
{
bones.SmoothMatrixIndex += 1;
}
}
}
}
Skeleton.CalculateIndices();
if (materials.Count <= 0) if (materials.Count <= 0)
{ {
//Force material creation if there is none present //Force material creation if there is none present

View File

@ -49,13 +49,13 @@ namespace Bfres.Structs
List<ushort> RigidIndices = new List<ushort>(); List<ushort> RigidIndices = new List<ushort>();
ushort SmoothIndex = 0; ushort SmoothIndex = 0;
ushort BoneIndex = 0;
foreach (BfresBone bn in bones) foreach (BfresBone bn in bones)
{ {
if (Skeleton.Bones.ContainsKey(bn.Text)) ushort BoneIndex = 0;
foreach (var Bone in Skeleton.Bones.Values)
{
if (bn.Text == Bone.Name)
{ {
var Bone = Skeleton.Bones[bn.Text];
if (bn.UseSmoothMatrix || bn.SmoothMatrixIndex != -1) if (bn.UseSmoothMatrix || bn.SmoothMatrixIndex != -1)
{ {
bn.SmoothMatrixIndex = (short)SmoothIndex++; bn.SmoothMatrixIndex = (short)SmoothIndex++;
@ -65,26 +65,30 @@ namespace Bfres.Structs
var mat = MatrixExenstion.GetMatrixInverted(bn); var mat = MatrixExenstion.GetMatrixInverted(bn);
SmoothMatrices.Add(mat); SmoothMatrices.Add(mat);
} }
}
BoneIndex++; BoneIndex++;
} }
} }
BoneIndex = 0;
//Rigid Indices come after smooth indices. Start from the last smooth index //Rigid Indices come after smooth indices. Start from the last smooth index
ushort RigidIndex = (ushort)(SmoothIndices.Count); ushort RigidIndex = (ushort)(SmoothIndices.Count);
foreach (BfresBone bn in bones) foreach (BfresBone bn in bones)
{ {
var Bone = Skeleton.Bones[bn.Text]; ushort BoneIndex = 0;
foreach (var Bone in Skeleton.Bones.Values)
{
if (bn.Text == Bone.Name)
{
if (bn.UseRigidMatrix || bn.RigidMatrixIndex != -1) if (bn.UseRigidMatrix || bn.RigidMatrixIndex != -1)
{ {
bn.RigidMatrixIndex = (short)RigidIndex++; bn.RigidMatrixIndex = (short)RigidIndex++;
Bone.RigidMatrixIndex = bn.RigidMatrixIndex; Bone.RigidMatrixIndex = bn.RigidMatrixIndex;
RigidIndices.Add(BoneIndex); RigidIndices.Add(BoneIndex);
} }
}
BoneIndex++; BoneIndex++;
} }
}
//Rigid indices at the end //Rigid indices at the end
var AllIndices = SmoothIndices.Concat(RigidIndices).ToList(); var AllIndices = SmoothIndices.Concat(RigidIndices).ToList();