private static void updateTechLimitCache() { techLimitCache.Clear(); ConfigNode[] techLimitSets = GameDatabase.Instance.GetConfigNodes("TECHLIMITSET"); ConfigNode setNode; ConfigNode[] techLimitNodes; ConfigNode limitNode; string setName; string techName; float techLimit; float setTechLimit; int len = techLimitSets.Length; int len2; bool researchGame = SSTUUtils.isResearchGame(); for (int i = 0; i < len; i++) { setNode = techLimitSets[i]; setName = setNode.GetStringValue("name"); if (techLimitCache.ContainsKey(setName)) { continue; } setTechLimit = float.PositiveInfinity; if (researchGame) { setTechLimit = 0; techLimitNodes = setNode.GetNodes("TECHLIMIT"); len2 = techLimitNodes.Length; for (int k = 0; k < len2; k++) { limitNode = techLimitNodes[k]; techName = limitNode.GetStringValue("name"); techLimit = limitNode.GetFloatValue("diameter"); if (techLimit > setTechLimit && SSTUUtils.isTechUnlocked(techName)) { setTechLimit = techLimit; } } } techLimitCache.Add(setName, setTechLimit); } }
/// <summary> /// Return true if this part should be accessible due to tech-level limitations /// UNUSED /// </summary> /// <returns></returns> public bool isAvailable() { if (String.IsNullOrEmpty(techLimit)) { return(true); } if (HighLogic.CurrentGame == null) { return(true); } if (ResearchAndDevelopment.Instance == null) { return(true); } if (HighLogic.CurrentGame.Mode != Game.Modes.CAREER && HighLogic.CurrentGame.Mode != Game.Modes.SCIENCE_SANDBOX) { return(true); } return(SSTUUtils.isTechUnlocked(techLimit)); }
public static void updateTechLimits(String setName, out float maxDiameter) { maxDiameter = float.PositiveInfinity; if (!SSTUUtils.isResearchGame()) { MonoBehaviour.print("Not a research game, exiting tech limit checks"); return; } if (HighLogic.CurrentGame == null) { MonoBehaviour.print("Current game is null, exiting tech limit checks"); return; } maxDiameter = 0; ConfigNode[] setNodes = GameDatabase.Instance.GetConfigNodes("TECHLIMITSET"); int len = setNodes.Length; string techName; for (int i = 0; i < len; i++) { if (setNodes[i].GetStringValue("name") == setName)//found the specified limit-set-name { ConfigNode[] limitNodes = setNodes[i].GetNodes("TECHLIMIT"); int setLen = limitNodes.Length; float d; for (int k = 0; k < setLen; k++) { techName = limitNodes[k].GetStringValue("name"); if (SSTUUtils.isTechUnlocked(limitNodes[k].GetStringValue("name"))) { d = limitNodes[k].GetFloatValue("diameter"); if (d > maxDiameter) { maxDiameter = d; } } } break; } } }