/// <summary> /// Gets the formatted remaining rocket range. /// </summary> /// <param name="engine">The rocket's engine.</param> /// <param name="fuelMass">The fuel mass remaining.</param> /// <param name="oxyMass">The oxidizer mass remaining.</param> /// <param name="fuelPerDist">The fuel consumed per tile travelled.</param> /// <returns>The range tool tip text. The range title is in CACHED_BUILDER.</returns> private static string GetRangeLeft(RocketEngineCluster engine, float fuelMass, float oxyMass, float fuelPerDist) { var text = CACHED_BUILDER; string fuelUsage, fuelLeft; float burnable = fuelMass, usage = fuelPerDist * Constants.SECONDS_PER_CYCLE; bool oxidizerNeeded = false; if (engine == null) { // You cheater! fuelUsage = "0"; fuelLeft = "0"; } else if (engine.TryGetComponent(out HEPFuelTank _)) { fuelUsage = GameUtil.GetFormattedHighEnergyParticles(usage); fuelLeft = GameUtil.GetFormattedHighEnergyParticles(fuelMass); // Radbolt engine does not require oxidizer } else { fuelUsage = GameUtil.GetFormattedMass(usage); fuelLeft = GameUtil.GetFormattedMass(fuelMass); oxidizerNeeded = engine.requireOxidizer; if (oxidizerNeeded) { burnable = Mathf.Min(burnable, oxyMass); } } text.Clear().AppendLine(ROCKETS.RANGE.TOOLTIP).Append(Constants. TABBULLETSTRING).AppendLine(ROCKETS.FUEL_PER_HEX.NAME).Replace("{0}", fuelUsage).Append(Constants.TABBULLETSTRING).Append(ROCKETS.FUEL_REMAINING. NAME).Append(fuelLeft); if (oxidizerNeeded) { text.AppendLine().Append(Constants.TABBULLETSTRING).Append(ROCKETS. OXIDIZER_REMAINING.NAME); FormatStringPatches.GetFormattedMass(text, oxyMass); } string tooltip = text.ToString(); text.Clear().Append(ROCKETS.RANGE.NAME); float range = (fuelPerDist == 0.0f) ? 0.0f : burnable / fuelPerDist; FormatStringPatches.GetFormattedRocketRange(text, range, TimeSlice.None, true); return(tooltip); }
/// <summary> /// Gets the formatted rocket speed. /// </summary> /// <param name="rocket">The currently selected rocket.</param> /// <param name="enginePower">The rocket engine power.</param> /// <param name="burden">The total rocket burden.</param> /// <returns>The speed tool tip text. The speed title is in CACHED_BUILDER.</returns> private static string GetSpeed(CraftModuleInterface rocket, float enginePower, float burden) { var clustercraft = rocket.m_clustercraft; var text = CACHED_BUILDER; text.Clear().AppendLine(ROCKETS.SPEED.TOOLTIP).Append(Constants.TABBULLETSTRING). Append(ROCKETS.POWER_TOTAL.NAME); enginePower.ToRyuHardString(text, 0); text.AppendLine().Append(Constants.TABBULLETSTRING).Append(ROCKETS.BURDEN_TOTAL. NAME); burden.ToRyuHardString(text, 0); string tooltip = text.ToString(); text.Clear().Append(ROCKETS.SPEED.NAME); float speed = (clustercraft == null || burden == 0.0f) ? 0.0f : enginePower * clustercraft.AutoPilotMultiplier * clustercraft.PilotSkillMultiplier / burden; FormatStringPatches.GetFormattedRocketRange(text, speed, TimeSlice.PerCycle, true); return(tooltip); }