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); }
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); }
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); } }