Exemplo n.º 1
0
/**
 *  löscht alle Tabs.
 *
 *  @author OLiver
 */
void ctrlTab::DeleteAllTabs(void)
{
    for(unsigned int i = 0; i < tab_count; ++i)
        DeleteCtrl(i);

    memset(tabs, 0, MAX_TAB_COUNT * sizeof(unsigned int));

    tab_selection = 0;
    tab_count = 0;
}
Exemplo n.º 2
0
void dskHostGame::UpdatePlayerRow(const unsigned row)
{
    GameClientPlayer& player = GAMECLIENT.GetPlayer(row);

    unsigned cy = 80 + row * 30;
    TextureColor tc = (row & 1 ? TC_GREY : TC_GREEN2);

    // Alle Controls erstmal zerstören (die ganze Gruppe)
    DeleteCtrl(58 - row);
    // und neu erzeugen
    ctrlGroup* group = AddGroup(58 - row, scale_);

    std::string name;
    // Name
    switch(player.ps)
    {
        default:
            name.clear();
            break;
        case PS_OCCUPIED:
        case PS_KI:
        {
            name = player.name;
        } break;
        case PS_FREE:
        case PS_RESERVED:
        {
            // Offen
            name = _("Open");
        } break;
        case PS_LOCKED:
        {
            // Geschlossen
            name = _("Closed");
        } break;
    }

    if(GetCtrl<ctrlPreviewMinimap>(70))
    {
        if(player.isUsed())
            // Nur KIs und richtige Spieler haben eine Farbe auf der Karte
            GetCtrl<ctrlPreviewMinimap>(70)->SetPlayerColor(row, player.color);
        else
            // Keine richtigen Spieler --> Startposition auf der Karte ausblenden
            GetCtrl<ctrlPreviewMinimap>(70)->SetPlayerColor(row, 0);
    }

    // Spielername, beim Hosts Spielerbuttons, aber nich beim ihm selber, er kann sich ja nich selber kicken!
    ctrlBaseText* text;
    if(GAMECLIENT.IsHost() && !player.is_host && (!lua || lua->IsChangeAllowed("playerState")))
        text = group->AddTextButton(1, 20, cy, 150, 22, tc, name, NormalFont);
    else
        text = group->AddDeepening(1, 20, cy, 150, 22, tc, name, NormalFont, COLOR_YELLOW);

    // Is das der Host? Dann farblich markieren
    if(player.is_host)
        text->SetColor(0xFF00FF00);

    // Bei geschlossenem nicht sichtbar
    if(player.isUsed())
    {
        /// Einstufung nur bei Lobbyspielen anzeigen @todo Einstufung ( "%d" )
        group->AddVarDeepening(2, 180, cy, 50, 22, tc, (LOBBYCLIENT.LoggedIn() || player.ps == PS_KI ? _("%d") : _("n/a")), NormalFont, COLOR_YELLOW, 1, &player.rating); //-V111

        // If not in savegame -> Player can change own row and host can change AIs
        const bool allowPlayerChange = ((GAMECLIENT.IsHost() && player.ps == PS_KI) || GAMECLIENT.GetPlayerID() == row) && !GAMECLIENT.IsSavegame();
        bool allowNationChange = allowPlayerChange;
        bool allowColorChange = allowPlayerChange;
        bool allowTeamChange = allowPlayerChange;
        if(lua)
        {
            if(GAMECLIENT.GetPlayerID() == row)
            {
                allowNationChange &= lua->IsChangeAllowed("ownNation", true);
                allowColorChange &= lua->IsChangeAllowed("ownColor", true);
                allowTeamChange &= lua->IsChangeAllowed("ownTeam", true);
            } else
            {
                allowNationChange &= lua->IsChangeAllowed("aiNation", true);
                allowColorChange &= lua->IsChangeAllowed("aiColor", true);
                allowTeamChange &= lua->IsChangeAllowed("aiTeam", true);
            }
        }

        if(allowNationChange)
            group->AddTextButton(3, 240, cy, 90, 22, tc, _(NationNames[0]), NormalFont);
        else
            group->AddDeepening(3, 240, cy, 90, 22, tc, _(NationNames[0]), NormalFont, COLOR_YELLOW);

        if(allowColorChange)
            group->AddColorButton(4, 340, cy, 30, 22, tc, 0);
        else
            group->AddColorDeepening(4, 340, cy, 30, 22, tc, 0);

        if(allowTeamChange)
            group->AddTextButton(5, 380, cy, 50, 22, tc, _("-"), NormalFont);
        else
            group->AddDeepening(5, 380, cy, 50, 22, tc, _("-"), NormalFont, COLOR_YELLOW);

        // Bereit (nicht bei KIs und Host)
        if(player.ps == PS_OCCUPIED && !player.is_host)
            group->AddCheckBox(6, 450, cy, 22, 22, tc, EMPTY_STRING, NULL, (GAMECLIENT.GetPlayerID() != row) );

        // Ping ( "%d" )
        ctrlVarDeepening* ping = group->AddVarDeepening(7, 490, cy, 50, 22, tc, _("%d"), NormalFont, COLOR_YELLOW, 1, &player.ping); //-V111

        // Verschieben (nur bei Savegames und beim Host!)
        if(GAMECLIENT.IsSavegame() && player.ps == PS_OCCUPIED)
        {
            ctrlComboBox* combo = group->AddComboBox(8, 570, cy, 150, 22, tc, NormalFont, 150, !GAMECLIENT.IsHost());

            // Mit den alten Namen füllen
            for(unsigned i = 0; i < GAMECLIENT.GetPlayerCount(); ++i)
            {
                if(GAMECLIENT.GetPlayer(i).origin_name.length())
                {
                    combo->AddString(GAMECLIENT.GetPlayer(i).origin_name);
                    if(i == row)
                        combo->SetSelection(combo->GetCount() - 1);
                }
            }
        }

        // Ping bei KI und Host ausblenden
        if(player.ps == PS_KI || player.is_host)
            ping->SetVisible(false);

        // Felder ausfüllen
        ChangeNation(row, player.nation);
        ChangeTeam(row, player.team);
        ChangePing(row);
        ChangeReady(row, player.ready);
        ChangeColor(row, player.color);
    }
    group->SetActive(this->active_);
}