private SklbFile initSkele(string path) { realm.Packs.TryGetFile(path, out File sklb); SklbFile skl = new SklbFile(sklb); return(skl); }
public Skeleton(SklbFile file) { this.File = file; _UnmanagedPtr = HavokInterop.Execute(() => Interop.loadSkeleton(file.HavokData, file.HavokData.Length)); BoneCount = HavokInterop.Execute(() => Interop.getNumBones(_UnmanagedPtr)); BoneNames = new string[BoneCount]; HavokInterop.Execute(() => Interop.getBoneNames(_UnmanagedPtr, BoneNames)); ParentBoneIndices = new int[BoneCount]; HavokInterop.Execute(() => Interop.getParentIndices(_UnmanagedPtr, ParentBoneIndices)); ReferencePose = new Matrix[BoneCount]; var referencePoseLocal = new InteropTransform[BoneCount]; HavokInterop.Execute(() => Interop.getReferencePose(_UnmanagedPtr, referencePoseLocal)); for (var target = 0; target < BoneCount; ++target) { var current = target; ReferencePose[target] = Matrix.Identity; while (current >= 0) { ReferencePose[target] = ReferencePose[target] * referencePoseLocal[current].ToTransformationMatrix(); current = ParentBoneIndices[current]; } } }
private bool _IsDisposed = false; // To detect redundant calls #endregion Fields #region Constructors public Skeleton(SklbFile file) { this.File = file; _UnmanagedPtr = HavokInterop.Execute(() => Interop.loadSkeleton(file.HavokData, file.HavokData.Length)); BoneCount = HavokInterop.Execute(() => Interop.getNumBones(_UnmanagedPtr)); BoneNames = new string[BoneCount]; HavokInterop.Execute(() => Interop.getBoneNames(_UnmanagedPtr, BoneNames)); ParentBoneIndices = new int[BoneCount]; HavokInterop.Execute(() => Interop.getParentIndices(_UnmanagedPtr, ParentBoneIndices)); ReferencePose = new Matrix[BoneCount]; var referencePoseLocal = new InteropTransform[BoneCount]; HavokInterop.Execute(() => Interop.getReferencePose(_UnmanagedPtr, referencePoseLocal)); for (var target = 0; target < BoneCount; ++target) { var current = target; ReferencePose[target] = Matrix.Identity; while (current >= 0) { ReferencePose[target] = ReferencePose[target] * referencePoseLocal[current].ToTransformationMatrix(); current = ParentBoneIndices[current]; } } }