示例#1
0
        public void Render(IReadOnlyZoneInfo zoneInfo, Rectangle rectangle, IGraphicsWrapper graphics)
        {
            _getDataMeterFunc.WithResultIfHasMatch(f =>
            {
                var dataMeterResult = f().GetDataMeterResult(zoneInfo);

                var brush = BrushManager.Instance.GetBrushFor(dataMeterResult.ValueCategory);
                if (brush.HasMatch)
                {
                    graphics.FillRectangle(brush.MatchingObject, rectangle);
                }

                if (_toggleShowNumbersFunc())
                {
                    var amount = dataMeterResult.Amount;
                    if (amount != 0)
                    {
                        graphics.FillRectangle(BrushManager.DarkNumberSurfaceBrush, rectangle);
                        graphics.DrawString(amount.ToString(),
                                            BrushManager.ZoneInfoFont,
                                            BrushManager.RedSolidBrush,
                                            rectangle);
                    }
                }
            });
        }
示例#2
0
        public RenderZoneContinuation RenderZoneInto(IGraphicsWrapper graphics, bool isHighlighted)
        {
            if (graphics == null)
            {
                throw new ArgumentNullException(nameof(graphics));
            }

            var rectangle = GetRectangle();

            var consumption = ZoneInfo.ZoneConsumptionState.GetZoneConsumption();

            Action drawSecondLayerAction = null;

            QueryResult <AnimatedCellBitmapSetLayers> bitmapLayer = _tilesetAccessor.TryGetBitmapFor(ZoneInfo.TakeSnapshot(), true);

            if (bitmapLayer.HasMatch)
            {
                graphics.DrawImage(Picker.GetFrame(bitmapLayer.MatchingObject.LayerOne).Bitmap.ToSysDrawingBitmap(), rectangle);

                if (bitmapLayer.MatchingObject.LayerTwo.HasMatch)
                {
                    drawSecondLayerAction = () =>
                    {
                        graphics.DrawImage(Picker.GetFrame(bitmapLayer.MatchingObject.LayerTwo.MatchingObject).Bitmap.ToSysDrawingBitmap(), rectangle);
                    }
                }
                ;

                if (_renderZoneOptions.ShowDebugGrowthPathFinding)
                {
                    switch (ZoneInfo.GrowthAlgorithmHighlightState.Current)
                    {
                    case HighlightState.UsedAsPath:
                        graphics.DrawRectangle(BrushManager.GreenPen, rectangle);
                        break;

                    case HighlightState.Examined:
                        graphics.DrawRectangle(BrushManager.YellowPen, rectangle);
                        break;
                    }
                }
            }
            else
            {
                graphics.FillRectangle(BrushManager.Instance.GetBrushFor(consumption), rectangle);
            }

            var overlayOption = _renderZoneOptions.CurrentOverlayOption;

            if (overlayOption != null)
            {
                overlayOption.Render(ZoneInfo, rectangle, graphics);
            }

            if (isHighlighted)
            {
                return(new RenderZoneContinuation(
                           drawSecondLayerAction,

                           (areaConsumption) =>
                {
                    if (areaConsumption is IAreaZoneClusterConsumption)
                    {
                        var sampleZones = (areaConsumption as IAreaZoneClusterConsumption)
                                          .ZoneClusterMembers;

                        var width = sampleZones.GroupBy(x => x.RelativeToParentCenterX).Count() * _tilesetAccessor.TileWidthAndSizeInPixels;
                        var height = sampleZones.GroupBy(x => x.RelativeToParentCenterY).Count() * _tilesetAccessor.TileWidthAndSizeInPixels;

                        var xOffset = sampleZones.Min(x => x.RelativeToParentCenterX) * _tilesetAccessor.TileWidthAndSizeInPixels;
                        var yOffset = sampleZones.Min(x => x.RelativeToParentCenterY) * _tilesetAccessor.TileWidthAndSizeInPixels;

                        rectangle.Size = new Size(
                            width: width,
                            height: height
                            );

                        rectangle.Location = new Point(
                            x: rectangle.Location.X + xOffset, y: rectangle.Location.Y + yOffset);
                    }

                    var pen = (DateTime.Now.Millisecond % 400) > 200 ? BrushManager.BluePen : BrushManager.RedPen;
                    graphics.DrawRectangle(pen, rectangle);
                }));
            }
            return(new RenderZoneContinuation(drawSecondLayerAction, null));
        }
    }
 public BufferedGraphicsManagerWrapper(Panel panel, Action renderAction)
     : base(renderAction)
 {
     _bufferedGraphics = BufferedGraphicsManager.Current.Allocate(panel.CreateGraphics(), panel.DisplayRectangle);
     _wrapper          = new BufferedGraphicsWrapper(_bufferedGraphics);
 }