Esempio n. 1
0
        void PollLoopWidgets()
        {
            for (int i = loopPanelWidgets.Count - 1; i >= 0; i--)
            {
                if (!simulator.HasLoop(loopPanelWidgets[i].trackedLoopID))
                {
                    Destroy(loopPanelWidgets[i].gameObject);
                    loopPanelWidgets.RemoveAt(i);
                }
            }
            foreach (HeatLoop loop in simulator.HeatLoops)
            {
                bool generateWidget = true;
                for (int i = loopPanelWidgets.Count - 1; i >= 0; i--)
                {
                    if (loopPanelWidgets[i].trackedLoopID == loop.ID)
                    {
                        generateWidget = false;
                    }
                }

                if (generateWidget)
                {
                    Utils.Log("[UI]: Generatoing a new loop widget", LogType.UI);
                    GameObject newObj = (GameObject)Instantiate(SystemHeatUILoader.ToolbarPanelLoopPrefab, Vector3.zero, Quaternion.identity);
                    newObj.transform.SetParent(loopPanelScrollRoot.transform);
                    //newWidget.transform.localPosition = Vector3.zero;
                    ToolbarPanelLoopWidget newWidget = newObj.AddComponent <ToolbarPanelLoopWidget>();
                    newWidget.AssignSimulator(simulator);
                    newWidget.SetLoop(loop.ID);
                    newWidget.SetVisible(true);
                    loopPanelWidgets.Add(newWidget);
                }
            }
        }
Esempio n. 2
0
        void Update()
        {
            if (trackedLoopID != -1 && simulator != null && simulator.HasLoop(trackedLoopID))
            {
                HeatLoop lp = simulator.Loop(trackedLoopID);

                temperatureTextValue.text = Localizer.Format("#LOC_SystemHeat_ToolbarPanel_LoopTemperatureValue",
                                                             lp.Temperature.ToString("F0"),
                                                             lp.NominalTemperature.ToString("F0"));

                string prefix = "";
                if (lp.NetFlux == 0f)
                {
                    prefix = "";
                }
                if (lp.NetFlux > 0f)
                {
                    prefix = "+";
                }
                if (lp.NetFlux < 0f)
                {
                    prefix = "";
                }

                fluxTextValue.text = Localizer.Format("#LOC_SystemHeat_ToolbarPanel_LoopFluxValue", prefix,
                                                      lp.NetFlux.ToString("F1"));

                if (lp.Temperature >= lp.NominalTemperature)
                {
                    Color32 c;
                    HexColorField.HexToColor("fe8401", out c);
                    temperatureTextValue.color = c;
                }
                else
                {
                    Color32 c;
                    HexColorField.HexToColor("B4D455", out c);
                    temperatureTextValue.color = c;
                }

                if (lp.NetFlux > 0)
                {
                    Color32 c;
                    HexColorField.HexToColor("fe8401", out c);
                    fluxTextValue.color = c;
                }
                else
                {
                    Color32 c;
                    HexColorField.HexToColor("B4D455", out c);
                    fluxTextValue.color = c;
                }
            }
        }
Esempio n. 3
0
        protected void LateUpdate()
        {
            if (simulator != null && !(HighLogic.LoadedSceneIsFlight && MapView.MapIsEnabled))
            {
                if (simulator.HeatLoops == null || simulator.HeatLoops.Count == 0)
                {
                    Utils.Log(String.Format("[SystemHeatOverlay]: No loops, destroying overlay"), LogType.Overlay);
                    DestroyOverlay();
                }
                // Update each loop, build a new loop when needed
                foreach (HeatLoop loop in simulator.HeatLoops)
                {
                    // if we have an overlay for this loop, update it
                    OverlayLoop curOverlay = overlayLoops.FirstOrDefault(x => x.heatLoop.ID == loop.ID);
                    if (curOverlay != null)
                    {
                        // if no modules, hide the loop
                        if (loop.LoopModules.Count <= 1 && curOverlay.Drawn)
                        {
                            Utils.Log(String.Format("[SystemHeatOverlay]: Loop has < 2 members, hiding"), LogType.Overlay);
                            curOverlay.SetVisible(false);
                        }
                        else
                        {
                            curOverlay.SetVisible((SystemHeatUI.Instance.OverlayMasterState && SystemHeatUI.Instance.OverlayLoopState(loop.ID)));
                            if (curOverlay.Drawn)
                            {
                                curOverlay.Update(loop);
                            }
                        }
                    }
                    // else build a new loop
                    else
                    {
                        Utils.Log(String.Format("[SystemHeatOverlay]: Building a new overlay for loop {0}", loop.ID), LogType.Overlay);
                        overlayLoops.Add(new OverlayLoop(loop, overlayRoot, (SystemHeatUI.Instance.OverlayMasterState && SystemHeatUI.Instance.OverlayLoopState(loop.ID))));
                    }

                    foreach (ModuleSystemHeat system in loop.LoopModules)
                    {
                        int index = overlayPanels.FindIndex(f => f.heatModule == system);
                        if (index == -1)
                        {
                            Utils.Log($"[SystemHeatOverlay]: Building new OverlayPanel for system {system.moduleID}", LogType.Overlay);
                            // new panel instance
                            GameObject newUIPanel = (GameObject)Instantiate(SystemHeatUILoader.OverlayPanelPrefab, Vector3.zero, Quaternion.identity);
                            newUIPanel.transform.SetParent(UIMasterController.Instance.actionCanvas.transform);
                            newUIPanel.transform.localPosition = Vector3.zero;
                            OverlayPanel panel = newUIPanel.AddComponent <OverlayPanel>();
                            panel.parentCanvas = UIMasterController.Instance.appCanvas;
                            panel.SetupLoop(loop, system, (SystemHeatUI.Instance.OverlayMasterState && SystemHeatUI.Instance.OverlayLoopState(loop.ID)));
                            overlayPanels.Add(panel);
                        }
                        else
                        {
                            // Update the panel
                            overlayPanels[index].UpdateLoop(loop, system, (SystemHeatUI.Instance.OverlayMasterState && SystemHeatUI.Instance.OverlayLoopState(loop.ID)));
                        }
                    }
                }


                for (int i = overlayPanels.Count - 1; i >= 0; i--)
                {
                    if (overlayPanels[i].heatModule == null)
                    {
                        Utils.Log(String.Format("[SystemHeatOverlay]: Destroying unusued overlay panel"), LogType.Overlay);

                        Destroy(overlayPanels[i].gameObject);
                        overlayPanels.RemoveAt(i);
                    }
                }
                foreach (OverlayLoop l in overlayLoops)
                {
                    if (!simulator.HasLoop(l.heatLoop.ID))
                    {
                        l.SetVisible(false);
                    }
                }
            }
            else
            {
                DestroyOverlay();
                foreach (OverlayPanel panel in overlayPanels)
                {
                    panel.SetVisibility(false);
                }
            }
        }