public void Start() { if (HighLogic.LoadedSceneIsEditor) { return; } try { ConfigNode moduleConfig = null; foreach (ConfigNode node in GameDatabase.Instance.GetConfigNodes("PROP")) { if (node.GetValue("name") == internalProp.propName) { if (string.IsNullOrEmpty(variableName)) { JUtil.LogErrorMessage(this, "Configuration failed in prop {0} ({1}), no variableName.", internalProp.propID, internalProp.propName); throw new ArgumentNullException(); } moduleConfig = node.GetNodes("MODULE")[moduleID]; ConfigNode[] variableNodes = moduleConfig.GetNodes("VARIABLESET"); for (int i = 0; i < variableNodes.Length; i++) { try { variableSets.Add(new CallbackAnimationSet(variableNodes[i], variableName, internalProp)); } catch (ArgumentException e) { JUtil.LogErrorMessage(this, "Error in building prop number {1} - {0}", e.Message, internalProp.propID); } } break; } } RPMVesselComputer comp = RPMVesselComputer.Instance(vessel); del = (Action <RPMVesselComputer, float>)Delegate.CreateDelegate(typeof(Action <RPMVesselComputer, float>), this, "OnCallback"); float value = comp.ProcessVariable(variableName).MassageToFloat(); for (int i = 0; i < variableSets.Count; ++i) { variableSets[i].Update(comp, value); } comp.RegisterCallback(variableName, del); JUtil.LogMessage(this, "Configuration complete in prop {1} ({2}), supporting {0} callback animators.", variableSets.Count, internalProp.propID, internalProp.propName); } catch { JUtil.AnnoyUser(this); enabled = false; throw; } }
public void Start() { RPMVesselComputer comp = RPMVesselComputer.Instance(vessel); Transform textObjTransform = internalProp.FindModelTransform(transformName); textObj = InternalComponents.Instance.CreateText(fontName, fontSize, textObjTransform, string.Empty); // Force oneshot if there's no variables: oneshot |= !labelText.Contains("$&$"); string sourceString = labelText.UnMangleConfigText(); // Alow a " character to escape leading whitespace if (sourceString[0] == '"') { sourceString = sourceString.Substring(1); } spf = new StringProcessorFormatter(sourceString); if (!oneshot) { comp.UpdateDataRefreshRate(refreshRate); } if (!(string.IsNullOrEmpty(variableName) || string.IsNullOrEmpty(positiveColor) || string.IsNullOrEmpty(negativeColor) || string.IsNullOrEmpty(zeroColor))) { positiveColorValue = ConfigNode.ParseColor32(positiveColor); negativeColorValue = ConfigNode.ParseColor32(negativeColor); zeroColorValue = ConfigNode.ParseColor32(zeroColor); del = (Action <RPMVesselComputer, float>)Delegate.CreateDelegate(typeof(Action <RPMVesselComputer, float>), this, "OnCallback"); comp.RegisterCallback(variableName, del); // Initialize the text color. float value = comp.ProcessVariable(variableName).MassageToFloat(); if (value < 0.0f) { textObj.text.Color = negativeColorValue; } else if (value > 0.0f) { textObj.text.Color = positiveColorValue; } else { textObj.text.Color = zeroColorValue; } } }