/** * 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; }
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_); }