public DangerousAffixMonsterDefinition DefineDangerousAffix(MonsterAffix affix, AffixNameFunc affixNameFunc, int priority = 0,
                                                                    IFont eliteFont     = null, IFont minionFont = null, bool showMinionDecorators = false, bool showMinionAffixesNames = false,
                                                                    float bgEliteRadius = _bgEliteRadius, float fgEliteRadius = _fgEliteRadius, float bgMinionRadius = _bgMinionRadius, float fgMinionRadius = _fgMinionRadius,
                                                                    IBrush bgBrush      = null, IShapePainter bgShapePainter  = null, bool bgPing = false, IRadiusTransformator bgRadiusTransformator = null,
                                                                    IBrush fgBrush      = null, IShapePainter fgShapePainter  = null, bool fgPing = false, IRadiusTransformator fgRadiusTransformator = null)
        {
            bgBrush        = bgBrush ?? DefaultBackgroundBrush;
            fgBrush        = fgBrush ?? DefaultForegroundBrush;
            bgShapePainter = bgShapePainter ?? DefaultMapShapePainter;
            fgShapePainter = fgShapePainter ?? DefaultMapShapePainter;
            eliteFont      = eliteFont ?? DefaultEliteAffixesFont;
            minionFont     = minionFont ?? DefaultMinionAffixesFont;

            if (bgPing)
            {
                bgRadiusTransformator = bgRadiusTransformator ?? DefaultRadiusTransformator;
            }
            else
            {
                bgRadiusTransformator = null;
            }

            if (fgPing)
            {
                fgRadiusTransformator = fgRadiusTransformator ?? DefaultRadiusTransformator;
            }
            else
            {
                fgRadiusTransformator = null;
            }

            var affixDef = new DangerousAffixMonsterDefinition(affix)
            {
                EliteDecorators        = CreateDecorators(bgEliteRadius, fgEliteRadius, bgBrush, fgBrush, bgShapePainter, fgShapePainter, bgRadiusTransformator, fgRadiusTransformator),
                MinionDecorators       = CreateDecorators(bgMinionRadius, fgMinionRadius, bgBrush, fgBrush, bgShapePainter, fgShapePainter, bgRadiusTransformator, fgRadiusTransformator),
                EliteLabelFont         = eliteFont,
                MinionLabelFont        = minionFont,
                ShowMinionDecorators   = showMinionDecorators,
                ShowMinionAffixesNames = showMinionAffixesNames,
                AffixNameFunc          = affixNameFunc,
                Priority = priority,
            };

            affixDef.MinionDecorators.ToggleDecorators <MapShapeDecorator>(showMinionDecorators);
            affixDef.MinionDecorators.ToggleDecorators <MapLabelDecorator>(showMinionAffixesNames);

            Affixes[affix] = affixDef;
            return(affixDef);
        }
 private WorldDecoratorCollection CreateDecorators(float bgRadius, float fgRadius, IBrush bgBrush, IBrush fgBrush,
                                                   IShapePainter bgShapePainter, IShapePainter fgShapePainter, IRadiusTransformator bgRadiusTransformator, IRadiusTransformator fgRadiusTransformator)
 {
     return(new WorldDecoratorCollection(
                new MapShapeDecorator(Hud)
     {
         Brush = bgBrush,
         Radius = bgRadius,
         ShapePainter = bgShapePainter,
         RadiusTransformator = bgRadiusTransformator,
     },
                new MapShapeDecorator(Hud)
     {
         Brush = fgBrush,
         Radius = fgRadius,
         ShapePainter = fgShapePainter,
         RadiusTransformator = fgRadiusTransformator,
     }
                ));
 }
        // TODO : refactor these monstruous signatures.. ><
        public DangerousAffixMonsterDefinition DefineDangerousAffix(MonsterAffix affix, string affixName, int priority = 0,
                                                                    IFont eliteFont     = null, IFont minionFont = null, bool showMinionDecorators = false, bool showMinionAffixesNames = false,
                                                                    float bgEliteRadius = _bgEliteRadius, float fgEliteRadius = _fgEliteRadius, float bgMinionRadius = _bgMinionRadius, float fgMinionRadius = _fgMinionRadius,
                                                                    IBrush bgBrush      = null, IShapePainter bgShapePainter  = null, bool bgPing = false, IRadiusTransformator bgRadiusTransformator = null,
                                                                    IBrush fgBrush      = null, IShapePainter fgShapePainter  = null, bool fgPing = false, IRadiusTransformator fgRadiusTransformator = null)
        {
            AffixNameFunc affixNameFunc;

            if (affixName == null)
            {
                affixNameFunc = (a) => string.Empty;
            }
            else
            {
                affixNameFunc = (a) => affixName;
            }

            return(DefineDangerousAffix(affix, affixNameFunc, priority,
                                        eliteFont, minionFont, showMinionDecorators, showMinionAffixesNames,
                                        bgEliteRadius, fgEliteRadius, bgMinionRadius, fgMinionRadius,
                                        bgBrush, bgShapePainter, bgPing, bgRadiusTransformator,
                                        fgBrush, fgShapePainter, fgPing, fgRadiusTransformator));
        }