/** * Initializes all the elements in the Monthly Report screen. * @param game Pointer to the core game. */ MonthlyReportState::MonthlyReportState(Game *game, bool psi, Globe *globe) : State(game), _psi(psi), _gameOver(false), _ratingTotal(0), _fundingDiff(0), _lastMonthsRating(0), _happyList(0), _sadList(0), _pactList(0) { _globe = globe; // Create objects _window = new Window(this, 320, 200, 0, 0); _btnOk = new TextButton(50, 12, 135, 180); _btnBigOk = new TextButton(120, 18, 100, 174); _txtTitle = new Text(300, 17, 16, 8); _txtMonth = new Text(110, 9, 16, 24); _txtRating = new Text(180, 9, 125, 24); _txtChange = new Text(300, 9, 16, 32); _txtDesc = new Text(280, 140, 16, 40); _txtFailure = new Text(290, 160, 15, 10); // Set palette _game->setPalette(_game->getResourcePack()->getPalette("BACKPALS.DAT")->getColors(Palette::blockOffset(3)), Palette::backPos, 16); add(_window); add(_btnOk); add(_btnBigOk); add(_txtTitle); add(_txtMonth); add(_txtRating); add(_txtChange); add(_txtDesc); add(_txtFailure); centerAllSurfaces(); // Set up objects _window->setColor(Palette::blockOffset(15)-1); _window->setBackground(_game->getResourcePack()->getSurface("BACK13.SCR")); _btnOk->setColor(Palette::blockOffset(8)+10); _btnOk->setText(tr("STR_OK")); _btnOk->onMouseClick((ActionHandler)&MonthlyReportState::btnOkClick); _btnOk->onKeyboardPress((ActionHandler)&MonthlyReportState::btnOkClick, Options::keyOk); _btnOk->onKeyboardPress((ActionHandler)&MonthlyReportState::btnOkClick, Options::keyCancel); _btnBigOk->setColor(Palette::blockOffset(8)+10); _btnBigOk->setText(tr("STR_OK")); _btnBigOk->onMouseClick((ActionHandler)&MonthlyReportState::btnOkClick); _btnBigOk->onKeyboardPress((ActionHandler)&MonthlyReportState::btnOkClick, Options::keyOk); _btnBigOk->onKeyboardPress((ActionHandler)&MonthlyReportState::btnOkClick, Options::keyCancel); _btnBigOk->setVisible(false); _txtTitle->setColor(Palette::blockOffset(15)-1); _txtTitle->setBig(); _txtTitle->setText(tr("STR_XCOM_PROJECT_MONTHLY_REPORT")); _txtFailure->setColor(Palette::blockOffset(8)+10); _txtFailure->setBig(); _txtFailure->setAlign(ALIGN_CENTER); _txtFailure->setWordWrap(true); _txtFailure->setText(tr("STR_YOU_HAVE_FAILED")); _txtFailure->setVisible(false); calculateChanges(); int month = _game->getSavedGame()->getTime()->getMonth() - 1, year = _game->getSavedGame()->getTime()->getYear(); if (month == 0) { month = 12; year--; } std::string m; switch (month) { case 1: m = "STR_JAN"; break; case 2: m = "STR_FEB"; break; case 3: m = "STR_MAR"; break; case 4: m = "STR_APR"; break; case 5: m = "STR_MAY"; break; case 6: m = "STR_JUN"; break; case 7: m = "STR_JUL"; break; case 8: m = "STR_AUG"; break; case 9: m = "STR_SEP"; break; case 10: m = "STR_OCT"; break; case 11: m = "STR_NOV"; break; case 12: m = "STR_DEC"; break; default: m = ""; } int difficulty_threshold = 100*((int)(_game->getSavedGame()->getDifficulty())-9); _txtMonth->setColor(Palette::blockOffset(15)-1); _txtMonth->setSecondaryColor(Palette::blockOffset(8)+10); _txtMonth->setText(tr("STR_MONTH").arg(tr(m)).arg(year)); // Calculate rating std::wstring rating = tr("STR_RATING_TERRIBLE"); if (_ratingTotal > difficulty_threshold-300) { rating = tr("STR_RATING_POOR"); } if (_ratingTotal > difficulty_threshold) { rating = tr("STR_RATING_OK"); } if (_ratingTotal > 0) { rating = tr("STR_RATING_GOOD"); } if (_ratingTotal > 500) { rating = tr("STR_RATING_EXCELLENT"); } _txtRating->setColor(Palette::blockOffset(15)-1); _txtRating->setSecondaryColor(Palette::blockOffset(8)+10); _txtRating->setText(tr("STR_MONTHLY_RATING").arg(_ratingTotal).arg(rating)); std::wostringstream ss3; if (_fundingDiff > 0) ss3 << '+'; ss3 << Text::formatFunding(_fundingDiff); _txtChange->setColor(Palette::blockOffset(15)-1); _txtChange->setSecondaryColor(Palette::blockOffset(8)+10); _txtChange->setText(tr("STR_FUNDING_CHANGE").arg(ss3.str())); _txtDesc->setColor(Palette::blockOffset(8)+10); _txtDesc->setWordWrap(true); // calculate satisfaction std::wostringstream ss4; std::wstring satisFactionString = tr("STR_COUNCIL_IS_DISSATISFIED"); bool resetWarning = true; if (_ratingTotal > difficulty_threshold) { satisFactionString = tr("STR_COUNCIL_IS_GENERALLY_SATISFIED"); } if (_ratingTotal > 500) { satisFactionString = tr("STR_COUNCIL_IS_VERY_PLEASED"); } if (_lastMonthsRating <= difficulty_threshold && _ratingTotal <= difficulty_threshold) { satisFactionString = tr("STR_YOU_HAVE_NOT_SUCCEEDED"); _pactList.erase(_pactList.begin(), _pactList.end()); _happyList.erase(_happyList.begin(), _happyList.end()); _sadList.erase(_sadList.begin(), _sadList.end()); _gameOver = true; } ss4 << satisFactionString; if (!_gameOver) { if (_game->getSavedGame()->getFunds() <= -1000000) { if (_game->getSavedGame()->getWarned()) { ss4 << "\n\n" << tr("STR_YOU_HAVE_NOT_SUCCEEDED"); _pactList.erase(_pactList.begin(), _pactList.end()); _happyList.erase(_happyList.begin(), _happyList.end()); _sadList.erase(_sadList.begin(), _sadList.end()); _gameOver = true; } else { ss4 << "\n\n" << tr("STR_COUNCIL_REDUCE_DEBTS"); _game->getSavedGame()->setWarned(true); resetWarning = false; } } } if (resetWarning && _game->getSavedGame()->getWarned()) _game->getSavedGame()->setWarned(false); ss4 << countryList(_happyList, "STR_COUNTRY_IS_PARTICULARLY_PLEASED", "STR_COUNTRIES_ARE_PARTICULARLY_HAPPY"); ss4 << countryList(_sadList, "STR_COUNTRY_IS_UNHAPPY_WITH_YOUR_ABILITY", "STR_COUNTRIES_ARE_UNHAPPY_WITH_YOUR_ABILITY"); ss4 << countryList(_pactList, "STR_COUNTRY_HAS_SIGNED_A_SECRET_PACT", "STR_COUNTRIES_HAVE_SIGNED_A_SECRET_PACT"); _txtDesc->setText(ss4.str()); }
/** * Initializes all the elements in the Monthly Report screen. * @param game Pointer to the core game. * @param psi Show psi training afterwards? * @param globe Pointer to the globe. */ MonthlyReportState::MonthlyReportState(Globe *globe) : _gameOver(false), _ratingTotal(0), _fundingDiff(0), _lastMonthsRating(0), _happyList(0), _sadList(0), _pactList(0) { _globe = globe; // Create objects _window = new Window(this, 320, 200, 0, 0); _btnOk = new TextButton(50, 12, 135, 180); _btnBigOk = new TextButton(120, 18, 100, 174); _txtTitle = new Text(300, 17, 16, 8); _txtMonth = new Text(130, 9, 16, 24); _txtRating = new Text(160, 9, 146, 24); _txtIncome = new Text(300, 9, 16, 32); _txtMaintenance = new Text(130, 9, 16, 40); _txtBalance = new Text(160, 9, 146, 40); _txtDesc = new Text(280, 132, 16, 48); _txtFailure = new Text(290, 160, 15, 10); // Set palette setInterface("monthlyReport"); add(_window, "window", "monthlyReport"); add(_btnOk, "button", "monthlyReport"); add(_btnBigOk, "button", "monthlyReport"); add(_txtTitle, "text1", "monthlyReport"); add(_txtMonth, "text1", "monthlyReport"); add(_txtRating, "text1", "monthlyReport"); add(_txtIncome, "text1", "monthlyReport"); add(_txtMaintenance, "text1", "monthlyReport"); add(_txtBalance, "text1", "monthlyReport"); add(_txtDesc, "text2", "monthlyReport"); add(_txtFailure, "text2", "monthlyReport"); centerAllSurfaces(); // Set up objects _window->setBackground(_game->getMod()->getSurface("BACK13.SCR")); _btnOk->setText(tr("STR_OK")); _btnOk->onMouseClick((ActionHandler)&MonthlyReportState::btnOkClick); _btnOk->onKeyboardPress((ActionHandler)&MonthlyReportState::btnOkClick, Options::keyOk); _btnOk->onKeyboardPress((ActionHandler)&MonthlyReportState::btnOkClick, Options::keyCancel); _btnBigOk->setText(tr("STR_OK")); _btnBigOk->onMouseClick((ActionHandler)&MonthlyReportState::btnOkClick); _btnBigOk->onKeyboardPress((ActionHandler)&MonthlyReportState::btnOkClick, Options::keyOk); _btnBigOk->onKeyboardPress((ActionHandler)&MonthlyReportState::btnOkClick, Options::keyCancel); _btnBigOk->setVisible(false); _txtTitle->setBig(); _txtTitle->setText(tr("STR_XCOM_PROJECT_MONTHLY_REPORT")); _txtFailure->setBig(); _txtFailure->setAlign(ALIGN_CENTER); _txtFailure->setVerticalAlign(ALIGN_MIDDLE); _txtFailure->setWordWrap(true); _txtFailure->setText(tr("STR_YOU_HAVE_FAILED")); _txtFailure->setVisible(false); calculateChanges(); int month = _game->getSavedGame()->getTime()->getMonth() - 1, year = _game->getSavedGame()->getTime()->getYear(); if (month == 0) { month = 12; year--; } std::string m; switch (month) { case 1: m = "STR_JAN"; break; case 2: m = "STR_FEB"; break; case 3: m = "STR_MAR"; break; case 4: m = "STR_APR"; break; case 5: m = "STR_MAY"; break; case 6: m = "STR_JUN"; break; case 7: m = "STR_JUL"; break; case 8: m = "STR_AUG"; break; case 9: m = "STR_SEP"; break; case 10: m = "STR_OCT"; break; case 11: m = "STR_NOV"; break; case 12: m = "STR_DEC"; break; default: m = ""; } int difficulty_threshold = 100*(_game->getSavedGame()->getDifficultyCoefficient()-9); _txtMonth->setText(tr("STR_MONTH").arg(tr(m)).arg(year)); // Calculate rating std::wstring rating = tr("STR_RATING_TERRIBLE"); if (_ratingTotal > difficulty_threshold-300) { rating = tr("STR_RATING_POOR"); } if (_ratingTotal > difficulty_threshold) { rating = tr("STR_RATING_OK"); } if (_ratingTotal > 0) { rating = tr("STR_RATING_GOOD"); } if (_ratingTotal > 500) { rating = tr("STR_RATING_EXCELLENT"); } if (!_game->getMod()->getMonthlyRatings()->empty()) { rating = L""; int temp = INT_MIN; const std::map<int, std::string> *monthlyRatings = _game->getMod()->getMonthlyRatings(); for (std::map<int, std::string>::const_iterator i = monthlyRatings->begin(); i != monthlyRatings->end(); ++i) { if (i->first > temp && i->first <= _ratingTotal) { temp = i->first; rating = tr(i->second); } } } _txtRating->setText(tr("STR_MONTHLY_RATING").arg(_ratingTotal).arg(rating)); std::wostringstream ss; ss << tr("STR_INCOME") << L"> \x01" << Text::formatFunding(_game->getSavedGame()->getCountryFunding()); ss << L" ("; if (_fundingDiff > 0) ss << '+'; ss << Text::formatFunding(_fundingDiff) << L")"; _txtIncome->setText(ss.str()); std::wostringstream ss2; ss2 << tr("STR_MAINTENANCE") << L"> \x01" << Text::formatFunding(_game->getSavedGame()->getBaseMaintenance()); _txtMaintenance->setText(ss2.str()); std::wostringstream ss3; ss3 << tr("STR_BALANCE") << L"> \x01" << Text::formatFunding(_game->getSavedGame()->getFunds()); _txtBalance->setText(ss3.str()); _txtDesc->setWordWrap(true); // calculate satisfaction std::wostringstream ss5; std::wstring satisFactionString = tr("STR_COUNCIL_IS_DISSATISFIED"); bool resetWarning = true; if (_ratingTotal > difficulty_threshold) { satisFactionString = tr("STR_COUNCIL_IS_GENERALLY_SATISFIED"); } if (_ratingTotal > 500) { satisFactionString = tr("STR_COUNCIL_IS_VERY_PLEASED"); } if (_lastMonthsRating <= difficulty_threshold && _ratingTotal <= difficulty_threshold) { satisFactionString = tr("STR_YOU_HAVE_NOT_SUCCEEDED"); _pactList.erase(_pactList.begin(), _pactList.end()); _happyList.erase(_happyList.begin(), _happyList.end()); _sadList.erase(_sadList.begin(), _sadList.end()); _gameOver = true; } ss5 << satisFactionString; if (!_gameOver) { if (_game->getSavedGame()->getFunds() <= -1000000) { if (_game->getSavedGame()->getWarned()) { ss5.str(L""); ss5 << tr("STR_YOU_HAVE_NOT_SUCCEEDED"); _pactList.erase(_pactList.begin(), _pactList.end()); _happyList.erase(_happyList.begin(), _happyList.end()); _sadList.erase(_sadList.begin(), _sadList.end()); _gameOver = true; } else { ss5 << "\n\n" << tr("STR_COUNCIL_REDUCE_DEBTS"); _game->getSavedGame()->setWarned(true); resetWarning = false; } } } if (resetWarning && _game->getSavedGame()->getWarned()) _game->getSavedGame()->setWarned(false); ss5 << countryList(_happyList, "STR_COUNTRY_IS_PARTICULARLY_PLEASED", "STR_COUNTRIES_ARE_PARTICULARLY_HAPPY"); ss5 << countryList(_sadList, "STR_COUNTRY_IS_UNHAPPY_WITH_YOUR_ABILITY", "STR_COUNTRIES_ARE_UNHAPPY_WITH_YOUR_ABILITY"); ss5 << countryList(_pactList, "STR_COUNTRY_HAS_SIGNED_A_SECRET_PACT", "STR_COUNTRIES_HAVE_SIGNED_A_SECRET_PACT"); _txtDesc->setText(ss5.str()); }
void RedstoneWireTile::recalculate(TileSource* region, int x, int y, int z) { calculateChanges(region, x, y, z, x, y, z); }