public float GetWetMass()
    {
        float num = 0f;

        foreach (GameObject item in AttachableBuilding.GetAttachedNetwork(commandModule.GetComponent <AttachableBuilding>()))
        {
            RocketModule component = item.GetComponent <RocketModule>();
            if ((Object)component != (Object)null)
            {
                FuelTank     component2 = component.GetComponent <FuelTank>();
                OxidizerTank component3 = component.GetComponent <OxidizerTank>();
                SolidBooster component4 = component.GetComponent <SolidBooster>();
                if ((Object)component2 != (Object)null)
                {
                    num += component2.MassStored();
                }
                if ((Object)component3 != (Object)null)
                {
                    num += component3.MassStored();
                }
                if ((Object)component4 != (Object)null)
                {
                    num += component4.fuelStorage.MassStored();
                }
            }
        }
        return(num);
    }
Exemple #2
0
    public override void DoPostConfigureComplete(GameObject go)
    {
        SolidBooster solidBooster = go.AddOrGet <SolidBooster>();

        solidBooster.mainEngine = false;
        solidBooster.efficiency = ROCKETRY.ENGINE_EFFICIENCY.BOOSTER;
        solidBooster.fuelTag    = ElementLoader.FindElementByHash(SimHashes.Iron).tag;
        Storage storage = go.AddOrGet <Storage>();

        storage.SetDefaultStoredItemModifiers(Storage.StandardSealedStorage);
        storage.capacityKg       = 800f;
        solidBooster.fuelStorage = storage;
        ManualDeliveryKG manualDeliveryKG = go.AddComponent <ManualDeliveryKG>();

        manualDeliveryKG.SetStorage(storage);
        manualDeliveryKG.requestedItemTag = solidBooster.fuelTag;
        manualDeliveryKG.refillMass       = storage.capacityKg / 2f;
        manualDeliveryKG.capacity         = storage.capacityKg / 2f;
        manualDeliveryKG.choreTypeIDHash  = Db.Get().ChoreTypes.MachineFetch.IdHash;
        ManualDeliveryKG manualDeliveryKG2 = go.AddComponent <ManualDeliveryKG>();

        manualDeliveryKG2.SetStorage(storage);
        manualDeliveryKG2.requestedItemTag = ElementLoader.FindElementByHash(SimHashes.OxyRock).tag;
        manualDeliveryKG2.refillMass       = storage.capacityKg / 2f;
        manualDeliveryKG2.capacity         = storage.capacityKg / 2f;
        manualDeliveryKG2.choreTypeIDHash  = Db.Get().ChoreTypes.MachineFetch.IdHash;
        RocketModule rocketModule = go.AddOrGet <RocketModule>();

        rocketModule.SetBGKAnim(Assets.GetAnim("rocket_solid_booster_bg_kanim"));
        EntityTemplates.ExtendBuildingToRocketModule(go);
    }
