private void UpdateSelectionConstraints() { constraintsNeedReindexing = false; selectionConstraints.Clear(); // get defs of selected objects, count duplicates foreach (var selectedObject in Find.Selector.SelectedObjects) { var thing = selectedObject as Thing; if (thing == null || thing.def == null || !thing.def.selectable) { continue; } int constraintHash = GetConstraintHashForThing(thing); SelectionDefConstraint constraint; selectionConstraints.TryGetValue(constraintHash, out constraint); if (constraint == null) { selectionConstraints[constraintHash] = constraint = new SelectionDefConstraint(thing.def, thing.Stuff); } constraint.occurences++; } var constraintList = selectionConstraints.Values.ToList(); var builder = new StringBuilder(); constraintList.Sort((e1, e2) => - e1.occurences.CompareTo(e2.occurences)); // sort by number of occurences, descending // list constraints for the tooltip for (int i = 0; i < constraintList.Count; i++) { var isLastEntry = i >= constraintList.Count - 1; var constraint = constraintList[i]; if (i < MaxNumListedConstraints - 1 || isLastEntry) { if (constraint.thingDef.label == null) { continue; } builder.Append(constraint.thingDef.label.CapitalizeFirst()); if (constraint.stuffDef != null && constraint.stuffDef.label != null) { builder.AppendFormat(" ({0})", constraint.stuffDef.label.CapitalizeFirst()); } if (!isLastEntry) { builder.Append(ConstraintListSeparator); } } else { builder.Append("MassSelect_numMoreTypes".Translate(constraintList.Count - i)); break; } } cachedConstraintReadout = builder.ToString(); if (cachedConstraintReadout.Length == 0) { cachedConstraintReadout = "MassSelect_anything".Translate(); // nothing was selected } }
// generate an index of defs to compare other things against, based on currently selected things public void ReindexSelectionConstraints() { try { var selector = Find.Selector; constraintsNeedReindexing = false; selectionConstraints.Clear(); readableConstraintList = ""; if (selector.NumSelected == 0) { return; } // get defs of selected objects, count duplicates foreach (var selectedObject in selector.SelectedObjects) { var thing = selectedObject as Thing; if (thing?.def == null || !thing.def.selectable) { continue; } int constraintHash = GetConstraintHashForThing(thing); SelectionDefConstraint constraint; selectionConstraints.TryGetValue(constraintHash, out constraint); if (constraint == null) { selectionConstraints[constraintHash] = constraint = new SelectionDefConstraint(thing.def, thing.Stuff); } constraint.occurrences++; } var constraintList = selectionConstraints.Values.ToList(); var builder = new StringBuilder(); constraintList.Sort((e1, e2) => - e1.occurrences.CompareTo(e2.occurrences)); // sort by number of occurrences, descending // list constraints for the tooltip for (int i = 0; i < constraintList.Count; i++) { var isLastEntry = i >= constraintList.Count - 1; var constraint = constraintList[i]; if (i < MaxNumListedConstraints - 1 || isLastEntry) { if (constraint.thingDef.label == null) { continue; } builder.Append(constraint.thingDef.label.CapitalizeFirst()); if (constraint.stuffDef?.label != null) { builder.AppendFormat(" ({0})", constraint.stuffDef.label.CapitalizeFirst()); } if (!isLastEntry) { builder.Append(ConstraintListSeparator); } } else { builder.Append("SelectSimilar_numMoreTypes".Translate(constraintList.Count - i)); break; } } readableConstraintList = builder.ToString(); } catch (Exception e) { AllowToolController.Logger.ReportException(e); } }
private void UpdateSelectionConstraints() { constraintsNeedReindexing = false; selectionConstraints.Clear(); // get defs of selected objects, count duplicates foreach (var selectedObject in Find.Selector.SelectedObjects) { var thing = selectedObject as Thing; if (thing == null || thing.def == null || !thing.def.selectable) continue; int constraintHash = GetConstraintHashForThing(thing); SelectionDefConstraint constraint; selectionConstraints.TryGetValue(constraintHash, out constraint); if (constraint == null) selectionConstraints[constraintHash] = constraint = new SelectionDefConstraint(thing.def, thing.Stuff); constraint.occurences++; } var constraintList = selectionConstraints.Values.ToList(); var builder = new StringBuilder(); constraintList.Sort((e1, e2) => -e1.occurences.CompareTo(e2.occurences)); // sort by number of occurences, descending // list constraints for the tooltip for (int i = 0; i < constraintList.Count; i++) { var isLastEntry = i >= constraintList.Count - 1; var constraint = constraintList[i]; if (i < MaxNumListedConstraints - 1 || isLastEntry) { if (constraint.thingDef.label == null) continue; builder.Append(constraint.thingDef.label.CapitalizeFirst()); if (constraint.stuffDef != null && constraint.stuffDef.label != null) { builder.AppendFormat(" ({0})", constraint.stuffDef.label.CapitalizeFirst()); } if (!isLastEntry) builder.Append(ConstraintListSeparator); } else { builder.Append("MassSelect_numMoreTypes".Translate(constraintList.Count - i)); break; } } cachedConstraintReadout = builder.ToString(); if (cachedConstraintReadout.Length == 0) cachedConstraintReadout = "MassSelect_anything".Translate(); // nothing was selected }