Exemple #1
0
        // Determine if enums are unique to specific effect
        // or general for all effects
        private static void DetectCommonEnums(List <Effects.Effect> effects)
        {
            List <Effects.Property> allProperties = GetAllEffectsProperties(effects);

            for (int propertyIndex = 0; propertyIndex < allProperties.Count; propertyIndex++)
            {
                Effects.EnumValues fields = allProperties[propertyIndex].EnumFields;
                if (fields == null || fields.Usage != Effects.EnumValues.UsageType.UsedByOneEffect)
                {
                    continue;
                }
                for (int propertyIndex2 = propertyIndex + 1; propertyIndex2 < allProperties.Count; propertyIndex2++)
                {
                    Effects.EnumValues fields2 = allProperties[propertyIndex2].EnumFields;
                    if (fields2 == null || fields.FieldsList.Count != fields2.FieldsList.Count)
                    {
                        continue;
                    }
                    if (fields.Equals(fields2))
                    {
                        fields.Usage            = Effects.EnumValues.UsageType.UsedByMultipleEffects;
                        fields.IsRepresentative = true;
                        fields2.Usage           = Effects.EnumValues.UsageType.UsedByMultipleEffects;
                        fields2.FieldsList      = fields.FieldsList;
                    }
                }
            }
        }
Exemple #2
0
        private static void AssignD2DEnums(List <Effects.Effect> effects, List <Enum> d2dEnums)
        {
            foreach (var property in GetAllEffectsProperties(effects))
            {
                Effects.EnumValues fields = property.EnumFields;
                if (fields == null)
                {
                    continue;
                }

                // Try to find enum for specific effect
                foreach (var d2dEnum in d2dEnums)
                {
                    if (IsEnumEqualD2DEnum(property, d2dEnum, true))
                    {
                        fields.D2DEnum = d2dEnum;
                    }
                }

                // If failed to find enum for specific effect, try general
                if (fields.D2DEnum == null)
                {
                    // Try to find enum without name matching
                    foreach (var d2dEnum in d2dEnums)
                    {
                        if (IsEnumEqualD2DEnum(property, d2dEnum, false))
                        {
                            fields.D2DEnum = d2dEnum;
                        }
                    }
                }
            }
        }
Exemple #3
0
        // Determine if enums are unique to specific effect
        // or general for all effects
        private static void DetectCommonEnums(List <Effects.Effect> effects)
        {
            List <Effects.Property> allProperties = GetAllEffectsProperties(effects);

            for (int propertyIndex = 0; propertyIndex < allProperties.Count; propertyIndex++)
            {
                Effects.EnumValues fields = allProperties[propertyIndex].EnumFields;
                if (fields == null || fields.Usage != Effects.EnumValues.UsageType.UsedByOneEffect)
                {
                    continue;
                }
                for (int propertyIndex2 = propertyIndex + 1; propertyIndex2 < allProperties.Count; propertyIndex2++)
                {
                    Effects.EnumValues fields2 = allProperties[propertyIndex2].EnumFields;
                    if (fields2 == null)
                    {
                        continue;
                    }

                    // Allow merging if either enum is a subset of the values of the other,
                    // but not if their value sets are distinct in both directions.
                    var delta1 = fields.FieldsList.Except(fields2.FieldsList);
                    var delta2 = fields2.FieldsList.Except(fields.FieldsList);

                    if (!delta1.Any() || !delta2.Any())
                    {
                        fields.Usage            = Effects.EnumValues.UsageType.UsedByMultipleEffects;
                        fields.IsRepresentative = true;
                        fields2.Usage           = Effects.EnumValues.UsageType.UsedByMultipleEffects;
                        fields2.FieldsList      = fields.FieldsList;

                        // Exclude any enum values that are supported by one enum but not the other.
                        allProperties[propertyIndex2].ExcludedEnumIndexes.AddRange(delta1.Select(field => fields.FieldsList.IndexOf(field).ToString()));
                        allProperties[propertyIndex].ExcludedEnumIndexes.AddRange(delta2.Select(field => fields2.FieldsList.IndexOf(field).ToString()));
                    }
                }
            }
        }