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); } } }); }
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); }