public void DrawMenu(OutputPanel lcds, int maxLines = 15) { UpdateMenu(maxLines); if (0 < WarningText.Length) { sb.Append(WarningText); } lcds.WritePublicText(sb); }
void StatusDisplay() { if (null == lcd || displayUpdateTick > Pgm.totalTicks) { return; } displayUpdateTick = Pgm.totalTicks + TPS / 6; sb1.Append('\u2022', 7).Append($" Status Display ").Append('\u2022', 7).Append(DateTime.Now.ToString(" HH\\:mm\\:ss\\.fff")); if (!sc.ControlThrusters) { sb1.Append("\n") .Append(sc.MoveIndicator.ToString()).Append(Pgm.MoveIndicator2Command(sc.MoveIndicator)) .Append(sc.RollIndicator.ToString()); } sb1.Append($"\n Mode: {OperationMode} \u2022 State: {curState}"); sb1.Append("\n Alignment: ").Append((align.Active ? "Enabled" : "Off")).Append(" \u2022 AlignMode: ").Append(align.RocketMode ? "Rocket" : "Ship").Append(align.Inverted ? " (Inverted)" : ""); string alti = (double.IsNaN(altitudeSurface) ? "---" : $"{altitudeSurface:0.0}"); string altiDiff = ((double.IsNaN(altitudeDiff) || Math.Abs(altitudeDiff) < 1) ? "" : ((altitudeDiff > 0) ? " ^^^" : " vvv")); sb1.Append($"\n Altitude: {alti} m{altiDiff} \u2022 Gravity: {gravity:0.000} g"); sb1.Append($"\n Spd: {currSpeed:0.00} m/s \u2022 Acc.: {currAccl:0.00} \u2022 Atm.: {atmosphereDensity:0.0}"); if (Mode.Descend == mode) { sb1.Append($"\n BrakeDistance: {brakeDistance:0.00} \u2022 AlignDiff: {align.AlignDifference:0.000}"); sb1.Append($"\n Raycast: {raycastName}"); } sb1.Append($"\n Mass: {shipMass.PhysicalMass:#,##0} \u2022 Cargo: {shipMass.PhysicalMass - shipMass.BaseMass:#,##0}"); sb1.Append("\n Controller: ").Append(sc?.CustomName ?? "<NONE>"); sb1.Append($"\n Requested: ").Append(NumStr(totalThrustWanted, "N")).Append(" \u2022 Current: ").Append(NumStr(sumThrustCurEff, "N")); sb1.Append(sb2); if (0 < hydrogenTanks.Count) { if (hydroTanksUpdateTick < Pgm.totalTicks) { hydroTanksUpdateTick = Pgm.totalTicks + TPS / 3; hydroTanksPctFilled = 0; hydroTanksFillLevel = 0; hydroTanksGiving = 0; foreach (var h in hydrogenTanks) { if (h.IsWorking && !h.Stockpile) { hydroTanksFillLevel += h.Capacity * h.FilledRatio; hydroTanksPctFilled += h.FilledRatio; hydroTanksGiving++; } } hydroTanksPctFilled /= hydrogenTanks.Count; } AppendPctBar(sb1, $"\n Hydr:", -hydroTanksPctFilled, 30, false).Append($" {hydroTanksPctFilled * 100:0.0}% in {hydroTanksGiving} tanks"); } if (0 < batteries.Count) { if (batteriesUpdateTick < Pgm.totalTicks) { batteriesUpdateTick = Pgm.totalTicks + TPS; battStoredPower = 0; battMaxPower = 0; battNumCharging = 0; foreach (var b in batteries) { if (b.IsWorking) { battStoredPower += b.CurrentStoredPower; battMaxPower += b.MaxStoredPower; battNumCharging += b.IsCharging ? 1 : 0; } } battAllCharging = battNumCharging == batteries.Count; } AppendPctBar(sb1, "\n Batt:", (battStoredPower / battMaxPower) * (battAllCharging ? 1 : -1), 30, false); if (battAllCharging) { sb1.Append($" {chargeAnim[execCount & 3]} Recharging"); } } lcd.WritePublicText(sb1); }