// Validate ...research...? public override bool Validate() { // Hopefully... var stringBuilder = new StringBuilder(); var rVal = true; CCL_Log.CaptureBegin(stringBuilder); var AdvancedResearchDefs = Controller.Data.AdvancedResearchDefs; // Make sure the hidden research exists if (CommunityCoreLibrary.Research.Locker == null) { CCL_Log.Trace(Verbosity.FatalErrors, "Missing research locker!"); rVal = false; } // Validate each advanced research def for (int index = AdvancedResearchDefs.Count - 1; index >= 0; index--) { var advancedResearchDef = AdvancedResearchDefs[index]; if (!advancedResearchDef.IsValid()) { // Remove projects with errors from list of usable projects AdvancedResearchDefs.Remove(advancedResearchDef); rVal = false; continue; } if (advancedResearchDef.IsLockedOut()) { // Remove locked out projects CCL_Log.TraceMod( advancedResearchDef, Verbosity.Warnings, "Def is locked out by one or more research prerequisites"); AdvancedResearchDefs.Remove(advancedResearchDef); continue; } } #if DEBUG if (rVal == true) { var allMods = Controller.Data.Mods; foreach (var mod in allMods) { if (!Find_Extensions.DefListOfTypeForMod <AdvancedResearchDef>(mod).NullOrEmpty()) { CCL_Log.TraceMod( mod, Verbosity.Validation, "Passed validation" ); } } } #endif // Should be empty or a laundry list CCL_Log.CaptureEnd( stringBuilder, rVal ? "Validated" : "Errors during validation" ); strReturn = stringBuilder.ToString(); // Return true if all mods OK, false if any failed validation State = rVal ? SubControllerState.Validated : SubControllerState.ValidationError; return(rVal); }