private ToolOutcome Apply(IActionQueue actionQueue, IToolBehavior toolBehavior, IToolBrush toolBrush, IEnumerable <Vector> inputPositions) { IEnumerable <Vector> toolPositions = toolBrush.ComputePositions(inputPositions); var action = toolBehavior.CreateActions(toolPositions); void ValidatedAction(World gs) { if (Validate(gs, toolBehavior, toolPositions)) { action(gs); } else { throw new InvalidOperationException("Action is not valid"); } } // TODO: don't use exception to control the flow. Need google for this. try { actionQueue.ExecuteSynchronously(ValidatedAction); return(ToolOutcome.Success); } catch (InvalidOperationException) { return(ToolOutcome.Failure); } }
private IEnumerable <Vector> ConvertPositions(IEnumerable <Vector> input, IToolBrush toolBrush) { if (toolBrush.IsValid(input)) { return(toolBrush.ComputePositions(input)); } else { return(null); } }
private ToolPreviewOutcome Preview(IWorldView worldView, IToolBehavior toolBehavior, IToolBrush toolBrush, IEnumerable <Vector> inputPositions) { IEnumerable <Vector> toolPositions = toolBrush.ComputePositions(inputPositions); return(toolBehavior.Preview(worldView, toolPositions)); }