public BoneWeight Map(Vector3 pos) { for (int i = 0; i < weights.Length; i++) { weights[i] = 0f; } PaintWeights(pos, weights); return(BoneWeightUtils.FindBestBones(weights)); }
private void Override(Ragdoll ragdoll, Vector3[] targetPositions, BoneWeight[] targetWeights, ref Transform[] bones, ref Matrix4x4[] bindposes, Matrix4x4 targetMeshToWorld) { SkinOverrideVolume[] componentsInChildren = GetComponentsInChildren <SkinOverrideVolume>(); if (componentsInChildren.Length == 0) { return; } int num = bindposes.Length; Array.Resize(ref bindposes, bindposes.Length + componentsInChildren.Length); Array.Resize(ref bones, bones.Length + componentsInChildren.Length); for (int i = 0; i < componentsInChildren.Length; i++) { SkinOverrideVolume skinOverrideVolume = componentsInChildren[i]; bones[num + i] = skinOverrideVolume.transform; bindposes[num + i] = skinOverrideVolume.GetBindPose(ragdoll.transform) * targetMeshToWorld; } float[] array = new float[componentsInChildren.Length]; for (int j = 0; j < targetPositions.Length; j++) { float num2 = 0f; for (int k = 0; k < componentsInChildren.Length; k++) { SkinOverrideVolume skinOverrideVolume2 = componentsInChildren[k]; array[k] = skinOverrideVolume2.GetWeight(targetPositions[j]); num2 += array[k]; } if (num2 != 0f) { BoneWeight b = BoneWeightUtils.FindBestBones(array); b.boneIndex0 += num; b.boneIndex1 += num; b.boneIndex2 += num; b.boneIndex3 += num; targetWeights[j] = BoneWeightUtils.Lerp(targetWeights[j], b, num2); } } }