private void InjectDesignators() {
activeDesignators.Clear();
var numDesignatorsInjected = 0;
foreach (var designatorDef in DefDatabase<ThingDesignatorDef>.AllDefs) {
if (designatorDef.Injected) continue;
var resolvedDesignators = (List<Designator>)resolvedDesignatorsField.GetValue(designatorDef.Category);
var insertIndex = -1;
for (var i = 0; i < resolvedDesignators.Count; i++) {
if(resolvedDesignators[i].GetType() != designatorDef.insertAfter) continue;
insertIndex = i;
break;
}
if (insertIndex >= 0) {
var designator = (Designator_SelectableThings)Activator.CreateInstance(designatorDef.designatorClass, designatorDef);
resolvedDesignators.Insert(insertIndex + 1, designator);
var handle = Settings.GetHandle("show" + designatorDef.defName, "setting_showTool_label".Translate(designatorDef.label), null, true);
designator.SetVisible(handle.Value);
activeDesignators.Add(new DesignatorEntry(designator, designatorDef.hotkeyDef, handle));
numDesignatorsInjected++;
} else {
Logger.Error(string.Format("Failed to inject {0} after {1}", designatorDef.defName, designatorDef.insertAfter.Name));
}
designatorDef.Injected = true;
}
if (numDesignatorsInjected > 0) {
Logger.Trace("Injected " + numDesignatorsInjected + " designators");
}
}