public void calcIndicesAndTimes(KeyframeSequence self, int sequenceTimeInt, int repeatMode) { self.updateDeltaTimeCache(); int validRangeFirst = self.getValidRangeFirst(); int validRangeLast = self.getValidRangeLast(); int[] times = self.m_times; int[] calcIndices = self.m_calcIndices; if (validRangeFirst > validRangeLast) { return; } int index; int num; if (sequenceTimeInt < self.m_validRangeFirstTime || sequenceTimeInt >= self.m_validRangeLastTime) { index = validRangeLast; num = validRangeFirst; } else { index = this.calcCurrentIndex(sequenceTimeInt, validRangeFirst, validRangeLast, times); num = this.calcNextIndex(index, validRangeFirst, validRangeLast, repeatMode); } calcIndices[0] = index; calcIndices[1] = num; }
public float getInterpolant( KeyframeSequence self, int current, float sequenceTime, int repeatMode) { int keyframeTime = self.getKeyframeTime(current); float num = sequenceTime - (float)keyframeTime; if ((double)num < 0.0) { num += (float)self.getDuration(); } float deltaTime = self.getDeltaTime(current); return((double)num < (double)deltaTime ? num / deltaTime : 1f); }
private static object loadAnimationTrack( ref DataInputStream @in, ref List <Object3D> objectList, ref List <Object3D> rootObjectList) { AnimationTrack animationTrack = new AnimationTrack(); Loader.loadObject3D((Object3D)animationTrack, ref @in, ref objectList, ref rootObjectList); KeyframeSequence reference1 = (KeyframeSequence)Loader.getReference(ref @in, ref objectList, ref rootObjectList); AnimationController reference2 = (AnimationController)Loader.getReference(ref @in, ref objectList, ref rootObjectList); int property = Loader.readIntLE(ref @in); animationTrack.setKeyframeSequence(reference1); animationTrack.setProperty(property); animationTrack.setController(reference2); return((object)animationTrack); }
private static object loadKeyframeSequence( ref DataInputStream @in, ref List <Object3D> objectList, ref List <Object3D> rootObjectList) { KeyframeSequence keyframeSequence = new KeyframeSequence(); Loader.loadObject3D((Object3D)keyframeSequence, ref @in, ref objectList, ref rootObjectList); int interpolation = @in.readUnsignedByte(); int mode = @in.readUnsignedByte(); int num1 = @in.readUnsignedByte(); int duration = Loader.readIntLE(ref @in); int first = Loader.readIntLE(ref @in); int last = Loader.readIntLE(ref @in); int numComponents = Loader.readIntLE(ref @in); int numKeyframes = Loader.readIntLE(ref @in); keyframeSequence.setInterpolation(interpolation); keyframeSequence.setRepeatMode(mode); keyframeSequence.setDuration(duration); keyframeSequence.setKeyframeSize(numKeyframes, numComponents); keyframeSequence.setValidRange(first, last); switch (num1) { case 0: float[] numArray1 = new float[numComponents]; for (int index1 = 0; index1 < numKeyframes; ++index1) { int time = Loader.readIntLE(ref @in); for (int index2 = 0; index2 < numComponents; ++index2) { numArray1[index2] = Loader.readFloatLE(ref @in); } keyframeSequence.setKeyframe(index1, time, numArray1); } break; case 2: float num2 = 1.525902E-05f; float[] numArray2 = new float[4]; float[] numArray3 = new float[4]; for (int index = 0; index < numComponents; ++index) { numArray2[index] = Loader.readFloatLE(ref @in); } for (int index = 0; index < numComponents; ++index) { numArray3[index] = Loader.readFloatLE(ref @in); } float[] numArray4 = new float[numComponents]; for (int index1 = 0; index1 < numKeyframes; ++index1) { int time = Loader.readIntLE(ref @in); for (int index2 = 0; index2 < numComponents; ++index2) { float num3 = (float)Loader.readUShortLE(ref @in) * num2 * numArray3[index2] + numArray2[index2]; numArray4[index2] = num3; } keyframeSequence.setKeyframe(index1, time, numArray4); } break; } return((object)keyframeSequence); }