void iwDiplomacy::Msg_PaintBefore() { // Farben, die zu den 3 Bündnisstates gesetzt werden (0-kein Bündnis, 1-in Arbeit, 2-Bündnis abgeschlossen) const std::array<unsigned, 3> PACT_COLORS = {COLOR_RED, COLOR_YELLOW, COLOR_GREEN}; IngameWindow::Msg_PaintBefore(); // Die farbigen Zeilen malen DrawPoint curPos = GetDrawPos() + DrawPoint(LINE_DISTANCE_TO_MARGINS, FIRST_LINE_Y); Rect curRect(curPos, Extent(GetSize().x - 2 * LINE_DISTANCE_TO_MARGINS, CELL_HEIGHT)); for(unsigned i = 0; i < gwv.GetWorld().GetNumPlayers(); ++i) { // Rechtecke in Spielerfarbe malen mit entsprechender Transparenz DrawRectangle(curRect, SetAlpha(gwv.GetWorld().GetPlayer(i).color, 0x40)); curRect.move(DrawPoint(0, CELL_HEIGHT + SPACE_HEIGHT)); // Farben der Bündnis-Buttons setzen, je nachdem wie der Status ist // Existiert der Button auch? auto* button = GetCtrl<ctrlImageButton>(300 + i); // Bündnisvertrag if(button) // Farbe je nach Bündnisstatus setzen button->SetModulationColor(PACT_COLORS[gwv.GetPlayer().GetPactState(TREATY_OF_ALLIANCE, i)]); // Nicht-Angriffspakt button = GetCtrl<ctrlImageButton>(400 + i); if(button) // Farbe je nach Bündnisstatus setzen button->SetModulationColor(PACT_COLORS[gwv.GetPlayer().GetPactState(NON_AGGRESSION_PACT, i)]); // Ggf. Ping aktualisieren if(auto* pingfield = GetCtrl<ctrlTextDeepening>(200 + i)) pingfield->SetText(helpers::toString(gwv.GetWorld().GetPlayer(i).ping)); // Verbleibende Zeit der Bündnisse in den Text-Ctrls anzeigen if(GetCtrl<ctrlText>(500 + i)) { for(unsigned z = 0; z < 2; ++z) { unsigned duration = gwv.GetPlayer().GetRemainingPactTime(PactType(z), i); // Überhaupt ein Bündnis abgeschlossen und Bündnis nicht für die Ewigkeit? if(duration > 0 && duration != 0xFFFFFFFF) // Dann entsprechende Zeit setzen GetCtrl<ctrlText>(500 + z * 100 + i)->SetText(GAMECLIENT.FormatGFTime(duration)); else // Ansonsten leer GetCtrl<ctrlText>(500 + z * 100 + i)->SetText(""); } } } }
void iwDiplomacy::Msg_PaintAfter() { // Farben, die zu den 3 Bündnisstates gesetzt werden (0-kein Bündnis, 1-in Arbeit, 2-Bündnis abgeschlossen) const unsigned PACT_COLORS[3] = { COLOR_RED, COLOR_YELLOW, COLOR_GREEN }; for(unsigned i = 0; i < GAMECLIENT.GetPlayerCount(); ++i) { // Farben der Bündnis-Buttons setzen, je nachdem wie der Status ist // Existiert der Button auch? ctrlImageButton* button = GetCtrl<ctrlImageButton>(300 + i); // Bündnisvertrag if(button) // Farbe je nach Bündnisstatus setzen button->SetModulationColor(PACT_COLORS[GAMECLIENT.GetLocalPlayer().GetPactState(TREATY_OF_ALLIANCE, i)]); // Nicht-Angriffspakt button = GetCtrl<ctrlImageButton>(400 + i); if(button) // Farbe je nach Bündnisstatus setzen button->SetModulationColor(PACT_COLORS[GAMECLIENT.GetLocalPlayer().GetPactState(NON_AGGRESSION_PACT, i)]); // Ggf. Ping aktualisieren if(ctrlDeepening* pingfield = GetCtrl<ctrlDeepening>(200 + i)) { char ping[64]; sprintf(ping, "%u", GAMECLIENT.GetPlayer(i).ping); pingfield->SetText(ping); } // Verbleibende Zeit der Bündnisse in den Text-Ctrls anzeigen if(GetCtrl<ctrlText>(500 + i)) { for(unsigned z = 0; z < 2; ++z) { unsigned duration = GAMECLIENT.GetLocalPlayer().GetRemainingPactTime(PactType(z), i); // Überhaupt ein Bündnis abgeschlossen und Bündnis nicht für die Ewigkeit? if(duration > 0 && duration != 0xFFFFFFFF) // Dann entsprechende Zeit setzen GetCtrl<ctrlText>(500 + z * 100 + i)->SetText(GAMECLIENT.FormatGFTime(duration)); else // Ansonsten leer GetCtrl<ctrlText>(500 + z * 100 + i)->SetText(""); } } } }