Beispiel #1
0
 internal static void UpdateAnimation(ref EvaluatorData animationChannel, ref KeyFrameData <float> animationValue)
 {
     animationChannel.ValuePrev  = animationChannel.ValueStart;
     animationChannel.ValueStart = animationChannel.ValueEnd;
     animationChannel.ValueEnd   = animationChannel.ValueNext;
     animationChannel.ValueNext  = animationValue;
 }
Beispiel #2
0
 internal static void InitializeAnimation(ref EvaluatorData animationChannel, ref AnimationInitialValues <float> animationValue)
 {
     animationChannel.ValuePrev  = animationValue.Value1;
     animationChannel.ValueStart = animationValue.Value1;
     animationChannel.ValueEnd   = animationValue.Value1;
     animationChannel.ValueNext  = animationValue.Value2;
 }
Beispiel #3
0
        public float EvaluateCubic(CompressedTimeSpan time)
        {
            int keyIndex;

            for (keyIndex = 0; keyIndex < KeyFrames.Count - 1; ++keyIndex)
            {
                if (time < KeyFrames[keyIndex + 1].Time)
                {
                    break;
                }
            }

            // TODO: Check if before or after curve (and on those limits)

            // Exact value, just returns it.
            if (time == KeyFrames[keyIndex].Time)
            {
                return(KeyFrames[keyIndex].Value);
            }

            // http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Interpolation_on_the_unit_interval_without_exact_derivatives
            long timeStart = KeyFrames[keyIndex + 0].Time.Ticks;
            long timeEnd   = KeyFrames[keyIndex + 1].Time.Ticks;

            float t = ((float)time.Ticks - (float)timeStart) / ((float)timeEnd - (float)timeStart);

            var evaluator = new EvaluatorData();

            evaluator.ValuePrev  = KeyFrames[keyIndex > 0 ? keyIndex - 1 : 0];
            evaluator.ValueStart = KeyFrames[keyIndex + 0];
            evaluator.ValueEnd   = KeyFrames[keyIndex + 1];
            evaluator.ValueNext  = KeyFrames[keyIndex + 2 < KeyFrames.Count ? keyIndex + 2 : KeyFrames.Count - 1];

            return(evaluator.Evaluate(t));
        }
Beispiel #4
0
            public LazyItemOperation(OperationBuilder builder, LazyItemEvaluator <P, I, M, D> lazyEvaluator)
            {
                _itemElement         = builder.ItemElement;
                _itemType            = builder.ItemType;
                _operations          = builder.Operations.ToImmutable();
                _referencedItemLists = builder.ReferencedItemLists.ToImmutable();

                _lazyEvaluator = lazyEvaluator;
                _evaluatorData = new EvaluatorData(_lazyEvaluator._outerEvaluatorData, itemType => GetReferencedItems(itemType, ImmutableHashSet <string> .Empty));
                _expander      = new Expander <P, I>(_evaluatorData, _evaluatorData);

                _itemFactory = new ItemFactoryWrapper(_itemElement, _lazyEvaluator._itemFactory);
            }
Beispiel #5
0
            protected LazyItemOperation(OperationBuilder builder, LazyItemEvaluator <P, I, M, D> lazyEvaluator)
            {
                _itemElement         = builder.ItemElement;
                _itemType            = builder.ItemType;
                _itemSpec            = builder.ItemSpec;
                _referencedItemLists = builder.ReferencedItemLists.ToImmutable();
                _conditionResult     = builder.ConditionResult;

                _lazyEvaluator = lazyEvaluator;

                _evaluatorData = new EvaluatorData(_lazyEvaluator._outerEvaluatorData, itemType => GetReferencedItems(itemType, ImmutableHashSet <string> .Empty));
                _itemFactory   = new ItemFactoryWrapper(_itemElement, _lazyEvaluator._itemFactory);
                _expander      = new Expander <P, I>(_evaluatorData, _evaluatorData, _lazyEvaluator.EvaluationContext);

                _itemSpec.Expander = _expander;
            }