public static QuaternionPatch GeneratePatch(MWQuaternion _old, Quaternion _new)
        {
            if (_old == null && _new != null)
            {
                return(new QuaternionPatch(_new));
            }
            else if (_new == null)
            {
                return(null);
            }

            var patch = new QuaternionPatch()
            {
                X = _old.X != _new.x ? (float?)_new.x : null,
                Y = _old.Y != _new.y ? (float?)_new.y : null,
                Z = _old.Z != _new.z ? (float?)_new.z : null,
                W = _old.W != _new.w ? (float?)_new.w : null
            };

            if (patch.IsPatched())
            {
                return(patch);
            }
            else
            {
                return(null);
            }
        }
        public static MWQuaternion ApplyPatch(this MWQuaternion _this, QuaternionPatch quaternion)
        {
            if (quaternion == null)
            {
                return(_this);
            }

            if (quaternion.W != null)
            {
                _this.W = quaternion.W.Value;
            }

            if (quaternion.X != null)
            {
                _this.X = quaternion.X.Value;
            }

            if (quaternion.Y != null)
            {
                _this.Y = quaternion.Y.Value;
            }

            if (quaternion.Z != null)
            {
                _this.Z = quaternion.Z.Value;
            }

            return(_this);
        }