void CEventColonization::Draw(Graphics* g, CGraphicPool* graphicPool) const { CEventScreen::Draw(g, graphicPool); CString fontName = ""; Gdiplus::REAL fontSize = 0.0; StringFormat fontFormat; SolidBrush fontBrush(static_cast<Gdiplus::ARGB>(Color::White)); CBotEDoc* pDoc = resources::pDoc; AssertBotE(pDoc); CMajor* pMajor = dynamic_cast<CMajor*>(pDoc->GetRaceCtrl()->GetRace(m_sRace)); AssertBotE(pMajor); CFontLoader::CreateGDIFont(pMajor, 5, fontName, fontSize); fontFormat.SetAlignment(StringAlignmentCenter); fontFormat.SetLineAlignment(StringAlignmentCenter); fontFormat.SetFormatFlags(StringFormatFlagsNoWrap); Gdiplus::Color color; CFontLoader::GetGDIFontColor(pMajor, 3, color); fontBrush.SetColor(color); g->DrawString(CComBSTR(m_strHeadline), -1, &Gdiplus::Font(CComBSTR(fontName), fontSize), RectF(0,0,1280,96), &fontFormat, &fontBrush); CFontLoader::CreateGDIFont(pMajor, 3, fontName, fontSize); fontFormat.SetAlignment(StringAlignmentCenter); fontFormat.SetLineAlignment(StringAlignmentCenter); fontFormat.SetFormatFlags(!StringFormatFlagsNoWrap); g->DrawString(CComBSTR(m_strText), -1, &Gdiplus::Font(CComBSTR(fontName), fontSize), RectF(100,96,1080,128), &fontFormat, &fontBrush); // Buttons zeichnen CFontLoader::GetGDIFontColor(pMajor, 2, color); fontBrush.SetColor(color); for (int i = 0; i < m_Buttons.GetSize(); i++) m_Buttons.GetAt(i)->DrawButton(*g, graphicPool, Gdiplus::Font(CComBSTR(fontName), fontSize), fontBrush); }
void CRandomEventCtrl::CalcShipEvents() const { if (!IsActivated()) return; CBotEDoc* pDoc = resources::pDoc; AssertBotE(pDoc); // Hüllenvirus for (int x = 0; x < STARMAP_SECTORS_HCOUNT; x++) { for (int y = 0; y < STARMAP_SECTORS_VCOUNT; y++) { // 0.1% Wahrscheinlichkeit für einen Hüllenvirus pro Sektor if (rand()%1000 != 0) continue; // gibt es keine Schiffe im Sektor, dann macht ein Hüllenvirus auch nichts CSector* pSector = &(pDoc->GetSystem(x, y)); if (!pSector->GetIsShipInSector()) continue; // allen Schiffe im Sektor die Hülle auf 1 reduzieren (außer Aliens) for (CShipMap::iterator i = pDoc->m_ShipMap.begin(); i != pDoc->m_ShipMap.end(); ++i) { if (i->second->IsAlien()) continue; if (i->second->GetCo() != pSector->GetCo()) continue; int nCurrentHull = i->second->GetHull()->GetCurrentHull(); i->second->GetHull()->SetCurrentHull(-(nCurrentHull - 1), true); // allen Schiffen in der Flotte ebenfalls die Hülle auf 1 setzen for (CShips::iterator j = i->second->begin(); j != i->second->end(); ++j) { nCurrentHull = j->second->GetHull()->GetCurrentHull(); j->second->GetHull()->SetCurrentHull(-(nCurrentHull - 1), true); } } // Nachrichten an alle Major welche Schiffe in diesem Sektor hatten const std::map<CString, CMajor*>* pmMajors = pDoc->GetRaceCtrl()->GetMajors(); for (map<CString, CMajor*>::const_iterator it = pmMajors->begin(); it != pmMajors->end(); ++it) { if (!pSector->GetOwnerOfShip(it->first, true)) continue; CMajor* pMajor = it->second; if (!pMajor) continue; const CString& sSectorName = pSector->CoordsName(true); CString sMessageText = CLoc::GetString("EVENTHULLVIRUS", false, sSectorName); CEmpireNews message; message.CreateNews(sMessageText,EMPIRE_NEWS_TYPE::MILITARY,pSector->GetName(),pSector->GetCo()); pMajor->GetEmpire()->AddMsg(message); if (pMajor->IsHumanPlayer()) { resources::pClientWorker->SetToEmpireViewFor(*pMajor); pMajor->GetEmpire()->PushEvent(boost::make_shared<CEventRandom>(pMajor->GetRaceID(), "HullVirus", sMessageText, "")); } } } } }