Ejemplo n.º 1
0
Archivo: Fbx.cs Proyecto: kkdevs/sb3u
            public void ConvertAnimation(reaANICsection animSection, remParser parser)
            {
                ImportedSampledAnimation anim = new ImportedSampledAnimation();

                anim.TrackList = new List <ImportedAnimationSampledTrack>(animSection.Count);
                foreach (reaAnimationTrack track in animSection)
                {
                    remBone boneFrame  = rem.FindFrame(track.boneFrame, parser.BONC.rootFrame);
                    bool    isTopFrame = boneFrame != null && boneFrame.Parent == parser.BONC.rootFrame;
                    ImportedAnimationSampledTrack iTrack = ConvertTrack(track, isTopFrame);
                    anim.TrackList.Add(iTrack);
                }
                AnimationList.Add(anim);
            }
Ejemplo n.º 2
0
Archivo: Fbx.cs Proyecto: kkdevs/sb3u
            public static ImportedSampledAnimation ConvertAnimation(ImportedKeyframedAnimation keyframedAnim)
            {
                ImportedSampledAnimation destAnim = new ImportedSampledAnimation();

                destAnim.TrackList = new List <ImportedAnimationSampledTrack>(keyframedAnim.TrackList.Count);
                foreach (ImportedAnimationKeyframedTrack keyframedTrack in keyframedAnim.TrackList)
                {
                    ImportedAnimationSampledTrack sampledTrack = new ImportedAnimationSampledTrack();
                    sampledTrack.Name         = keyframedTrack.Name;
                    sampledTrack.Scalings     = new Vector3?[keyframedTrack.Keyframes.Length];
                    sampledTrack.Rotations    = new Quaternion?[keyframedTrack.Keyframes.Length];
                    sampledTrack.Translations = new Vector3?[keyframedTrack.Keyframes.Length];
                    for (int i = 0; i < keyframedTrack.Keyframes.Length; i++)
                    {
                        sampledTrack.Scalings[i]     = keyframedTrack.Keyframes[i].Scaling;
                        sampledTrack.Rotations[i]    = keyframedTrack.Keyframes[i].Rotation;
                        sampledTrack.Translations[i] = keyframedTrack.Keyframes[i].Translation;
                    }
                    destAnim.TrackList.Add(sampledTrack);
                }

                return(destAnim);
            }
Ejemplo n.º 3
0
        public static void ReplaceAnimation(WorkspaceAnimation wsAnimation, List <ImportedFrame> wsSkeleton, reaParser parser, int resampleCount, bool linear, ReplaceAnimationMethod replaceMethod, int insertPos, bool negateQuaternionFlips)
        {
            Report.ReportLog("Replacing animation ...");
            List <KeyValuePair <string, ImportedAnimationSampledTrack> > newTrackList = FbxUtility.CopySampledAnimation(wsAnimation, resampleCount, linear);

            reaANICsection           animationNodeList = parser.ANIC;
            ImportedSampledAnimation iAnim             = new ImportedSampledAnimation();

            iAnim.TrackList = new List <ImportedAnimationSampledTrack>(animationNodeList.Count);
            Dictionary <string, ImportedAnimationSampledTrack> animationNodeDic = null;

            if (replaceMethod != ReplaceAnimationMethod.Replace)
            {
                animationNodeDic = new Dictionary <string, ImportedAnimationSampledTrack>();
                foreach (reaAnimationTrack animationNode in animationNodeList)
                {
                    ImportedFrame boneFrame              = ImportedHelpers.FindFrame(animationNode.boneFrame, wsSkeleton[0]);
                    bool          isTopFrame             = boneFrame != null && boneFrame.Parent == wsSkeleton[0];
                    ImportedAnimationSampledTrack iTrack = Plugins.REMConverter.ConvertTrack(animationNode, isTopFrame);
                    iTrack.Name = animationNode.boneFrame;
                    animationNodeDic.Add(animationNode.boneFrame, iTrack);
                    iAnim.TrackList.Add(iTrack);
                }
            }

            FbxUtility.ReplaceAnimation(replaceMethod, insertPos, newTrackList, iAnim, animationNodeDic, negateQuaternionFlips);

            animationNodeList.ChildList.Clear();
            foreach (var newTrack in iAnim.TrackList)
            {
                ImportedFrame     boneFrame     = ImportedHelpers.FindFrame(newTrack.Name, wsSkeleton[0]);
                bool              isTopFrame    = boneFrame != null && boneFrame.Parent == wsSkeleton[0];
                reaAnimationTrack animationNode = Plugins.REMConverter.ConvertTrack(newTrack, isTopFrame);
                animationNodeList.AddChild(animationNode);
            }
        }