Fix skeleton changes not being detected when switching between hairstyles with same amount of bones

This commit is contained in:
RisaDev
2024-11-26 04:06:26 +03:00
parent da7eb91fba
commit eaeb4cfb21

View File

@@ -172,12 +172,32 @@ public unsafe class Armature
{ {
for (var i = 0; i < cBase->Skeleton->PartialSkeletonCount; ++i) for (var i = 0; i < cBase->Skeleton->PartialSkeletonCount; ++i)
{ {
if (i == 2)
continue; //hair is handled separately
var newPose = cBase->Skeleton->PartialSkeletons[i].GetHavokPose(Constants.TruePoseIndex); var newPose = cBase->Skeleton->PartialSkeletons[i].GetHavokPose(Constants.TruePoseIndex);
if (newPose != null if (newPose != null
&& newPose->Skeleton->Bones.Length != _partialSkeletons[i].Length) && newPose->Skeleton->Bones.Length != _partialSkeletons[i].Length)
return true; return true;
//todo: compare bones for hair partial skeleton [2] }
//handle hair separately because different hairstyles can have the same amount of bones.
if(cBase->Skeleton->PartialSkeletonCount > 2)
{
var newPose = cBase->Skeleton->PartialSkeletons[2].GetHavokPose(Constants.TruePoseIndex);
if(newPose != null)
{
if(newPose->Skeleton->Bones.Length != _partialSkeletons[2].Length)
return true;
for(var i = 0; i < newPose->Skeleton->Bones.Length; i++)
{
if (newPose->Skeleton->Bones[i].Name.String != _partialSkeletons[2][i].BoneName)
return true;
}
}
} }
} }