public void Load(string filePath, SkeletonEntry skeletonEntry, MotionDatabase motionDatabase) { using (var stream = File.OpenRead(filePath)) Load(stream, skeletonEntry, motionDatabase); if (motionDatabase == null) { return; } string motionSetName = Path.GetFileNameWithoutExtension(filePath); if (motionSetName.StartsWith("mot_", StringComparison.OrdinalIgnoreCase)) { motionSetName = motionSetName.Substring(4); } var motionSetEntry = motionDatabase.GetMotionSet(motionSetName); if (motionSetEntry == null || Motions.Count != motionSetEntry.Motions.Count) { return; } for (int i = 0; i < motionSetEntry.Motions.Count; i++) { Motions[i].Name = motionSetEntry.Motions[i].Name; Motions[i].Id = motionSetEntry.Motions[i].Id; } }
public void Save(Stream destination, SkeletonEntry skeletonEntry, bool leaveOpen = false) { if (skeletonEntry != null) { mController?.Update(skeletonEntry); } Save(destination, leaveOpen); }
public void Load(Stream source, SkeletonEntry skeletonEntry, bool leaveOpen = false) { Load(source, leaveOpen); if (skeletonEntry != null) { GetController(skeletonEntry); } }
public void Save(Stream destination, SkeletonEntry skeletonEntry, MotionDatabase motionDatabase, bool leaveOpen = false) { if (skeletonEntry != null && motionDatabase != null) { foreach (var motion in Motions.Where(x => x.HasController)) { motion.GetController().Update(skeletonEntry, motionDatabase); } } Save(destination, leaveOpen); }
public void Load(Stream source, SkeletonEntry skeletonEntry, MotionDatabase motionDatabase, bool leaveOpen = false) { Load(source, leaveOpen); if (skeletonEntry == null || motionDatabase == null) { return; } foreach (var motion in Motions) { motion.GetController(skeletonEntry, motionDatabase); } }
private static void SetBoneIDsFromSkeletonEntry(List <Bone> bones, SkeletonEntry skeletonEntry) { foreach (var bone in bones) { var boneEntry = skeletonEntry.Bones.FirstOrDefault(x => x.Name == bone.Name); if (boneEntry != null) { if (boneEntry.HasParent) { var parentName = skeletonEntry.BoneNames1[boneEntry.ParentNameIndex]; var parentBone = bones.FirstOrDefault(x => x.Name == parentName); if (parentBone != null) { bone.ParentID = parentBone.ID; } } } } }
public void Save(string filePath, SkeletonEntry skeletonEntry, MotionDatabase motionDatabase) { using (var stream = File.Create(filePath)) Save(stream, skeletonEntry, motionDatabase); }
public void Save(string filePath, SkeletonEntry skeletonEntry) { using (var stream = File.Create(filePath)) Save(stream, skeletonEntry); }
public void Load(string filePath, SkeletonEntry skeletonEntry) { using (var stream = File.OpenRead(filePath)) Load(stream, skeletonEntry); }
public MotionController GetController(SkeletonEntry skeletonEntry = null, MotionDatabase motionDatabase = null) { if (mController != null) { return(mController); } if (skeletonEntry == null) { throw new ArgumentNullException(nameof(skeletonEntry)); } var controller = new MotionController(this); int index = 0; foreach (var boneInfo in BoneInfos) { if (motionDatabase != null && boneInfo.Id >= motionDatabase.BoneNames.Count) { break; } boneInfo.Name = boneInfo.Name ?? motionDatabase?.BoneNames[boneInfo.Id] ?? throw new ArgumentNullException(nameof(motionDatabase)); var boneEntry = skeletonEntry.GetBoneEntry(boneInfo.Name); var keyController = new KeyController { Name = boneInfo.Name }; if (boneEntry != null) { if (boneEntry.Type != BoneType.Rotation) { keyController.Position = new KeySetVector { X = KeySets[index++], Y = KeySets[index++], Z = KeySets[index++], } } ; if (boneEntry.Type != BoneType.Position) { keyController.Rotation = new KeySetVector { X = KeySets[index++], Y = KeySets[index++], Z = KeySets[index++], } } ; } else if (!skeletonEntry.BoneNames2.Contains(boneInfo.Name)) { keyController.Position = new KeySetVector { X = KeySets[index++], Y = KeySets[index++], Z = KeySets[index++], } } ; controller.KeyControllers.Add(keyController); } return(mController = controller); }
public void Update(SkeletonEntry skeletonEntry, MotionDatabase motionDatabase = null) { Parent.KeySets.Clear(); Parent.BoneInfos.Clear(); var keyControllers = skeletonEntry.BoneNames2 .Select(x => { var keyController = KeyControllers .FirstOrDefault(y => y.Name.Equals(x, StringComparison.OrdinalIgnoreCase)); if (keyController == null) { keyController = new KeyController(); } keyController.Name = x; return(keyController); }) .Concat(KeyControllers .Where(x => x.Name.Equals("gblctr", StringComparison.OrdinalIgnoreCase) || x.Name.Equals("kg_ya_ex", StringComparison.OrdinalIgnoreCase)) .OrderBy(x => x.Name)) .Where(x => motionDatabase == null || motionDatabase.BoneNames.Contains(x.Name, StringComparer.OrdinalIgnoreCase)); foreach (var keyController in keyControllers) { var boneEntry = skeletonEntry.GetBoneEntry(keyController.Name); if (boneEntry != null) { if (boneEntry.Type != BoneType.Rotation) { Parent.KeySets.Add(keyController.Position?.X ?? new KeySet()); Parent.KeySets.Add(keyController.Position?.Y ?? new KeySet()); Parent.KeySets.Add(keyController.Position?.Z ?? new KeySet()); } if (boneEntry.Type != BoneType.Position) { Parent.KeySets.Add(keyController.Rotation?.X ?? new KeySet()); Parent.KeySets.Add(keyController.Rotation?.Y ?? new KeySet()); Parent.KeySets.Add(keyController.Rotation?.Z ?? new KeySet()); } } else if (!skeletonEntry.BoneNames2.Contains(keyController.Name)) { Parent.KeySets.Add(keyController.Position?.X ?? new KeySet()); Parent.KeySets.Add(keyController.Position?.Y ?? new KeySet()); Parent.KeySets.Add(keyController.Position?.Z ?? new KeySet()); } Parent.BoneInfos.Add(new BoneInfo { Name = keyController.Name, Id = motionDatabase?.BoneNames?.IndexOf(keyController.Name) ?? -1, }); } Parent.KeySets.Add(new KeySet()); }