protected void ValidateProperty(string propertyName, object value, ValidationPredicate predicate) { ICollection <string> validationErrors = predicate(value); bool isValid = validationErrors != null && validationErrors.Count() == 0; if (!isValid) { _validationErrors[propertyName] = validationErrors; RaiseErrorsChanged(propertyName); } else if (_validationErrors.ContainsKey(propertyName)) { _validationErrors.Remove(propertyName); RaiseErrorsChanged(propertyName); } }
// Expands cell designations iteratively to adjacent cells that are deemed valid by the expansionFilter. // Returns the number of additional cells designated. private int FloodExpandDesignationType(DesignationDef designationDef, Map map, ValidationPredicate initialFilter, ValidationPredicate expansionFilter) { var designatedCells = map.designationManager.SpawnedDesignationsOfDef(designationDef).Where(d => !d.target.HasThing).Select(d => d.target.Cell).ToList(); var markedCells = new HashSet <IntVec3>(designatedCells); var cellsToProcess = new Queue <IntVec3>(designatedCells.Where(c => initialFilter(c, map))); var adjacent = GenAdj.AdjacentCellsAround; var cyclesLimit = 1000000; var hitCount = 0; while (cellsToProcess.Count > 0 && cyclesLimit > 0) { cyclesLimit--; var baseCell = cellsToProcess.Dequeue(); for (int i = 0; i < adjacent.Length; i++) { var cell = baseCell + adjacent[i]; if (!markedCells.Contains(cell) && expansionFilter(cell, map)) { map.designationManager.AddDesignation(new Designation(cell, designationDef)); markedCells.Add(cell); hitCount++; cellsToProcess.Enqueue(cell); } } } if (cyclesLimit == 0) { AllowToolController.Instance.Logger.Error("Ran out of cycles while expanding designations: " + Environment.StackTrace); } return(hitCount); }
public InputValidator(ValidationPredicate validationPredicate, Color valid, Color invalid) { _validationPredicate = validationPredicate; _valid = valid; _invalid = invalid; }
public InputValidator(ValidationPredicate validationPredicate) : this(validationPredicate, Constants.Valid, Constants.Invalid) { }