Example #1
0
        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;
            }
        }
Example #2
0
        public void Save(Stream destination, SkeletonEntry skeletonEntry, bool leaveOpen = false)
        {
            if (skeletonEntry != null)
            {
                mController?.Update(skeletonEntry);
            }

            Save(destination, leaveOpen);
        }
Example #3
0
        public void Load(Stream source, SkeletonEntry skeletonEntry, bool leaveOpen = false)
        {
            Load(source, leaveOpen);

            if (skeletonEntry != null)
            {
                GetController(skeletonEntry);
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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);
            }
        }
Example #6
0
 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;
                 }
             }
         }
     }
 }
Example #7
0
 public void Save(string filePath, SkeletonEntry skeletonEntry, MotionDatabase motionDatabase)
 {
     using (var stream = File.Create(filePath))
         Save(stream, skeletonEntry, motionDatabase);
 }
Example #8
0
 public void Save(string filePath, SkeletonEntry skeletonEntry)
 {
     using (var stream = File.Create(filePath))
         Save(stream, skeletonEntry);
 }
Example #9
0
 public void Load(string filePath, SkeletonEntry skeletonEntry)
 {
     using (var stream = File.OpenRead(filePath))
         Load(stream, skeletonEntry);
 }
Example #10
0
        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());
        }