예제 #1
0
        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;
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }