Ejemplo n.º 1
0
        /// <summary>
        /// Configure this computer for operation.
        /// </summary>
        public void Start()
        {
            if (!HighLogic.LoadedSceneIsEditor)
            {
                vid             = vessel.id;
                refreshDataRate = RPMGlobals.defaultRefreshRate;

                GameEvents.onVesselWasModified.Add(onVesselWasModified);
                GameEvents.onVesselChange.Add(onVesselChange);
                GameEvents.onVesselCrewWasModified.Add(onVesselCrewWasModified);

                installedModules.Add(new JSIParachute(vessel));
                installedModules.Add(new JSIMechJeb(vessel));
                installedModules.Add(new JSIInternalRPMButtons(vessel));
                installedModules.Add(new JSIFAR(vessel));
                installedModules.Add(new JSIKAC(vessel));
#if ENABLE_ENGINE_MONITOR
                installedModules.Add(new JSIEngine(vessel));
#endif
                installedModules.Add(new JSIPilotAssistant(vessel));
                installedModules.Add(new JSIChatterer(vessel));

                if (string.IsNullOrEmpty(RPMCid))
                {
                    id     = Guid.NewGuid();
                    RPMCid = id.ToString();
                    if (part.internalModel != null)
                    {
                        JUtil.LogMessage(this, "Start: Creating GUID {0} in {1}", id, part.internalModel.internalName);
                    }
                    else
                    {
                        JUtil.LogMessage(this, "Start: Creating GUID {0}", id);
                    }
                }
                else
                {
                    id = new Guid(RPMCid);
                    if (part.internalModel != null)
                    {
                        JUtil.LogMessage(this, "Start: Loading GUID string {0} in {1}", RPMCid, part.internalModel.internalName);
                    }
                    else
                    {
                        JUtil.LogMessage(this, "Start: Loading GUID {0}", id);
                    }
                }

                plugins = new ExternalVariableHandlers(part);

                RPMVesselComputer comp = RPMVesselComputer.Instance(vessel);
                if (!string.IsNullOrEmpty(vesselDescription))
                {
                    comp.SetVesselDescription(vesselDescription);
                }
                var restoredPersistents = comp.RestorePersistents(id);
                if (restoredPersistents != null)
                {
                    persistentVars = restoredPersistents;
                }

                // Make sure we have the description strings parsed.
                string[] descriptionStrings = vesselDescription.UnMangleConfigText().Split(JUtil.LineSeparator, StringSplitOptions.None);
                for (int i = 0; i < descriptionStrings.Length; i++)
                {
                    if (descriptionStrings[i].StartsWith("AG", StringComparison.Ordinal) && descriptionStrings[i][3] == '=')
                    {
                        uint groupID;
                        if (uint.TryParse(descriptionStrings[i][2].ToString(), out groupID))
                        {
                            descriptionStrings[i] = string.Empty;
                        }
                    }
                }
                vesselDescriptionForDisplay = string.Join(Environment.NewLine, descriptionStrings).MangleConfigText();
                if (string.IsNullOrEmpty(vesselDescriptionForDisplay))
                {
                    vesselDescriptionForDisplay = " "; // Workaround for issue #466.
                }

                // Now let's parse our stored strings...
                if (!string.IsNullOrEmpty(storedStrings))
                {
                    var storedStringsSplit = storedStrings.Split('|');
                    for (int i = 0; i < storedStringsSplit.Length; ++i)
                    {
                        storedStringsArray.Add(storedStringsSplit[i]);
                    }
                }

                // TODO: If there are triggered events, register for an undock
                // callback so we can void and rebuild the callbacks after undocking.
                // Although it didn't work when I tried it...
                if (!string.IsNullOrEmpty(triggeredEvents))
                {
                    string[] varstring = triggeredEvents.Split('|');
                    for (int i = 0; i < varstring.Length; ++i)
                    {
                        AddTriggeredEvent(varstring[i].Trim());
                    }
                }

                ConfigNode[] moduleConfigs = part.partInfo.partConfig.GetNodes("MODULE");
                for (int moduleId = 0; moduleId < moduleConfigs.Length; ++moduleId)
                {
                    if (moduleConfigs[moduleId].GetValue("name") == moduleName)
                    {
                        ConfigNode[] overrideColorSetup = moduleConfigs[moduleId].GetNodes("RPM_COLOROVERRIDE");
                        for (int colorGrp = 0; colorGrp < overrideColorSetup.Length; ++colorGrp)
                        {
                            ConfigNode[] colorConfig = overrideColorSetup[colorGrp].GetNodes("COLORDEFINITION");
                            for (int defIdx = 0; defIdx < colorConfig.Length; ++defIdx)
                            {
                                if (colorConfig[defIdx].HasValue("name") && colorConfig[defIdx].HasValue("color"))
                                {
                                    string  name  = "COLOR_" + (colorConfig[defIdx].GetValue("name").Trim());
                                    Color32 color = ConfigNode.ParseColor32(colorConfig[defIdx].GetValue("color").Trim());
                                    if (overrideColors.ContainsKey(name))
                                    {
                                        overrideColors[name] = color;
                                    }
                                    else
                                    {
                                        overrideColors.Add(name, color);
                                    }
                                }
                            }
                        }
                    }
                }

                UpdateLocalCrew();
                UpdateLocalVars();
            }
        }
        // Damnit, looks like this needs a separate start.
        public void Start()
        {
            JUtil.logQuiet = debugLogging;

            if (!HighLogic.LoadedSceneIsEditor) {

                gearGroupNumber = BaseAction.GetGroupIndex(KSPActionGroup.Gear);
                brakeGroupNumber = BaseAction.GetGroupIndex(KSPActionGroup.Brakes);
                sasGroupNumber = BaseAction.GetGroupIndex(KSPActionGroup.SAS);
                lightGroupNumber = BaseAction.GetGroupIndex(KSPActionGroup.Light);
                rcsGroupNumber = BaseAction.GetGroupIndex(KSPActionGroup.RCS);

                KSPActionGroup[] customGroups = {
                    KSPActionGroup.Custom10,
                    KSPActionGroup.Custom01,
                    KSPActionGroup.Custom02,
                    KSPActionGroup.Custom03,
                    KSPActionGroup.Custom04,
                    KSPActionGroup.Custom05,
                    KSPActionGroup.Custom06,
                    KSPActionGroup.Custom07,
                    KSPActionGroup.Custom08,
                    KSPActionGroup.Custom09,
                };

                for (int i = 0; i < 10; i++) {
                    actionGroupID[i] = BaseAction.GetGroupIndex(customGroups[i]);
                }

                FetchPerPartData();
                standardAtmosphere = FlightGlobals.getAtmDensity(FlightGlobals.getStaticPressure(0, FlightGlobals.Bodies[1]));

                // We instantiate plugins late.
                plugins = new ExternalVariableHandlers(this);

            }
        }
        /// <summary>
        /// Configure this computer for operation.
        /// </summary>
        public void Start()
        {
            if (!HighLogic.LoadedSceneIsEditor)
            {
                vid = vessel.id;
                refreshDataRate = RPMGlobals.defaultRefreshRate;

                GameEvents.onVesselWasModified.Add(onVesselWasModified);
                GameEvents.onVesselChange.Add(onVesselChange);
                GameEvents.onVesselCrewWasModified.Add(onVesselCrewWasModified);

                installedModules.Add(new JSIParachute(vessel));
                installedModules.Add(new JSIMechJeb(vessel));
                installedModules.Add(new JSIInternalRPMButtons(vessel));
                installedModules.Add(new JSIFAR(vessel));
                installedModules.Add(new JSIKAC(vessel));
            #if ENABLE_ENGINE_MONITOR
                installedModules.Add(new JSIEngine(vessel));
            #endif
                installedModules.Add(new JSIPilotAssistant(vessel));
                installedModules.Add(new JSIChatterer(vessel));

                if (string.IsNullOrEmpty(RPMCid))
                {
                    id = Guid.NewGuid();
                    RPMCid = id.ToString();
                    if (part.internalModel != null)
                    {
                        JUtil.LogMessage(this, "Start: Creating GUID {0} in {1}", id, part.internalModel.internalName);
                    }
                    else
                    {
                        JUtil.LogMessage(this, "Start: Creating GUID {0}", id);
                    }
                }
                else
                {
                    id = new Guid(RPMCid);
                    if (part.internalModel != null)
                    {
                        JUtil.LogMessage(this, "Start: Loading GUID string {0} in {1}", RPMCid, part.internalModel.internalName);
                    }
                    else
                    {
                        JUtil.LogMessage(this, "Start: Loading GUID {0}", id);
                    }
                }

                plugins = new ExternalVariableHandlers(part);

                RPMVesselComputer comp = RPMVesselComputer.Instance(vessel);
                if (!string.IsNullOrEmpty(vesselDescription))
                {
                    comp.SetVesselDescription(vesselDescription);
                }
                var restoredPersistents = comp.RestorePersistents(id);
                if (restoredPersistents != null)
                {
                    persistentVars = restoredPersistents;
                }

                // Make sure we have the description strings parsed.
                string[] descriptionStrings = vesselDescription.UnMangleConfigText().Split(JUtil.LineSeparator, StringSplitOptions.None);
                for (int i = 0; i < descriptionStrings.Length; i++)
                {
                    if (descriptionStrings[i].StartsWith("AG", StringComparison.Ordinal) && descriptionStrings[i][3] == '=')
                    {
                        uint groupID;
                        if (uint.TryParse(descriptionStrings[i][2].ToString(), out groupID))
                        {
                            descriptionStrings[i] = string.Empty;
                        }
                    }
                }
                vesselDescriptionForDisplay = string.Join(Environment.NewLine, descriptionStrings).MangleConfigText();
                if (string.IsNullOrEmpty(vesselDescriptionForDisplay))
                {
                    vesselDescriptionForDisplay = " "; // Workaround for issue #466.
                }

                // Now let's parse our stored strings...
                if (!string.IsNullOrEmpty(storedStrings))
                {
                    var storedStringsSplit = storedStrings.Split('|');
                    for (int i = 0; i < storedStringsSplit.Length; ++i)
                    {
                        storedStringsArray.Add(storedStringsSplit[i]);
                    }
                }

                // TODO: If there are triggered events, register for an undock
                // callback so we can void and rebuild the callbacks after undocking.
                // Although it didn't work when I tried it...
                if (!string.IsNullOrEmpty(triggeredEvents))
                {
                    string[] varstring = triggeredEvents.Split('|');
                    for (int i = 0; i < varstring.Length; ++i)
                    {
                        AddTriggeredEvent(varstring[i].Trim());
                    }
                }

                ConfigNode[] moduleConfigs = part.partInfo.partConfig.GetNodes("MODULE");
                for (int moduleId = 0; moduleId < moduleConfigs.Length; ++moduleId)
                {
                    if (moduleConfigs[moduleId].GetValue("name") == moduleName)
                    {
                        ConfigNode[] overrideColorSetup = moduleConfigs[moduleId].GetNodes("RPM_COLOROVERRIDE");
                        for (int colorGrp = 0; colorGrp < overrideColorSetup.Length; ++colorGrp)
                        {
                            ConfigNode[] colorConfig = overrideColorSetup[colorGrp].GetNodes("COLORDEFINITION");
                            for (int defIdx = 0; defIdx < colorConfig.Length; ++defIdx)
                            {
                                if (colorConfig[defIdx].HasValue("name") && colorConfig[defIdx].HasValue("color"))
                                {
                                    string name = "COLOR_" + (colorConfig[defIdx].GetValue("name").Trim());
                                    Color32 color = ConfigNode.ParseColor32(colorConfig[defIdx].GetValue("color").Trim());
                                    if (overrideColors.ContainsKey(name))
                                    {
                                        overrideColors[name] = color;
                                    }
                                    else
                                    {
                                        overrideColors.Add(name, color);
                                    }
                                }
                            }
                        }
                    }
                }

                UpdateLocalCrew();
                UpdateLocalVars();
            }
        }