Exemple #1
0
        /// <summary>
        /// The global fragment mask will add the mask or and it with previously existing masks
        /// </summary>
        /// <param name="masks"></param>
        internal void SetGlobalFragmentMask(params object[] masks)
        {
            foreach (var mask in masks)
            {
                Type maskType = mask.GetType();
                ITarget.ValidFragmentType(maskType);

                List <int> maskValues;
                if (_fragmentMasks == null || !_fragmentMasks.TryGetValue(maskType, out maskValues))
                {
                    if (_fragmentMasks == null)
                    {
                        _fragmentMasks = new Dictionary <Type, List <int> >();
                    }

                    maskValues = new List <int> {
                        (int)mask
                    };
                    _fragmentMasks.Add(maskType, maskValues);
                }
                else
                {
                    for (int i = 0; i < maskValues.Count; ++i)
                    {
                        maskValues[i] &= (int)mask;
                    }
                }
            }
        }
Exemple #2
0
 public void AddFragmentMask(params object[] fragmentMasks)
 {
     foreach (object fragmentMask in fragmentMasks)
     {
         Type fragmentType = fragmentMask.GetType();
         ITarget.ValidFragmentType(fragmentType);
         FragmentMasks.Add(fragmentMask);
     }
 }
Exemple #3
0
 public bool HasFragmentMask(params object[] fragmentMasks)
 {
     return(FragmentMasks.Any(f =>
     {
         foreach (object fragmentMask in fragmentMasks)
         {
             Type fragmentType = fragmentMask.GetType();
             ITarget.ValidFragmentType(fragmentType);
             if (f.GetType() == fragmentType)
             {
                 return Enum.Equals(f, fragmentMask);
             }
         }
         return false;
     }));
 }
Exemple #4
0
        public void AddFragmentMask(params object[] masks)
        {
            foreach (var mask in masks)
            {
                Type maskType = mask.GetType();
                ITarget.ValidFragmentType(maskType);

                List <int> maskValues;
                if (_fragmentMasks == null || !_fragmentMasks.TryGetValue(maskType, out maskValues))
                {
                    if (_fragmentMasks == null)
                    {
                        _fragmentMasks = new Dictionary <Type, List <int> >();
                    }

                    maskValues = new List <int>();
                    _fragmentMasks.Add(maskType, maskValues);
                }

                maskValues.Add((int)mask);
            }
        }
Exemple #5
0
        public void AddFragmentMask(params object[] masks)
        {
            var fragmentTypes = TargetType.GetFields();

            foreach (var mask in masks)
            {
                Type maskType = mask.GetType();
                ITarget.ValidFragmentType(maskType);
                if (!fragmentTypes.Any(fragmentType => fragmentType.FieldType == maskType))
                {
                    throw new Error(
                              "Fragment mask type '{0}' is not present in this target, here is the list of valid types:\n- {1}",
                              maskType,
                              string.Join(
                                  "\n- ",
                                  fragmentTypes
                                  .Select(fragmentType => Util.ToNiceTypeName(fragmentType.FieldType))
                                  .OrderBy(type => type, StringComparer.InvariantCultureIgnoreCase)
                                  )
                              );
                }

                List <int> maskValues;
                if (_fragmentMasks == null || !_fragmentMasks.TryGetValue(maskType, out maskValues))
                {
                    if (_fragmentMasks == null)
                    {
                        _fragmentMasks = new Dictionary <Type, List <int> >();
                    }

                    maskValues = new List <int>();
                    _fragmentMasks.Add(maskType, maskValues);
                }

                maskValues.Add((int)mask);
            }
        }