- records.reserve(sim.Records().size());
- for (const auto &r : sim.Records()) {
- Label *label = new Label(sim.Assets().fonts.medium);
- label->Text(r.name + " record");
- label_panel->Add(label);
- Label *value = new Label(sim.Assets().fonts.medium);
- value->Text("none");
- value_panel->Add(value);
- records.push_back(value);
- Label *holder = new Label(sim.Assets().fonts.medium);
- holder->Text("nobody");
- holder_panel->Add(holder);
- holders.push_back(holder);
+BodyPanel::~BodyPanel() {
+}
+
+void BodyPanel::Show(world::Body &b) {
+ body = &b;
+ name->Text(b.Name());
+ mass->Text(MassString(b.Mass()));
+ radius->Text(LengthString(b.Radius()));
+ soi->Text(LengthString(b.SphereOfInfluence()));
+ operiod->Text(TimeString(b.OrbitalPeriod()));
+ rperiod->Text(TimeString(b.RotationalPeriod()));
+ atm->Text(b.HasAtmosphere() ? assets.data.resources[b.Atmosphere()].label : std::string("none"));
+ sma->Text(LengthString(b.GetOrbit().SemiMajorAxis()));
+ ecc->Text(DecimalString(b.GetOrbit().Eccentricity(), 3));
+ inc->Text(AngleString(b.GetOrbit().Inclination()));
+ asc->Text(AngleString(b.GetOrbit().LongitudeAscending()));
+ arg->Text(AngleString(b.GetOrbit().ArgumentPeriapsis()));
+ mna->Text(AngleString(b.GetOrbit().MeanAnomaly()));
+}
+
+void BodyPanel::Hide() noexcept {
+ body = nullptr;
+}
+
+void BodyPanel::Draw(graphics::Viewport &viewport) noexcept {
+ if (!Shown()) return;
+
+ const glm::vec2 margin(20.0f);
+ panel.Position(glm::vec2(viewport.Width() - margin.x - panel.Size().x, margin.y));
+ panel.Layout();
+ panel.Draw(assets, viewport);
+}
+
+
+RecordsPanel::RecordsPanel(world::Simulation &sim)
+: sim(sim)
+, records()
+, holders()
+, panel()
+, shown(true) {
+ Label *rank_label = new Label(sim.Assets().fonts.medium);
+ rank_label->Text("Rank");
+
+ Panel *rank_panel = new Panel;
+ rank_panel
+ ->Direction(Panel::VERTICAL)
+ ->Add(rank_label);
+
+ for (int i = 0; i < world::Record::MAX; ++i) {
+ rank_label = new Label(sim.Assets().fonts.medium);
+ rank_label->Text(std::to_string(i + 1));
+ rank_panel->Add(rank_label);