private static void CreateBoneTable(GameSkeleton skeleton, int[] bones, ref AnimationFile animFile)
        {
            // Add the bones
            for (int i = 0; i < bones.Length; i++)
            {
                var originalBoneIndex = bones[i];
                animFile.Bones[i] = new AnimationFile.BoneInfo()
                {
                    Id = i, Name = skeleton.BoneNames[originalBoneIndex], ParentId = skeleton.GetParentBone(originalBoneIndex)
                };
            }

            for (int i = 0; i < bones.Length; i++)
            {
                if (animFile.Bones[i].ParentId == -1)
                {
                    continue;
                }

                var parentName = skeleton.BoneNames[animFile.Bones[i].ParentId];
                var indexOf    = animFile.Bones.Select((value, index) => new { value.Name, index })
                                 .Where(pair => pair.Name == parentName)
                                 .Select(pair => pair.index + 1)
                                 .FirstOrDefault() - 1;
                animFile.Bones[i].ParentId = indexOf;
            }
        }
Exemple #2
0
        public AnimationFile ConvertToFileFormat(GameSkeleton skeleton)
        {
            AnimationFile output = new AnimationFile();

            //float frameRate =
            var fRate = (DynamicFrames.Count() - 1) / PlayTimeInSec;

            output.Header.FrameRate     = (float)Math.Floor(fRate);
            output.Header.AnimationType = 7;
            output.Header.AnimationTotalPlayTimeInSec = PlayTimeInSec;
            output.Header.SkeletonName = skeleton.SkeletonName;

            output.Bones = new BoneInfo[skeleton.BoneCount];
            for (int i = 0; i < skeleton.BoneCount; i++)
            {
                output.Bones[i] = new BoneInfo()
                {
                    Id       = i,
                    Name     = skeleton.BoneNames[i],
                    ParentId = skeleton.GetParentBone(i)
                };
            }

            // Mappings
            output.RotationMappings    = RotationMappings.ToList();
            output.TranslationMappings = TranslationMappings.ToList();

            // Static
            if (StaticFrame != null)
            {
                output.StaticFrame = CreateFrameFromKeyFrame(StaticFrame);
            }

            // Dynamic
            foreach (var frame in DynamicFrames)
            {
                output.DynamicFrames.Add(CreateFrameFromKeyFrame(frame));
            }

            return(output);
        }