public bool AddItem(Item item, Point location, IHistoryTransaction trans, CollisionAction collisionAction = CollisionAction.ThrowException) { if (!item.IsRoot) { throw new InvalidOperationException("Only root items may be added to the field."); } Size size = item.GetSize(); var l = mapManager.CurrentLayer; var itemRect = new Rectangle(location, size); if (IsOccupied(itemRect)) { switch (collisionAction) { case CollisionAction.ThrowException: throw new InvalidOperationException("The specified location is already occupied."); case CollisionAction.Abort: return(false); case CollisionAction.Overwrite: DeleteRect(itemRect, trans); break; default: throw new ArgumentOutOfRangeException(nameof(collisionAction), collisionAction, null); } } if (!IsInWorldBounds(itemRect)) { switch (collisionAction) { case CollisionAction.ThrowException: throw new InvalidOperationException("The specified location is outside of the world."); case CollisionAction.Abort: return(false); case CollisionAction.Overwrite: return(false); default: throw new ArgumentOutOfRangeException(nameof(collisionAction), collisionAction, null); } } trans?.AddStep(new AddItemStep(item, location, this)); Item tile = l.GetTile(location); l.SetExtensionTiles(item, location.X, location.Y); tile.CopyFrom(item); return(true); }
public PaintAction(IHistoryService historyService, Item item) { this.transaction = historyService.BeginTransaction("Paint"); this.item = item; this.itemSize = item.GetSize(); }
public void DeleteAll(IHistoryTransaction trans) { DeleteRect(WorldTileBounds, trans); }
public EraseAction(IHistoryService historyService) { this.transaction = historyService.BeginTransaction("Eraser"); }