コード例 #1
0
        public override void OnUpdate()
        {
            //Update Events
            Events["ActivateReactor"].active   = !IsEnabled && !IsNuclear;
            Events["DeactivateReactor"].active = IsEnabled && !IsNuclear;
            Events["BreedTritium"].active      = !breedtritium && IsNeutronRich && IsEnabled;
            Events["StopBreedTritium"].active  = breedtritium && IsNeutronRich && IsEnabled;
            Events["RetrofitReactor"].active   = ResearchAndDevelopment.Instance != null ? !isupgraded && ResearchAndDevelopment.Instance.Science >= upgradeCost && hasrequiredupgrade : false;
            //Update Fields
            Fields["currentTPwr"].guiActive = IsEnabled && (ongoing_thermal_power_f > 0);
            Fields["currentCPwr"].guiActive = IsEnabled && (ongoing_charged_power_f > 0);
            fuelModeStr = current_fuel_mode != null ? current_fuel_mode.ModeGUIName : "";
            //
            reactorTypeStr = isupgraded ? upgradedName != "" ? upgradedName : originalName : originalName;
            coretempStr    = CoreTemperature.ToString("0") + " K";
            if (update_count - last_draw_update > 10)
            {
                if (IsEnabled)
                {
                    if (current_fuel_mode != null && !current_fuel_mode.ReactorFuels.Any(fuel => getFuelAvailability(fuel) <= 0))
                    {
                        if (ongoing_thermal_power_f > 0)
                        {
                            currentTPwr = PluginHelper.getFormattedPowerString(ongoing_thermal_power_f) + "_th";
                        }
                        if (ongoing_charged_power_f > 0)
                        {
                            currentCPwr = PluginHelper.getFormattedPowerString(ongoing_charged_power_f) + "_cp";
                        }
                        statusStr = "Active (" + powerPcnt.ToString("0.00") + "%)";
                    }
                    else if (current_fuel_mode != null)
                    {
                        statusStr = current_fuel_mode.ReactorFuels.FirstOrDefault(fuel => getFuelAvailability(fuel) <= 0).FuelName + " Deprived";
                    }
                }
                else
                {
                    if (powerPcnt > 0)
                    {
                        statusStr = "Decay Heating (" + powerPcnt.ToString("0.00") + "%)";
                    }
                    else
                    {
                        statusStr = "Offline";
                    }
                }

                last_draw_update = update_count;
            }
            if (!vessel.isActiveVessel || part == null)
            {
                RenderingManager.RemoveFromPostDrawQueue(0, OnGUI);
            }
            update_count++;
        }
コード例 #2
0
        public override void OnUpdate()
        {
            bool transmitter_on = has_transmitter && part_transmitter.isActive();

            Events["ActivateReceiver"].active = !receiverIsEnabled && !transmitter_on;
            Events["DisableReceiver"].active  = receiverIsEnabled;
            Fields["toteff"].guiActive        = (connectedsatsi > 0 || connectedrelaysi > 0);

            if (IsThermalSource)
            {
                coreTempererature = CoreTemperature.ToString("0.0") + " K";
                Fields["coreTempererature"].guiActive = true;
            }
            else
            {
                Fields["coreTempererature"].guiActive = false;
            }

            Fields["coreTempererature"].guiActive = IsThermalSource;

            if (receiverIsEnabled)
            {
                if (powerInput > 1000)
                {
                    beamedpower = (powerInput / 1000).ToString("0.00") + "MW";
                }
                else
                {
                    beamedpower = powerInput.ToString("0.00") + "KW";
                }
            }
            else
            {
                beamedpower = "Offline.";
            }

            connectedsats      = string.Format("{0}/{1}", connectedsatsi, MicrowaveSources.instance.transmitters.Count);
            connectedrelays    = string.Format("{0}/{1}", connectedrelaysi, MicrowaveSources.instance.relays.Count);
            networkDepthString = networkDepth.ToString();
            toteff             = (efficiency_d * 100).ToString("0.00") + "%";

            if (anim != null)
            {
                if (connectedsatsi > 0 || connectedrelaysi > 0)
                {
                    if (play_up)
                    {
                        play_down            = true;
                        play_up              = false;
                        anim[animName].speed = 1f;
                        anim.Blend(animName, 2f);
                    }
                }
                else
                {
                    if (play_down)
                    {
                        play_down = false;
                        play_up   = true;

                        if (anim[animName].normalizedTime == 0.0f)
                        {
                            anim[animName].normalizedTime = 1.0f;
                        }

                        anim[animName].speed = -1f;
                        anim.Blend(animName, 2f);
                    }
                }
            }
        }
コード例 #3
0
        public override void OnStart(PartModule.StartState state)
        {
            PowerOutputBase         = PowerOutput;
            upgradedPowerOutputBase = upgradedPowerOutput;

            // Gui Fields
            Fields["partMass"].guiActiveEditor = partMass > 0;

            String[] resources_to_supply = { FNResourceManager.FNRESOURCE_THERMALPOWER, FNResourceManager.FNRESOURCE_WASTEHEAT, FNResourceManager.FNRESOURCE_CHARGED_PARTICLES };
            this.resources_to_supply = resources_to_supply;
            print("[KSP Interstellar] Configuring Reactor Fuel Modes");
            fuel_modes = getReactorFuelModes();
            setDefaultFuelMode();
            print("[KSP Interstellar] Configuration Complete");
            var rnd = new System.Random();

            windowID = rnd.Next(int.MaxValue);
            base.OnStart(state);


            if (state == StartState.Editor)
            {
                print("[KSPI] Checking for upgrade tech: " + UpgradeTechnology);

                if (this.HasTechsRequiredToUpgrade() || CanPartUpgradeAlternative())
                {
                    print("[KSPI] Found required upgradeTech, Upgrading Reactor");
                    upgradePartModule();
                }

                maximumThermalPowerFloat = MaximumThermalPower;
                reactorTypeStr           = isupgraded ? upgradedName != "" ? upgradedName : originalName : originalName;
                coretempStr = CoreTemperature.ToString("0") + " K";

                return;
            }

            if (this.HasTechsRequiredToUpgrade() || CanPartUpgradeAlternative())
            {
                hasrequiredupgrade = true;
            }

            if (!reactorInit && startDisabled)
            {
                last_active_time = (float)(Planetarium.GetUniversalTime() - 4.0 * GameConstants.EARH_DAY_SECONDS);
                IsEnabled        = false;
                startDisabled    = false;
                reactorInit      = true;
            }
            else if (!reactorInit)
            {
                IsEnabled   = true;
                reactorInit = true;
            }
            print("[KSP Interstellar] Reactor Persistent Resource Update");
            if (IsEnabled && last_active_time > 0)
            {
                doPersistentResourceUpdate();
            }

            this.part.force_activate();
            //RenderingManager.AddToPostDrawQueue(0, OnGUI);
            print("[KSP Interstellar] Configuring Reactor");

            maximumThermalPowerFloat = MaximumThermalPower;
        }