예제 #1
0
        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);
            }
        }
예제 #2
0
        // 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);
        }
예제 #3
0
 public InputValidator(ValidationPredicate validationPredicate, Color valid, Color invalid)
 {
     _validationPredicate = validationPredicate;
     _valid   = valid;
     _invalid = invalid;
 }
예제 #4
0
 public InputValidator(ValidationPredicate validationPredicate)
     : this(validationPredicate, Constants.Valid, Constants.Invalid)
 {
 }