/* refill a linear transition with new state information */
        public static void ResetLinearTransition(
            ref LinearTransRec TransRec,
            double Start,
            double Destination,
            int TicksToReach)
        {
            double LocalTicksToReach = TicksToReach;

            TransRec.RightValue          = Destination;
            TransRec.InverseDifferential = (Start - Destination) / LocalTicksToReach;
            TransRec.Countdown           = LocalTicksToReach;
        }
        /* execute one cycle and return the value */
        public static double LinearTransitionUpdate(ref LinearTransRec TransRec)
        {
            double LocalCountdown = TransRec.Countdown - 1;
            double ReturnValue    = TransRec.RightValue + TransRec.InverseDifferential * LocalCountdown;

            TransRec.Countdown = LocalCountdown;

#if DEBUG
            if (Math.Floor(TransRec.Countdown) != TransRec.Countdown)
            {
                // Countdown not integer
                Debug.Assert(false);
                throw new InvalidOperationException();
            }
#endif

            return(ReturnValue);
        }