Пример #1
0
        public void UpdateOreDisplay(Dictionary <ItemType, List <OreDonor> > ore, OreTypes oreTypes, List <Refinery> refineries)
        {
            if (oreStatusScreen == null)
            {
                return;
            }

            // Clear previous state.
            local_UpdateOreDisplay_builder.Clear();

            local_UpdateOreDisplay_builder.AppendFormat("Ore stockpiles  {0}\n", Datestamp.Minutes);

            var totalConsumeSpeed = 0.0;
            var totalProduceSpeed = 0.0;

            foreach (var refinery in refineries)
            {
                totalConsumeSpeed += refinery.OreConsumptionRate;
                totalProduceSpeed += refinery.TheoreticalIngotProductionRate;
            }
            local_UpdateOreDisplay_builder.AppendFormat("Refineries: {0}  Speed: {1:0.#}  Efficiency: {2:0.#}\n", refineries.Count, totalConsumeSpeed, totalProduceSpeed / totalConsumeSpeed);

            var totalMass        = 0.0;
            var totalVolume      = 0.0;
            var secondsRemaining = 0.0;

            foreach (var slot in ore)
            {
                var perSecond = oreTypes.GetAmountConsumedPerSecond(slot.Key) * totalConsumeSpeed;
                var total     = slot.Value.Sum(v => v.GetAmountAvailable());
                secondsRemaining += total / perSecond;
                totalMass        += total;
                totalVolume      += total * 0.37; // All ore is currently 370 ml/kg

                local_UpdateOreDisplay_builder.AppendFormat("  {0}:  {1} ({2}/s)", slot.Key.SubtypeId, Unit.Mass.FormatSI((float)total), Unit.Mass.FormatSI((float)perSecond));

                var blueprint = oreTypes.GetBlueprint(slot.Key);
                if (blueprint != null)
                {
                    local_UpdateOreDisplay_builder.AppendFormat(" -> ");
                    if (blueprint.Value.Outputs.Length == 1)
                    {
                        var output          = blueprint.Value.Outputs[0];
                        var outputPerSecond = output.Quantity * totalProduceSpeed / blueprint.Value.Duration;
                        local_UpdateOreDisplay_builder.AppendFormat("{0}/s", Unit.Mass.FormatSI((float)outputPerSecond));
                    }
                    else
                    {
                        foreach (var output in blueprint.Value.Outputs)
                        {
                            var outputPerSecond = output.Quantity * totalProduceSpeed / blueprint.Value.Duration;
                            local_UpdateOreDisplay_builder.AppendFormat(" {0}: {1}/s ", output.ItemType.SubtypeId.Substring(0, 2), Unit.Mass.FormatSI((float)outputPerSecond));
                        }
                    }
                }

                local_UpdateOreDisplay_builder.Append("\n");
            }
            local_UpdateOreDisplay_builder.AppendFormat("Total: {0} ({1})       Time to clear:  {2}",
                                                        Unit.Mass.FormatSI((float)totalMass),
                                                        Unit.Volume.FormatSI((float)totalVolume),
                                                        TimeSpan.FromSeconds((int)secondsRemaining));
            oreStatusScreen.WriteText(local_UpdateOreDisplay_builder.ToString());
        }