From eaeb4cfb2167363d2d13479e5d76492e9c9de0d1 Mon Sep 17 00:00:00 2001 From: RisaDev <151885272+RisaDev@users.noreply.github.com> Date: Tue, 26 Nov 2024 04:06:26 +0300 Subject: [PATCH] Fix skeleton changes not being detected when switching between hairstyles with same amount of bones --- CustomizePlus/Armatures/Data/Armature.cs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/CustomizePlus/Armatures/Data/Armature.cs b/CustomizePlus/Armatures/Data/Armature.cs index 6e88246..6a556be 100644 --- a/CustomizePlus/Armatures/Data/Armature.cs +++ b/CustomizePlus/Armatures/Data/Armature.cs @@ -172,12 +172,32 @@ public bool IsSkeletonUpdated(CharacterBase* cBase) { 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); if (newPose != null && newPose->Skeleton->Bones.Length != _partialSkeletons[i].Length) 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; + } + } } }