Exemple #3
0
            }                                                 // skip original method

            static void Postfix(StarmapScreen __instance)
            {
                var           ranges        = SolidBoosterStats.Ranges;
                List <string> rangeDivisors = new List <string>();

                foreach (var range in ranges)
                {
                    rangeDivisors.Add(StarmapScreenOverhaul.FormatDistance(range, ""));
                }

                __instance.Get(out BreakdownList rocketDetailsFuel, nameof(rocketDetailsFuel));
                BreakdownList list = rocketDetailsFuel;

                __instance.Get(out CommandModule currentCommandModule, nameof(currentCommandModule));
                RocketStatsOverhaul stats = (RocketStatsOverhaul)currentCommandModule.rocketStats;

                list.SetTitle(StarmapScreenOverhaul.Caption.TotalBoosterThrust);
                list.SetIcon(__instance.rocketDetailsFuelIcon);
                list.gameObject.name = nameof(rocketDetailsFuel);
                list.ClearRows();

                string moduleName   = "";
                int    boosterCount = 0;

                foreach (GameObject gameObject in stats.BuildingNetworkEnumerable())
                {
                    SolidBooster component = gameObject.GetComponent <SolidBooster>();
                    if (component != null)
                    {
                        moduleName = gameObject.gameObject.GetProperName();
                        boosterCount++;
                    }
                }

                float boosterKmRemaining = stats.GetBoosterThrust();

                for (int i = 0; i < boosterCount; ++i)
                {
                    if (boosterKmRemaining <= GetRange(ranges, i))
                    {
                        list.AddRow().ShowData(moduleName, StarmapScreenOverhaul.FormatDistance(boosterKmRemaining, "+", "") + "/" + rangeDivisors[i]);
                        boosterKmRemaining -= boosterKmRemaining;
                    }
                    else
                    {
                        list.AddRow().ShowData(moduleName, StarmapScreenOverhaul.FormatDistance(GetRange(ranges, i), "+", "") + "/" + rangeDivisors[i]);
                        boosterKmRemaining -= GetRange(ranges, i);
                    }
                }

                AddImportant(list, StarmapScreenOverhaul.Caption.TotalBoosterThrust, stats.GetBoosterThrust());
            }
    public float GetBoosterThrust()
    {
        float num = 0f;

        foreach (GameObject item in AttachableBuilding.GetAttachedNetwork(commandModule.GetComponent <AttachableBuilding>()))
        {
            SolidBooster component = item.GetComponent <SolidBooster>();
            if ((Object)component != (Object)null)
            {
                float amountAvailable  = component.fuelStorage.GetAmountAvailable(ElementLoader.FindElementByHash(SimHashes.OxyRock).tag);
                float amountAvailable2 = component.fuelStorage.GetAmountAvailable(ElementLoader.FindElementByHash(SimHashes.Iron).tag);
                num += component.efficiency * Mathf.Min(amountAvailable, amountAvailable2);
            }
        }
        return(num);
    }
    public float GetTotalOxidizer(bool includeBoosters = false)
    {
        float num = 0f;

        foreach (GameObject item in AttachableBuilding.GetAttachedNetwork(commandModule.GetComponent <AttachableBuilding>()))
        {
            OxidizerTank component = item.GetComponent <OxidizerTank>();
            if ((Object)component != (Object)null)
            {
                num += component.GetTotalOxidizerAvailable();
            }
            if (includeBoosters)
            {
                SolidBooster component2 = item.GetComponent <SolidBooster>();
                if ((Object)component2 != (Object)null)
                {
                    num += component2.fuelStorage.GetAmountAvailable(GameTags.OxyRock);
                }
            }
        }
        return(num);
    }
Exemple #6
0
        /// <summary>
        /// Returns how much do boosters contribute to rocket distance in km.
        /// </summary>
        public new float GetBoosterThrust()
        {
            float fuel     = 0;
            float oxidizer = 0;

            foreach (GameObject gameObject in BuildingNetworkEnumerable())
            {
                SolidBooster component = gameObject.GetComponent <SolidBooster>();
                if (component != null)
                {
                    fuel     += component.fuelStorage.GetAmountAvailable(ElementLoader.FindElementByHash(SimHashes.OxyRock).tag);
                    oxidizer += component.fuelStorage.GetAmountAvailable(ElementLoader.FindElementByHash(SimHashes.Iron).tag);
                }
            }

            fuel     /= SolidBoosterStats.MaxFuelStorage;
            oxidizer /= SolidBoosterStats.MaxOxyStorage;
            float numEffectiveBoosters = Mathf.Min(fuel, oxidizer);
            float thrust = GetBoosterContribution(numEffectiveBoosters);

            return(thrust);
        }
    public float GetTotalFuel(bool includeBoosters = false)
    {
        float num = 0f;

        foreach (GameObject item in AttachableBuilding.GetAttachedNetwork(commandModule.GetComponent <AttachableBuilding>()))
        {
            FuelTank component     = item.GetComponent <FuelTank>();
            Tag      engineFuelTag = GetEngineFuelTag();
            if ((Object)component != (Object)null)
            {
                num += component.GetAmountAvailable(engineFuelTag);
            }
            if (includeBoosters)
            {
                SolidBooster component2 = item.GetComponent <SolidBooster>();
                if ((Object)component2 != (Object)null)
                {
                    num += component2.fuelStorage.GetAmountAvailable(component2.fuelTag);
                }
            }
        }
        return(num);
    }