Example #1
0
void SectorView::UpdateSystemLabels(SystemLabels &labels, const SystemPath &path)
{
    PROFILE_SCOPED()
    Sector *sec = GetCached(path.sectorX, path.sectorY, path.sectorZ);
    Sector *playerSec = GetCached(m_current.sectorX, m_current.sectorY, m_current.sectorZ);

    char format[256];

    if (m_inSystem) {
        const float dist = Sector::DistanceBetween(sec, path.systemIndex, playerSec, m_current.systemIndex);

        int fuelRequired;
        double dur;
        enum Ship::HyperjumpStatus jumpStatus
            = Pi::player->GetHyperspaceDetails(&path, fuelRequired, dur);
        const double DaysNeeded = dur*(1.0 / (24*60*60));
        const double HoursNeeded = (DaysNeeded - floor(DaysNeeded))*24;

        switch (jumpStatus) {
        case Ship::HYPERJUMP_OK:
            snprintf(format, sizeof(format), "[ %s | %s | %s, %s ]", Lang::NUMBER_LY, Lang::NUMBER_TONNES, Lang::NUMBER_DAYS, Lang::NUMBER_HOURS);
            labels.distance->SetText(stringf(format,
                                             formatarg("distance", dist), formatarg("mass", fuelRequired), formatarg("days", floor(DaysNeeded)), formatarg("hours", HoursNeeded)));
            labels.distance->Color(0, 255, 51);
            m_jumpLine.SetColor(Color(0, 255, 51, 255));
            break;
        case Ship::HYPERJUMP_INSUFFICIENT_FUEL:
            snprintf(format, sizeof(format), "[ %s | %s ]", Lang::NUMBER_LY, Lang::NUMBER_TONNES);
            labels.distance->SetText(stringf(format,
                                             formatarg("distance", dist), formatarg("mass", fuelRequired)));
            labels.distance->Color(255, 255, 0);
            m_jumpLine.SetColor(Color::YELLOW);
            break;
        case Ship::HYPERJUMP_OUT_OF_RANGE:
            snprintf(format, sizeof(format), "[ %s ]", Lang::NUMBER_LY);
            labels.distance->SetText(stringf(format,
                                             formatarg("distance", dist)));
            labels.distance->Color(255, 0, 0);
            m_jumpLine.SetColor(Color::RED);
            break;
        default:
            labels.distance->SetText("");
            break;
        }
    }

    else if (path.IsSameSystem(Pi::player->GetHyperspaceDest())) {
        snprintf(format, sizeof(format), "[ %s ]", Lang::IN_TRANSIT);
        labels.distance->SetText(format);
        labels.distance->Color(102, 102, 255);
    }

    else
        labels.distance->SetText("");

    RefCountedPtr<StarSystem> sys = StarSystem::GetCached(path);

    std::string desc;
    if (sys->GetNumStars() == 4) {
        desc = Lang::QUADRUPLE_SYSTEM;
    } else if (sys->GetNumStars() == 3) {
        desc = Lang::TRIPLE_SYSTEM;
    } else if (sys->GetNumStars() == 2) {
        desc = Lang::BINARY_SYSTEM;
    } else {
        desc = sys->rootBody->GetAstroDescription();
    }
    labels.starType->SetText(desc);

    labels.systemName->SetText(sys->GetName());
    labels.shortDesc->SetText(sys->GetShortDescription());

    if (m_detailBoxVisible == DETAILBOX_INFO) m_infoBox->ShowAll();
}