/// <summary>
        /// Create new interaction data with values copied from this interaction data.
        /// </summary>
        public IInteractionData Clone()
        {
            InteractionData i = new InteractionData();

            i.InteractionType  = InteractionType;
            i.Velocity         = Velocity;
            i.Point            = Point;
            i.Normal           = Normal;
            i.TagMask          = TagMask;
            i.CompositionValue = CompositionValue;
            i.PriorityOverride = PriorityOverride;
            i.ThisObject       = ThisObject;
            i.OtherObject      = OtherObject;

            return(i);
        }
        /// <summary>
        /// Converts the given IInteractionData implementation to InteractionData.
        /// </summary>
        /// <typeparam name="T">The IInteractionData type.</typeparam>
        /// <param name="original">The original IInteractionData object.</param>
        /// <returns>A new InteractionData object.</returns>
        public static InteractionData ToInteractionData <T>(T original) where T : IInteractionData
        {
            InteractionData i = new InteractionData();

            i.InteractionType  = original.InteractionType;
            i.Velocity         = original.Velocity;
            i.Point            = original.Point;
            i.Normal           = original.Normal;
            i.TagMask          = original.TagMask;
            i.CompositionValue = original.CompositionValue;
            i.PriorityOverride = original.PriorityOverride;
            i.ThisObject       = original.ThisObject;
            i.OtherObject      = original.OtherObject;

            return(i);
        }