protected override void CalculateResult(MapToolContext ctx, Rectangle marqueeBounds, out ItemFieldFragment fragment, out string hint) { Rectangle tileRect = ctx.ToTiles(marqueeBounds); fragment = new ItemFieldFragment(); segmentLayout.CalculateResult(ctx, tileRect, fragment); hint = ""; //droppedItemCount > 0 ? $"{droppedItemCount} Items" : "-"; }
protected override void CalculateResult(MapToolContext ctx, Rectangle marqueeBounds, out ItemFieldFragment fragment, out string hint) { fragment = new ItemFieldFragment(); var tileRect = ctx.ToTiles(marqueeBounds); for (int x = tileRect.Left; x <= tileRect.Right - itemSize.Width; x += itemSize.Width) { for (int y = tileRect.Top; y <= tileRect.Bottom - itemSize.Height; y += itemSize.Height) { Rectangle itemTileRect = new Rectangle(x, y, itemSize.Width, itemSize.Height); fragment.Add(itemTileRect, item, ctx.MapEditingService.IsOccupied(itemTileRect)); } } int itemsX = tileRect.Width / itemSize.Width; int itemsY = tileRect.Height / itemSize.Height; hint = $"{itemsX} × {itemsY}"; }
public bool ModifySelection(Rectangle marqueeBounds, MapToolContext ctx, SelectionAction action) { bool selectionChanged = false; var tileBounds = ctx.ToTiles(marqueeBounds); for (int tileX = tileBounds.Left; tileX < tileBounds.Right; tileX++) { for (int tileY = tileBounds.Top; tileY < tileBounds.Bottom; tileY++) { if (TryGetItemFromItemPt(new Point(tileX, tileY), out var item, out var itemTileBounds)) { Item itemCopy = new Item(item.RawValue); Debug.Assert(itemCopy.IsRoot); SelectedItem selectedItem = new SelectedItem(itemCopy, itemTileBounds); switch (action) { case SelectionAction.Add: selectionChanged |= selectedItems.Add(selectedItem); break; case SelectionAction.Remove: selectionChanged |= selectedItems.Remove(selectedItem); break; default: throw new ArgumentOutOfRangeException(nameof(action), action, null); } } } } if (selectionChanged) { OnSelectionChanged(); } return(selectionChanged); }
protected override void CalculateResult(MapToolContext ctx, Rectangle marqueeBounds, out ItemFieldFragment fragment, out string hint) { var tileRect = ctx.ToTiles(marqueeBounds).Quantize(2); fragment = new ItemFieldFragment(); hint = $"{segmentLayouts.Length} Item(s)"; if (layout.GetSegmentRects(tileRect, segmentLayouts, minSegementSizes, rowCount, out var segmentRects, out var templateHint)) { for (int segmentIndex = 0; segmentIndex < segmentLayouts.Length; segmentIndex++) { segmentLayouts[segmentIndex].CalculateResult(ctx, segmentRects[segmentIndex], fragment); } } if (!string.IsNullOrWhiteSpace(templateHint)) { hint = $"{hint} - {templateHint}"; } }