private void WriteKeyFrameSequence(KeyFrameSequence value) { output.Write(value.BoneName); output.Write(value.KeyCount); output.Write(value.Duration); output.Write(value.KeyInterval); output.Write(value.HasTranslation); output.Write(value.HasRotation); output.Write(value.HasScale); output.Write(value.HasTime); output.Write(value.FixedTranslation); output.Write(value.FixedRotation); output.Write(value.FixedScale); // write position values. output.Write(value.Translation.Count); for (int i = 0; i < value.Translation.Count; i++) { output.Write(value.Translation[i]); } // write rotation values. output.Write(value.Rotation.Count); for (int i = 0; i < value.Rotation.Count; i++) { output.Write(value.Rotation[i]); } // write scale values. output.Write(value.Scale.Count); for (int i = 0; i < value.Scale.Count; i++) { output.Write(value.Scale[i]); } // write time values. output.Write(value.Time.Count); for (int i = 0; i < value.Time.Count; i++) { output.Write(value.Time[i]); } }
/// <summary> /// inserts the new KeyFrameSequence, which is specified in the Binder. /// If there are two Binder’s, the first Binder will be gone and /// the second Binder will be moved as the first Binder, /// and the new KeyFrameSequence will be inserted into the second Binder. /// When the every Binder is empty, it will then insert to the first Binder /// </summary> /// <param name="keyFrame">Animation key frame sequence</param> /// <param name="startTime">Start time of the animaton</param> /// <param name="blendTime">Blend time of two the animaton</param> /// <param name="timeScaleFactor">Time scale of the animaton</param> /// <param name="mode">Play mode of the animaton</param> public void AddKeyFrameSequence(KeyFrameSequence keyFrame, float startTime, float blendTime, float timeScaleFactor, AnimPlayMode mode) { this.blendTime = blendTime; this.elapsedTime = startTime; if (this.BlendTime == 0.0f) { ClearAllBinder(); firstBinder.BindKeyFrameSequence(keyFrame, startTime, timeScaleFactor, mode); } else { // If binding above two binders, push out one binder if (this.bindCount == 2) ShiftBinder(); if (this.bindCount == 0) { firstBinder.BindKeyFrameSequence(keyFrame, startTime, timeScaleFactor, mode); } else if (this.bindCount == 1) { secondBinder.BindKeyFrameSequence(keyFrame, startTime, timeScaleFactor, mode); } } this.bindCount++; }
/// <summary> /// binds the animation key frame. /// </summary> /// <param name="keyFrame">Animation key frame sequence</param> /// <param name="startTime">Start time of the animaton</param> /// <param name="timeScaleFactor">Time scale of the animaton</param> /// <param name="mode">Play mode of the animaton</param> public void BindKeyFrameSequence(KeyFrameSequence keyFrame, float startTime, float timeScaleFactor, AnimPlayMode mode) { SetKeyFrameSequence(keyFrame); SetTime(startTime); SetTimeScaleFactor(timeScaleFactor); SetPlayMode(mode); }
/// <summary> /// sets the animation key frame structure. /// </summary> public void SetKeyFrameSequence(KeyFrameSequence keyFrame) { keyFrameSequence = keyFrame; }