Exemple #1
0
        internal W3DAnimation(W3dAnimation w3dAnimation)
        {
            SetNameAndInstanceId("W3DAnimation", w3dAnimation.Header.HierarchyName + "." + w3dAnimation.Header.Name);
            Duration = TimeSpan.FromSeconds(w3dAnimation.Header.NumFrames / (double)w3dAnimation.Header.FrameRate);

            var channels = w3dAnimation.Channels
                           .OfType <W3dAnimationChannel>()
                           .Where(x => x.ChannelType != W3dAnimationChannelType.UnknownBfme) // Don't know what this channel means.
                           .ToList();

            var bitChannels = w3dAnimation.Channels
                              .OfType <W3dBitChannel>()
                              .ToList();

            Clips = new AnimationClip[channels.Count + bitChannels.Count];

            for (var i = 0; i < channels.Count; i++)
            {
                Clips[i] = CreateAnimationClip(w3dAnimation, channels[i]);
            }

            for (var i = 0; i < bitChannels.Count; i++)
            {
                Clips[channels.Count + i] = CreateAnimationClip(w3dAnimation, bitChannels[i]);
            }
        }
Exemple #2
0
        private static Animation CreateAnimation(W3dAnimation w3dAnimation)
        {
            var name     = w3dAnimation.Header.Name;
            var duration = TimeSpan.FromSeconds(w3dAnimation.Header.NumFrames / (double)w3dAnimation.Header.FrameRate);

            var channels = w3dAnimation.Channels
                           .Where(x => x.ChannelType != W3dAnimationChannelType.UnknownBfme) // Don't know what this channel means.
                           .ToList();

            var clips = new AnimationClip[channels.Count + w3dAnimation.BitChannels.Count];

            for (var i = 0; i < channels.Count; i++)
            {
                clips[i] = CreateAnimationClip(w3dAnimation, channels[i]);
            }

            for (var i = 0; i < w3dAnimation.BitChannels.Count; i++)
            {
                clips[channels.Count + i] = CreateAnimationClip(w3dAnimation, w3dAnimation.BitChannels[i]);
            }

            return(new Animation(
                       name,
                       duration,
                       clips));
        }
Exemple #3
0
        private static AnimationClip CreateAnimationClip(W3dAnimation w3dAnimation, W3dBitChannel w3dChannel)
        {
            var bone = w3dChannel.Pivot;

            var data = w3dChannel.Data;

            var numKeyframes = data.GetLength(0);

            var totalKeyframes = numKeyframes;

            if (w3dChannel.FirstFrame != 0)
            {
                totalKeyframes++;
            }
            if (w3dChannel.LastFrame != w3dAnimation.Header.NumFrames - 1)
            {
                totalKeyframes++;
            }

            var keyframes = new Keyframe[totalKeyframes];

            var keyframeIndex = 0;

            if (w3dChannel.FirstFrame != 0)
            {
                keyframes[keyframeIndex++] = new Keyframe(TimeSpan.Zero, new KeyframeValue {
                    BoolValue = w3dChannel.DefaultValue
                });
            }

            for (var i = 0; i < numKeyframes; i++)
            {
                var time = TimeSpan.FromSeconds((w3dChannel.FirstFrame + i) / (double)w3dAnimation.Header.FrameRate);

                switch (w3dChannel.ChannelType)
                {
                case W3dBitChannelType.Visibility:
                    keyframes[keyframeIndex++] = new Keyframe(time, new KeyframeValue {
                        BoolValue = data[i]
                    });
                    break;

                default:
                    throw new NotImplementedException();
                }
            }

            if (w3dChannel.LastFrame != w3dAnimation.Header.NumFrames - 1)
            {
                var time = TimeSpan.FromSeconds((w3dChannel.LastFrame + 1) / (double)w3dAnimation.Header.FrameRate);
                keyframes[keyframeIndex++] = new Keyframe(time, new KeyframeValue {
                    BoolValue = w3dChannel.DefaultValue
                });
            }

            return(new AnimationClip(AnimationClipType.Visibility, bone, keyframes));
        }
Exemple #4
0
        private static AnimationClip CreateAnimationClip(W3dAnimation w3dAnimation, W3dAnimationChannel w3dChannel)
        {
            var bone = w3dChannel.Pivot;

            var data         = w3dChannel.Data;
            var numKeyframes = data.GetLength(0);
            var keyframes    = new Keyframe[numKeyframes];

            for (var i = 0; i < numKeyframes; i++)
            {
                var time = TimeSpan.FromSeconds((w3dChannel.FirstFrame + i) / (double)w3dAnimation.Header.FrameRate);
                keyframes[i] = CreateKeyframe(w3dChannel.ChannelType, time, ref data[i]);
            }

            return(new AnimationClip(w3dChannel.ChannelType.ToAnimationClipType(), bone, keyframes));
        }
Exemple #5
0
        private static Animation CreateAnimation(W3dAnimation w3dAnimation)
        {
            var name     = w3dAnimation.Header.Name;
            var duration = TimeSpan.FromSeconds(w3dAnimation.Header.NumFrames / (double)w3dAnimation.Header.FrameRate);

            var clips = new AnimationClip[w3dAnimation.Channels.Count + w3dAnimation.BitChannels.Count];

            for (var i = 0; i < w3dAnimation.Channels.Count; i++)
            {
                clips[i] = CreateAnimationClip(w3dAnimation, w3dAnimation.Channels[i]);
            }

            for (var i = 0; i < w3dAnimation.BitChannels.Count; i++)
            {
                clips[w3dAnimation.Channels.Count + i] = CreateAnimationClip(w3dAnimation, w3dAnimation.BitChannels[i]);
            }

            return(new Animation(
                       name,
                       duration,
                       clips));
        }