ArticleStateCraft::ArticleStateCraft(ArticleDefinitionCraft *defs) : ArticleState(defs->id) { RuleCraft *craft = _game->getMod()->getCraft(defs->id); // add screen elements _txtTitle = new Text(210, 32, 5, 24); // Set palette setPalette("PAL_UFOPAEDIA"); ArticleState::initLayout(); // add other elements add(_txtTitle); // Set up objects _game->getMod()->getSurface(defs->image_id)->blit(_bg); _btnOk->setColor(Palette::blockOffset(15)-1); _btnPrev->setColor(Palette::blockOffset(15)-1); _btnNext->setColor(Palette::blockOffset(15)-1); _txtTitle->setColor(Palette::blockOffset(14)+15); _txtTitle->setBig(); _txtTitle->setWordWrap(true); _txtTitle->setText(tr(defs->title)); _txtInfo = new Text(defs->rect_text.width, defs->rect_text.height, defs->rect_text.x, defs->rect_text.y); add(_txtInfo); _txtInfo->setColor(Palette::blockOffset(14)+15); _txtInfo->setWordWrap(true); _txtInfo->setText(tr(defs->text)); _txtStats = new Text(defs->rect_stats.width, defs->rect_stats.height, defs->rect_stats.x, defs->rect_stats.y); add(_txtStats); _txtStats->setColor(Palette::blockOffset(14)+15); _txtStats->setSecondaryColor(Palette::blockOffset(15)+4); std::wostringstream ss; ss << tr("STR_MAXIMUM_SPEED_UC").arg(Text::formatNumber(craft->getMaxSpeed())) << L'\n'; ss << tr("STR_ACCELERATION").arg(craft->getAcceleration()) << L'\n'; ss << tr("STR_FUEL_CAPACITY").arg(Text::formatNumber(craft->getMaxFuel())) << L'\n'; ss << tr("STR_WEAPON_PODS").arg(craft->getWeapons()) << L'\n'; ss << tr("STR_DAMAGE_CAPACITY_UC").arg(Text::formatNumber(craft->getMaxDamage())) << L'\n'; ss << tr("STR_CARGO_SPACE").arg(craft->getSoldiers()) << L'\n'; ss << tr("STR_HWP_CAPACITY").arg(craft->getVehicles()); _txtStats->setText(ss.str()); centerAllSurfaces(); }
ArticleStateCraft::ArticleStateCraft(Game *game, ArticleDefinitionCraft *defs, int palSwitch) : ArticleState(game, defs->id, palSwitch) { RuleCraft *craft = _game->getRuleset()->getCraft(defs->id); // add screen elements _txtTitle = new Text(155, 32, 5, 24); // Set palette _game->setPalette(_game->getResourcePack()->getPalette("PALETTES.DAT_3")->getColors()); ArticleState::initLayout(); // add other elements add(_txtTitle); // Set up objects _game->getResourcePack()->getSurface(defs->image_id)->blit(_bg); _btnOk->setColor(Palette::blockOffset(15)-1); _btnPrev->setColor(Palette::blockOffset(15)-1); _btnNext->setColor(Palette::blockOffset(15)-1); _txtTitle->setColor(Palette::blockOffset(14)+15); _txtTitle->setBig(); _txtTitle->setWordWrap(true); _txtTitle->setText(Ufopaedia::buildText(_game, defs->title)); _txtInfo = new Text(defs->rect_text.width, defs->rect_text.height, defs->rect_text.x, defs->rect_text.y); add(_txtInfo); _txtInfo->setColor(Palette::blockOffset(14)+15); _txtInfo->setWordWrap(true); _txtInfo->setText(Ufopaedia::buildText(_game, defs->text)); _txtStats = new Text(defs->rect_stats.width, defs->rect_stats.height, defs->rect_stats.x, defs->rect_stats.y); add(_txtStats); _txtStats->setColor(Palette::blockOffset(14)+15); _txtStats->setSecondaryColor(Palette::blockOffset(15)+4); std::wstringstream ss; ss << _game->getLanguage()->getString("STR_MAXIMUM_SPEED_UC") << L'\x01' << craft->getMaxSpeed() << L'\x01' << L'\n'; ss << _game->getLanguage()->getString("STR_ACCELERATION") << L'\x01' << craft->getAcceleration() << L'\x01' << L'\n'; ss << _game->getLanguage()->getString("STR_FUEL_CAPACITY") << L'\x01' << craft->getMaxFuel() << L'\x01' << L'\n'; ss << _game->getLanguage()->getString("STR_WEAPON_PODS") << L'\x01' << craft->getWeapons() << L'\x01' << L'\n'; ss << _game->getLanguage()->getString("STR_DAMAGE_CAPACITY_UC") << L'\x01' << craft->getMaxDamage() << L'\x01' << L'\n'; ss << _game->getLanguage()->getString("STR_CARGO_SPACE") << L'\x01' << craft->getSoldiers() << L'\x01' << L'\n'; ss << _game->getLanguage()->getString("STR_HWP_CAPACITY") << L'\x01' << craft->getVehicles(); _txtStats->setText(ss.str()); }
ArticleStateTFTDCraft::ArticleStateTFTDCraft(ArticleDefinitionTFTD *defs) : ArticleStateTFTD(defs) { RuleCraft *craft = _game->getRuleset()->getCraft(defs->id); _txtStats = new Text(126, 56, 192, 116); add(_txtStats); _txtStats->setColor(Palette::blockOffset(0)+2); _txtStats->setSecondaryColor(Palette::blockOffset(15)+4); std::wostringstream ss; ss << tr("STR_MAXIMUM_SPEED_UC").arg(Text::formatNumber(craft->getMaxSpeed())) << L'\n'; ss << tr("STR_ACCELERATION").arg(craft->getAcceleration()) << L'\n'; ss << tr("STR_FUEL_CAPACITY").arg(Text::formatNumber(craft->getMaxFuel())) << L'\n'; ss << tr("STR_WEAPON_PODS").arg(craft->getWeapons()) << L'\n'; ss << tr("STR_DAMAGE_CAPACITY_UC").arg(Text::formatNumber(craft->getMaxDamage())) << L'\n'; ss << tr("STR_CARGO_SPACE").arg(craft->getSoldiers()) << L'\n'; ss << tr("STR_HWP_CAPACITY").arg(craft->getVehicles()); _txtStats->setText(ss.str()); centerAllSurfaces(); }
/** * Initializes all the elements in the Monthly Costs screen. * @param game Pointer to the core game. * @param base Pointer to the base to get info from. */ MonthlyCostsState::MonthlyCostsState(Base *base) : _base(base) { // Create objects _window = new Window(this, 320, 200, 0, 0); _btnOk = new TextButton(300, 20, 10, 170); _txtTitle = new Text(310, 17, 5, 12); _txtCost = new Text(80, 9, 115, 32); _txtQuantity = new Text(55, 9, 195, 32); _txtTotal = new Text(60, 9, 249, 32); _txtRental = new Text(150, 9, 10, 48); _txtSalaries = new Text(150, 9, 10, 80); _txtIncome = new Text(150, 9, 10, 136); _lstCrafts = new TextList(288, 24, 10, 56); _lstSalaries = new TextList(300, 30, 10, 88); _lstMaintenance = new TextList(300, 9, 10, 120); _lstTotal = new TextList(100, 9, 205, 136); // Set palette setPalette("PAL_BASESCAPE", 6); add(_window); add(_btnOk); add(_txtTitle); add(_txtCost); add(_txtQuantity); add(_txtTotal); add(_txtRental); add(_txtSalaries); add(_txtIncome); add(_lstCrafts); add(_lstSalaries); add(_lstMaintenance); add(_lstTotal); centerAllSurfaces(); // Set up objects _window->setColor(Palette::blockOffset(15)+1); _window->setBackground(_game->getResourcePack()->getSurface("BACK13.SCR")); _btnOk->setColor(Palette::blockOffset(15)+1); _btnOk->setText(tr("STR_OK")); _btnOk->onMouseClick((ActionHandler)&MonthlyCostsState::btnOkClick); _btnOk->onKeyboardPress((ActionHandler)&MonthlyCostsState::btnOkClick, Options::keyOk); _btnOk->onKeyboardPress((ActionHandler)&MonthlyCostsState::btnOkClick, Options::keyCancel); _txtTitle->setColor(Palette::blockOffset(15)+1); _txtTitle->setBig(); _txtTitle->setAlign(ALIGN_CENTER); _txtTitle->setText(tr("STR_MONTHLY_COSTS")); _txtCost->setColor(Palette::blockOffset(15)+1); _txtCost->setText(tr("STR_COST_PER_UNIT")); _txtQuantity->setColor(Palette::blockOffset(15)+1); _txtQuantity->setText(tr("STR_QUANTITY")); _txtTotal->setColor(Palette::blockOffset(15)+1); _txtTotal->setText(tr("STR_TOTAL")); _txtRental->setColor(Palette::blockOffset(15)+1); _txtRental->setText(tr("STR_CRAFT_RENTAL")); _txtSalaries->setColor(Palette::blockOffset(15)+1); _txtSalaries->setText(tr("STR_SALARIES")); _txtIncome->setColor(Palette::blockOffset(13)+10); std::wostringstream ss; ss << tr("STR_INCOME") << L"=" << Text::formatFunding(_game->getSavedGame()->getCountryFunding()); _txtIncome->setText(ss.str()); _lstCrafts->setColor(Palette::blockOffset(13)+10); _lstCrafts->setColumns(4, 125, 70, 44, 60); _lstCrafts->setDot(true); const std::vector<std::string> &crafts = _game->getRuleset()->getCraftsList(); for (std::vector<std::string>::const_iterator i = crafts.begin(); i != crafts.end(); ++i) { RuleCraft *craft = _game->getRuleset()->getCraft(*i); if (craft->getRentCost() != 0 && _game->getSavedGame()->isResearched(craft->getRequirements())) { std::wostringstream ss2; ss2 << _base->getCraftCount((*i)); _lstCrafts->addRow(4, tr(*i).c_str(), Text::formatFunding(craft->getRentCost()).c_str(), ss2.str().c_str(), Text::formatFunding(_base->getCraftCount(*i) * craft->getRentCost()).c_str()); } } _lstSalaries->setColor(Palette::blockOffset(13)+10); _lstSalaries->setColumns(4, 125, 70, 44, 60); _lstSalaries->setDot(true); std::wostringstream ss4; ss4 << _base->getSoldiers()->size(); _lstSalaries->addRow(4, tr("STR_SOLDIERS").c_str(), Text::formatFunding(_game->getRuleset()->getSoldierCost()).c_str(), ss4.str().c_str(), Text::formatFunding(_base->getSoldiers()->size() * _game->getRuleset()->getSoldierCost()).c_str()); std::wostringstream ss5; ss5 << _base->getTotalEngineers(); _lstSalaries->addRow(4, tr("STR_ENGINEERS").c_str(), Text::formatFunding(_game->getRuleset()->getEngineerCost()).c_str(), ss5.str().c_str(), Text::formatFunding(_base->getTotalEngineers() * _game->getRuleset()->getEngineerCost()).c_str()); std::wostringstream ss6; ss6 << _base->getTotalScientists(); _lstSalaries->addRow(4, tr("STR_SCIENTISTS").c_str(), Text::formatFunding(_game->getRuleset()->getScientistCost()).c_str(), ss6.str().c_str(), Text::formatFunding(_base->getTotalScientists() * _game->getRuleset()->getScientistCost()).c_str()); _lstMaintenance->setColor(Palette::blockOffset(13)+10); _lstMaintenance->setColumns(2, 239, 60); _lstMaintenance->setDot(true); _lstMaintenance->addRow(2, tr("STR_BASE_MAINTENANCE").c_str(), Text::formatFunding(_base->getFacilityMaintenance()).c_str()); _lstMaintenance->setCellColor(0, 0, Palette::blockOffset(15)+1); _lstTotal->setColor(Palette::blockOffset(13)); _lstTotal->setColumns(2, 44, 55); _lstTotal->setDot(true); _lstTotal->addRow(2, tr("STR_TOTAL").c_str(), Text::formatFunding(_base->getMonthlyMaintenace()).c_str()); }
/** * Loads a ruleset's contents from a YAML file. * Rules that match pre-existing rules overwrite them. * @param filename YAML filename. */ void Ruleset::loadFile(const std::string &filename) { YAML::Node doc = YAML::LoadFile(filename); for (YAML::const_iterator i = doc["countries"].begin(); i != doc["countries"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleCountry *rule; if (_countries.find(type) != _countries.end()) { rule = _countries[type]; } else { rule = new RuleCountry(type); _countries[type] = rule; _countriesIndex.push_back(type); } rule->load(*i); } for (YAML::const_iterator i = doc["regions"].begin(); i != doc["regions"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleRegion *rule; if (_regions.find(type) != _regions.end()) { rule = _regions[type]; } else { rule = new RuleRegion(type); _regions[type] = rule; _regionsIndex.push_back(type); } rule->load(*i); } for (YAML::const_iterator i = doc["facilities"].begin(); i != doc["facilities"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleBaseFacility *rule; if (_facilities.find(type) != _facilities.end()) { rule = _facilities[type]; } else { rule = new RuleBaseFacility(type); _facilities[type] = rule; _facilitiesIndex.push_back(type); } _facilityListOrder += 100; rule->load(*i, _modIndex, _facilityListOrder); } for (YAML::const_iterator i = doc["crafts"].begin(); i != doc["crafts"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleCraft *rule; if (_crafts.find(type) != _crafts.end()) { rule = _crafts[type]; } else { rule = new RuleCraft(type); _crafts[type] = rule; _craftsIndex.push_back(type); } _craftListOrder += 100; rule->load(*i, this, _modIndex, _craftListOrder); } for (YAML::const_iterator i = doc["craftWeapons"].begin(); i != doc["craftWeapons"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleCraftWeapon *rule; if (_craftWeapons.find(type) != _craftWeapons.end()) { rule = _craftWeapons[type]; } else { rule = new RuleCraftWeapon(type); _craftWeapons[type] = rule; _craftWeaponsIndex.push_back(type); } rule->load(*i, _modIndex); } for (YAML::const_iterator i = doc["items"].begin(); i != doc["items"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleItem *rule; if (_items.find(type) != _items.end()) { rule = _items[type]; } else { rule = new RuleItem(type); _items[type] = rule; _itemsIndex.push_back(type); } _itemListOrder += 100; rule->load(*i, _modIndex, _itemListOrder); } for (YAML::const_iterator i = doc["ufos"].begin(); i != doc["ufos"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleUfo *rule; if (_ufos.find(type) != _ufos.end()) { rule = _ufos[type]; } else { rule = new RuleUfo(type); _ufos[type] = rule; _ufosIndex.push_back(type); } rule->load(*i, this); } for (YAML::const_iterator i = doc["invs"].begin(); i != doc["invs"].end(); ++i) { std::string type = (*i)["id"].as<std::string>(); RuleInventory *rule; if (_invs.find(type) != _invs.end()) { rule = _invs[type]; } else { rule = new RuleInventory(type); _invs[type] = rule; } rule->load(*i); } for (YAML::const_iterator i = doc["terrains"].begin(); i != doc["terrains"].end(); ++i) { std::string type = (*i)["name"].as<std::string>(); RuleTerrain *rule; if (_terrains.find(type) != _terrains.end()) { rule = _terrains[type]; } else { rule = new RuleTerrain(type); _terrains[type] = rule; _terrainIndex.push_back(type); } rule->load(*i, this); } for (YAML::const_iterator i = doc["armors"].begin(); i != doc["armors"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); Armor *rule; if (_armors.find(type) != _armors.end()) { rule = _armors[type]; } else { rule = new Armor(type, "", 0); _armors[type] = rule; _armorsIndex.push_back(type); } rule->load(*i); } for (YAML::const_iterator i = doc["soldiers"].begin(); i != doc["soldiers"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleSoldier *rule; if (_soldiers.find(type) != _soldiers.end()) { rule = _soldiers[type]; } else { rule = new RuleSoldier(type); _soldiers[type] = rule; } rule->load(*i); } for (YAML::const_iterator i = doc["units"].begin(); i != doc["units"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); Unit *rule; if (_units.find(type) != _units.end()) { rule = _units[type]; } else { rule = new Unit(type, "", ""); _units[type] = rule; } rule->load(*i); } for (YAML::const_iterator i = doc["alienRaces"].begin(); i != doc["alienRaces"].end(); ++i) { std::string type = (*i)["id"].as<std::string>(); AlienRace *rule; if (_alienRaces.find(type) != _alienRaces.end()) { rule = _alienRaces[type]; } else { rule = new AlienRace(type); _alienRaces[type] = rule; _aliensIndex.push_back(type); } rule->load(*i); } for (YAML::const_iterator i = doc["alienDeployments"].begin(); i != doc["alienDeployments"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); AlienDeployment *rule; if (_alienDeployments.find(type) != _alienDeployments.end()) { rule = _alienDeployments[type]; } else { rule = new AlienDeployment(type); _alienDeployments[type] = rule; _deploymentsIndex.push_back(type); } rule->load(*i); } for (YAML::const_iterator i = doc["research"].begin(); i != doc["research"].end(); ++i) { std::string type = (*i)["name"].as<std::string>(); RuleResearch *rule; if (_research.find(type) != _research.end()) { rule = _research[type]; } else { rule = new RuleResearch(type); _research[type] = rule; _researchIndex.push_back(type); } _researchListOrder += 100; rule->load(*i, _researchListOrder); } for (YAML::const_iterator i = doc["manufacture"].begin(); i != doc["manufacture"].end(); ++i) { std::string type = (*i)["name"].as<std::string>(); RuleManufacture *rule; if (_manufacture.find(type) != _manufacture.end()) { rule = _manufacture[type]; } else { rule = new RuleManufacture(type); _manufacture[type] = rule; _manufactureIndex.push_back(type); } _manufactureListOrder += 100; rule->load(*i, _manufactureListOrder); } for (YAML::const_iterator i = doc["ufopaedia"].begin(); i != doc["ufopaedia"].end(); ++i) { std::string id = (*i)["id"].as<std::string>(); ArticleDefinition *rule; if (_ufopaediaArticles.find(id) != _ufopaediaArticles.end()) { rule = _ufopaediaArticles[id]; } else { UfopaediaTypeId type = (UfopaediaTypeId)(*i)["type_id"].as<int>(); switch (type) { case UFOPAEDIA_TYPE_CRAFT: rule = new ArticleDefinitionCraft(); break; case UFOPAEDIA_TYPE_CRAFT_WEAPON: rule = new ArticleDefinitionCraftWeapon(); break; case UFOPAEDIA_TYPE_VEHICLE: rule = new ArticleDefinitionVehicle(); break; case UFOPAEDIA_TYPE_ITEM: rule = new ArticleDefinitionItem(); break; case UFOPAEDIA_TYPE_ARMOR: rule = new ArticleDefinitionArmor(); break; case UFOPAEDIA_TYPE_BASE_FACILITY: rule = new ArticleDefinitionBaseFacility(); break; case UFOPAEDIA_TYPE_TEXTIMAGE: rule = new ArticleDefinitionTextImage(); break; case UFOPAEDIA_TYPE_TEXT: rule = new ArticleDefinitionText(); break; case UFOPAEDIA_TYPE_UFO: rule = new ArticleDefinitionUfo(); break; default: rule = 0; break; } _ufopaediaArticles[id] = rule; _ufopaediaIndex.push_back(id); } _ufopaediaListOrder += 100; rule->load(*i, _ufopaediaListOrder); } //_startingBase->load(i->second, 0); if (doc["startingBase"]) _startingBase = YAML::Node(doc["startingBase"]); _startingTime.load(doc["startingTime"]); _costSoldier = doc["costSoldier"].as<int>(_costSoldier); _costEngineer = doc["costEngineer"].as<int>(_costEngineer); _costScientist = doc["costScientist"].as<int>(_costScientist); _timePersonnel = doc["timePersonnel"].as<int>(_timePersonnel); for (YAML::const_iterator i = doc["ufoTrajectories"].begin(); i != doc["ufoTrajectories"].end(); ++i) { std::string id = (*i)["id"].as<std::string>(); if (_ufoTrajectories.find(id) != _ufoTrajectories.end()) { _ufoTrajectories[id]->load(*i); } else { std::auto_ptr<UfoTrajectory> rule(new UfoTrajectory); rule->load(*i); _ufoTrajectories[id] = rule.release(); } } for (YAML::const_iterator i = doc["alienMissions"].begin(); i != doc["alienMissions"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); if (_alienMissions.find(type) != _alienMissions.end()) { _alienMissions[type]->load(*i); } else { std::auto_ptr<RuleAlienMission> rule(new RuleAlienMission()); rule->load(*i); _alienMissions[type] = rule.release(); _alienMissionsIndex.push_back(type); } } _alienItemLevels.clear(); for (YAML::const_iterator i = doc["alienItemLevels"].begin(); i != doc["alienItemLevels"].end(); ++i) { std::vector<int> type = (*i).as< std::vector<int> >(); _alienItemLevels.push_back(type); } for (YAML::const_iterator i = doc["MCDPatches"].begin(); i != doc["MCDPatches"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); if (_MCDPatches.find(type) != _MCDPatches.end()) { _MCDPatches[type]->load(*i); } else { std::auto_ptr<MCDPatch> patch(new MCDPatch()); patch->load(*i); _MCDPatches[type] = patch.release(); _MCDPatchesIndex.push_back(type); } } for (YAML::const_iterator i = doc["extraSprites"].begin(); i != doc["extraSprites"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); std::auto_ptr<ExtraSprites> extraSprites(new ExtraSprites()); extraSprites->load(*i, _modIndex); _extraSprites.push_back(std::make_pair(type, extraSprites.release())); _extraSpritesIndex.push_back(type); } for (YAML::const_iterator i = doc["extraSounds"].begin(); i != doc["extraSounds"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); std::auto_ptr<ExtraSounds> extraSounds(new ExtraSounds()); extraSounds->load(*i, _modIndex); _extraSounds.push_back(std::make_pair(type, extraSounds.release())); _extraSoundsIndex.push_back(type); } for (YAML::const_iterator i = doc["extraStrings"].begin(); i != doc["extraStrings"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); if (_extraStrings.find(type) != _extraStrings.end()) { _extraStrings[type]->load(*i); } else { std::auto_ptr<ExtraStrings> extraStrings(new ExtraStrings()); extraStrings->load(*i); _extraStrings[type] = extraStrings.release(); _extraStringsIndex.push_back(type); } } _modIndex += 1000; }
/** * Initializes all the elements in the New Battle window. * @param game Pointer to the core game. */ NewBattleState::NewBattleState() : _craft(0) { // Create objects _window = new Window(this, 320, 200, 0, 0, POPUP_BOTH); _txtTitle = new Text(320, 17, 0, 9); _txtMapOptions = new Text(148, 9, 8, 68); _frameLeft = new Frame(148, 96, 8, 78); _txtAlienOptions = new Text(148, 9, 164, 68); _frameRight = new Frame(148, 96, 164, 78); _txtMission = new Text(100, 9, 8, 30); _cbxMission = new ComboBox(this, 214, 16, 98, 26); _txtCraft = new Text(100, 9, 8, 50); _cbxCraft = new ComboBox(this, 106, 16, 98, 46); _btnEquip = new TextButton(106, 16, 206, 46); _txtDarkness = new Text(120, 9, 22, 83); _slrDarkness = new Slider(120, 16, 22, 93); _txtTerrain = new Text(120, 9, 22, 113); _cbxTerrain = new ComboBox(this, 120, 16, 22, 123); _txtDepth = new Text(120, 9, 22, 143); _slrDepth = new Slider(120, 16, 22, 153); _txtDifficulty = new Text(120, 9, 178, 83); _cbxDifficulty = new ComboBox(this, 120, 16, 178, 93); _txtAlienRace = new Text(120, 9, 178, 113); _cbxAlienRace = new ComboBox(this, 120, 16, 178, 123); _txtAlienTech = new Text(120, 9, 178, 143); _slrAlienTech = new Slider(120, 16, 178, 153); _btnOk = new TextButton(100, 16, 8, 176); _btnCancel = new TextButton(100, 16, 110, 176); _btnRandom = new TextButton(100, 16, 212, 176); // Set palette setInterface("newBattleMenu"); add(_window, "window", "newBattleMenu"); add(_txtTitle, "heading", "newBattleMenu"); add(_txtMapOptions, "heading", "newBattleMenu"); add(_frameLeft, "frames", "newBattleMenu"); add(_txtAlienOptions, "heading", "newBattleMenu"); add(_frameRight, "frames", "newBattleMenu"); add(_txtMission, "text", "newBattleMenu"); add(_txtCraft, "text", "newBattleMenu"); add(_btnEquip, "button1", "newBattleMenu"); add(_txtDarkness, "text", "newBattleMenu"); add(_slrDarkness, "button1", "newBattleMenu"); add(_txtDepth, "text", "newBattleMenu"); add(_slrDepth, "button1", "newBattleMenu"); add(_txtTerrain, "text", "newBattleMenu"); add(_txtDifficulty, "text", "newBattleMenu"); add(_txtAlienRace, "text", "newBattleMenu"); add(_txtAlienTech, "text", "newBattleMenu"); add(_slrAlienTech, "button1", "newBattleMenu"); add(_btnOk, "button2", "newBattleMenu"); add(_btnCancel, "button2", "newBattleMenu"); add(_btnRandom, "button2", "newBattleMenu"); add(_cbxTerrain, "button1", "newBattleMenu"); add(_cbxAlienRace, "button1", "newBattleMenu"); add(_cbxDifficulty, "button1", "newBattleMenu"); add(_cbxCraft, "button1", "newBattleMenu"); add(_cbxMission, "button1", "newBattleMenu"); centerAllSurfaces(); // Set up objects _window->setBackground(_game->getMod()->getSurface("BACK01.SCR")); _txtTitle->setAlign(ALIGN_CENTER); _txtTitle->setBig(); _txtTitle->setText(tr("STR_MISSION_GENERATOR")); _txtMapOptions->setText(tr("STR_MAP_OPTIONS")); _frameLeft->setThickness(3); _txtAlienOptions->setText(tr("STR_ALIEN_OPTIONS")); _frameRight->setThickness(3); _txtMission->setText(tr("STR_MISSION")); _txtCraft->setText(tr("STR_CRAFT")); _txtDarkness->setText(tr("STR_MAP_DARKNESS")); _txtDepth->setText(tr("STR_MAP_DEPTH")); _txtTerrain->setText(tr("STR_MAP_TERRAIN")); _txtDifficulty->setText(tr("STR_DIFFICULTY")); _txtAlienRace->setText(tr("STR_ALIEN_RACE")); _txtAlienTech->setText(tr("STR_ALIEN_TECH_LEVEL")); _missionTypes = _game->getMod()->getDeploymentsList(); _cbxMission->setOptions(_missionTypes, true); _cbxMission->onChange((ActionHandler)&NewBattleState::cbxMissionChange); const std::vector<std::string> &crafts = _game->getMod()->getCraftsList(); for (std::vector<std::string>::const_iterator i = crafts.begin(); i != crafts.end(); ++i) { RuleCraft *rule = _game->getMod()->getCraft(*i); if (rule->getSoldiers() > 0) { _crafts.push_back(*i); } } _cbxCraft->setOptions(_crafts, true); _cbxCraft->onChange((ActionHandler)&NewBattleState::cbxCraftChange); _slrDarkness->setRange(0, 15); _slrDepth->setRange(1, 3); _cbxTerrain->onChange((ActionHandler)&NewBattleState::cbxTerrainChange); std::vector<std::string> difficulty; difficulty.push_back(tr("STR_1_BEGINNER")); difficulty.push_back(tr("STR_2_EXPERIENCED")); difficulty.push_back(tr("STR_3_VETERAN")); difficulty.push_back(tr("STR_4_GENIUS")); difficulty.push_back(tr("STR_5_SUPERHUMAN")); _cbxDifficulty->setOptions(difficulty); _alienRaces = _game->getMod()->getAlienRacesList(); for (std::vector<std::string>::iterator i = _alienRaces.begin(); i != _alienRaces.end();) { if ((*i).find("_UNDERWATER") != std::string::npos) { i = _alienRaces.erase(i); } else { ++i; } } _cbxAlienRace->setOptions(_alienRaces, true); _slrAlienTech->setRange(0, _game->getMod()->getAlienItemLevels().size()-1); _btnEquip->setText(tr("STR_EQUIP_CRAFT")); _btnEquip->onMouseClick((ActionHandler)&NewBattleState::btnEquipClick); _btnRandom->setText(tr("STR_RANDOMIZE")); _btnRandom->onMouseClick((ActionHandler)&NewBattleState::btnRandomClick); _btnOk->setText(tr("STR_OK")); _btnOk->onMouseClick((ActionHandler)&NewBattleState::btnOkClick); _btnOk->onKeyboardPress((ActionHandler)&NewBattleState::btnOkClick, Options::keyOk); _btnCancel->setText(tr("STR_CANCEL")); _btnCancel->onMouseClick((ActionHandler)&NewBattleState::btnCancelClick); _btnCancel->onKeyboardPress((ActionHandler)&NewBattleState::btnCancelClick, Options::keyCancel); load(); }