/// <summary> /// Removes an assignment and recover pruned variables /// </summary> /// <param name="var">Removes the assignment for this variable and adds pruned variables.</param> public void RemoveValue(Variable var) { Vector2 varPos = var.pos; Assignment assign = assignments.First(a => a.variable.pos == varPos); foreach (var varPrune in assign.domainPrune.Keys) { List <OverFloorType> valuesPruned = assign.domainPrune[varPrune]; Variable varToUnprune = vars.First(v => v.pos == varPrune); foreach (var vPrune in valuesPruned) { varToUnprune.addDomainElement(vPrune); } } assignments.Remove(assign); }