/** * Draw the ScannerView view */ void ScannerView::draw() { SurfaceSet *set = _game->getResourcePack()->getSurfaceSet("DETBLOB.DAT"); Surface *surface = 0; clear(); this->lock(); for (int x = -9; x < 10; x++) { for (int y = -9; y < 10; y++) { Tile *t = _game->getSavedGame()->getBattleGame()->getTile(Position(x,y,0) + _unit->getPosition()); if (t && t->getUnit() && t->getUnit()->getMotionPoints()) { int frame = (t->getUnit()->getMotionPoints() / 5); if (frame >= 0) { if (frame > 5) frame = 5; surface = set->getFrame(frame + _frame); surface->blitNShade(this, Surface::getX()+((9+x)*8)-4, Surface::getY()+((9+y)*8)-4, 0); } } } } // the arrow of the direction the unit is pointed surface = set->getFrame(7 + _unit->getDirection()); surface->blitNShade(this, Surface::getX()+(9*8)-4, Surface::getY()+(9*8)-4, 0); this->unlock(); }
/** * Draws the item's sprite on a surface. * @param item the given item * @surface surface the given surface */ void BattlescapeState::drawItemSprite(BattleItem *item, Surface *surface) { SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BIGOBS.PCK"); Surface *frame = texture->getFrame(item->getRules()->getBigSprite()); frame->setX((2 - item->getRules()->getSizeX()) * 8); frame->setY((3 - item->getRules()->getSizeY()) * 8); texture->getFrame(item->getRules()->getBigSprite())->blit(surface); }
/** * Draws the medikit view. */ void MedikitView::draw() { SurfaceSet *set = _game->getMod()->getSurfaceSet("MEDIBITS.DAT"); int fatal_wound = _unit->getFatalWound(_selectedPart); std::wostringstream ss, ss1; int green = 0; int red = 3; if (_game->getMod()->getInterface("medikit") && _game->getMod()->getInterface("medikit")->getElement("body")) { green = _game->getMod()->getInterface("medikit")->getElement("body")->color; red = _game->getMod()->getInterface("medikit")->getElement("body")->color2; } this->lock(); for (unsigned int i = 0; i < set->getTotalFrames(); i++) { int wound = _unit->getFatalWound(i); Surface * surface = set->getFrame (i); int baseColor = wound ? red : green; surface->blitNShade(this, Surface::getX(), Surface::getY(), 0, false, baseColor); } this->unlock(); _redraw = false; if (_selectedPart == -1) { return; } ss << _game->getLanguage()->getString(PARTS_STRING[_selectedPart]); ss1 << fatal_wound; _partTxt->setText(ss.str()); _woundTxt->setText(ss1.str()); }
/** * Update soldier stats when the soldier changes. */ void InventoryState::init() { BattleUnit *unit = _battleGame->getSelectedUnit(); unit->setCache(0); _soldier->clear(); _btnRank->clear(); _txtName->setText(unit->getName(_game->getLanguage())); _inv->setSelectedUnit(unit); Soldier *s = _game->getSavedGame()->getSoldier(unit->getId()); if (s) { SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BASEBITS.PCK"); texture->getFrame(s->getRankSprite())->setX(0); texture->getFrame(s->getRankSprite())->setY(0); texture->getFrame(s->getRankSprite())->blit(_btnRank); std::string look = s->getArmor()->getSpriteInventory(); if (s->getGender() == GENDER_MALE) look += "M"; else look += "F"; if (s->getLook() == LOOK_BLONDE) look += "0"; if (s->getLook() == LOOK_BROWNHAIR) look += "1"; if (s->getLook() == LOOK_ORIENTAL) look += "2"; if (s->getLook() == LOOK_AFRICAN) look += "3"; look += ".SPK"; if (!CrossPlatform::fileExists(CrossPlatform::getDataFile("UFOGRAPH/" + look))) { look = s->getArmor()->getSpriteInventory() + ".SPK"; } _game->getResourcePack()->getSurface(look)->blit(_soldier); } if (_tu) { std::wstringstream ss; ss << _game->getLanguage()->getString("STR_TUS") << L'\x01' << unit->getTimeUnits(); _txtTus->setText(ss.str()); } }
/** * Update soldier stats when the soldier changes. */ void InventoryState::init() { BattleUnit *unit = _battleGame->getSelectedUnit(); unit->setCache(0); _soldier->clear(); _btnRank->clear(); _txtName->setText(unit->getUnit()->getName(_game->getLanguage())); _inv->setSelectedUnit(unit); Soldier *s = dynamic_cast<Soldier*>(unit->getUnit()); if (s) { SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BASEBITS.PCK"); texture->getFrame(s->getRankSprite())->setX(0); texture->getFrame(s->getRankSprite())->setY(0); texture->getFrame(s->getRankSprite())->blit(_btnRank); std::string look = "MAN_0"; if (s->getGender() == GENDER_MALE) look += "M"; else look += "F"; if (s->getLook() == LOOK_BLONDE) look += "0"; if (s->getLook() == LOOK_BROWNHAIR) look += "1"; if (s->getLook() == LOOK_ORIENTAL) look += "2"; if (s->getLook() == LOOK_AFRICAN) look += "3"; look += ".SPK"; _game->getResourcePack()->getSurface(look)->blit(_soldier); } if (_tu) { std::wstringstream ss; ss << _game->getLanguage()->getString("STR_TUS") << L'\x01' << unit->getTimeUnits(); _txtTus->setText(ss.str()); } }
/** * Handles clicks on the medikit view. * @param action Pointer to an action. * @param state State that the action handlers belong to. */ void MedikitView::mouseClick (Action *action, State *) { SurfaceSet *set = _game->getMod()->getSurfaceSet("MEDIBITS.DAT"); int x = action->getRelativeXMouse() / action->getXScale(); int y = action->getRelativeYMouse() / action->getYScale(); for (unsigned int i = 0; i < set->getTotalFrames(); i++) { Surface * surface = set->getFrame (i); if (surface->getPixel(x, y)) { _selectedPart = i; _redraw = true; break; } } }
/** * Update soldier stats when * the soldier changes. */ void SoldierInfoState::init() { Soldier *s = _base->getSoldiers()->at(_soldier); _edtSoldier->setText(s->getName()); UnitStats *initial = s->getInitStats(); UnitStats *current = s->getCurrentStats(); SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BASEBITS.PCK"); texture->getFrame(s->getRankSprite())->setX(0); texture->getFrame(s->getRankSprite())->setY(0); texture->getFrame(s->getRankSprite())->blit(_rank); std::wstringstream ss; ss << current->tu; _numTimeUnits->setText(ss.str()); _barTimeUnits->setMax(current->tu); _barTimeUnits->setValue(current->tu); _barTimeUnits->setValue2(initial->tu); std::wstringstream ss2; ss2 << current->stamina; _numStamina->setText(ss2.str()); _barStamina->setMax(current->stamina); _barStamina->setValue(current->stamina); _barStamina->setValue2(initial->stamina); std::wstringstream ss3; ss3 << current->health; _numHealth->setText(ss3.str()); _barHealth->setMax(current->health); _barHealth->setValue(current->health); _barHealth->setValue2(initial->health); std::wstringstream ss4; ss4 << current->bravery; _numBravery->setText(ss4.str()); _barBravery->setMax(current->bravery); _barBravery->setValue(current->bravery); _barBravery->setValue2(initial->bravery); std::wstringstream ss5; ss5 << current->reactions; _numReactions->setText(ss5.str()); _barReactions->setMax(current->reactions); _barReactions->setValue(current->reactions); _barReactions->setValue2(initial->reactions); std::wstringstream ss6; ss6 << current->firing; _numFiring->setText(ss6.str()); _barFiring->setMax(current->firing); _barFiring->setValue(current->firing); _barFiring->setValue2(initial->firing); std::wstringstream ss7; ss7 << current->throwing; _numThrowing->setText(ss7.str()); _barThrowing->setMax(current->throwing); _barThrowing->setValue(current->throwing); _barThrowing->setValue2(initial->throwing); std::wstringstream ss8; ss8 << current->strength; _numStrength->setText(ss8.str()); _barStrength->setMax(current->strength); _barStrength->setValue(current->strength); _barStrength->setValue2(initial->strength); _txtArmor->setText(_game->getLanguage()->getString(s->getArmor()->getType())); std::wstringstream ss9; ss9 << _game->getLanguage()->getString("STR_RANK_") << L'\x01' << _game->getLanguage()->getString(s->getRankString()); _txtRank->setText(ss9.str()); std::wstringstream ss10; ss10 << _game->getLanguage()->getString("STR_MISSIONS") << L'\x01' << s->getMissions(); _txtMissions->setText(ss10.str()); std::wstringstream ss11; ss11 << _game->getLanguage()->getString("STR_KILLS") << L'\x01' << s->getKills(); _txtKills->setText(ss11.str()); std::wstringstream ss12; ss12 << _game->getLanguage()->getString("STR_CRAFT_") << L'\x01'; if (s->getCraft() == 0) ss12 << _game->getLanguage()->getString("STR_NONE_UC"); else ss12 << s->getCraft()->getName(_game->getLanguage()); _txtCraft->setText(ss12.str()); if (s->getWoundRecovery() > 1) { std::wstringstream ss13; ss13 << _game->getLanguage()->getString("STR_WOUND_RECOVERY") << L'\x01' << s->getWoundRecovery(); if (s->getWoundRecovery() > 1) ss13 << _game->getLanguage()->getString("STR_DAYS"); else ss13 << _game->getLanguage()->getString("STR_DAY"); _txtRecovery->setText(ss13.str()); } else { _txtRecovery->setText(L""); } }
/** * Updates all soldier stats when the soldier changes. */ void InventoryState::init() { State::init(); BattleUnit *unit = _battleGame->getSelectedUnit(); // no selected unit, close inventory if (unit == 0) { btnOkClick(0); return; } // skip to the first unit with inventory if (!unit->hasInventory()) { if (_parent) { _parent->selectNextPlayerUnit(false, false, true); } else { _battleGame->selectNextPlayerUnit(false, false, true); } // no available unit, close inventory if (_battleGame->getSelectedUnit() == 0 || !_battleGame->getSelectedUnit()->hasInventory()) { // starting a mission with just vehicles btnOkClick(0); return; } else { unit = _battleGame->getSelectedUnit(); } } unit->setCache(0); _soldier->clear(); _rank->clear(); _txtName->setBig(); _txtName->setText(unit->getName(_game->getLanguage())); _inv->setSelectedUnit(unit); Soldier *s = unit->getGeoscapeSoldier(); if (s) { SurfaceSet *texture = _game->getMod()->getSurfaceSet("SMOKE.PCK"); texture->getFrame(20 + s->getRank())->setX(0); texture->getFrame(20 + s->getRank())->setY(0); texture->getFrame(20 + s->getRank())->blit(_rank); std::string look = s->getArmor()->getSpriteInventory(); if (s->getGender() == GENDER_MALE) look += "M"; else look += "F"; if (s->getLook() == LOOK_BLONDE) look += "0"; if (s->getLook() == LOOK_BROWNHAIR) look += "1"; if (s->getLook() == LOOK_ORIENTAL) look += "2"; if (s->getLook() == LOOK_AFRICAN) look += "3"; look += ".SPK"; const std::set<std::string> &ufographContents = FileMap::getVFolderContents("UFOGRAPH"); std::string lcaseLook = look; std::transform(lcaseLook.begin(), lcaseLook.end(), lcaseLook.begin(), tolower); if (ufographContents.find("lcaseLook") == ufographContents.end() && !_game->getMod()->getSurface(look)) { look = s->getArmor()->getSpriteInventory() + ".SPK"; } _game->getMod()->getSurface(look)->blit(_soldier); } else { Surface *armorSurface = _game->getMod()->getSurface(unit->getArmor()->getSpriteInventory()); if (armorSurface) { armorSurface->blit(_soldier); } } updateStats(); _refreshMouse(); }
/** * Updates soldier stats when * the soldier changes. */ void SoldierInfoState::init() { if(_base->getSoldiers()->empty()) { _game->popState(); return; } if(_soldier == _base->getSoldiers()->size()) { _soldier = 0; } Soldier *s = _base->getSoldiers()->at(_soldier); _edtSoldier->setText(s->getName()); UnitStats *initial = s->getInitStats(); UnitStats *current = s->getCurrentStats(); SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BASEBITS.PCK"); texture->getFrame(s->getRankSprite())->setX(0); texture->getFrame(s->getRankSprite())->setY(0); texture->getFrame(s->getRankSprite())->blit(_rank); std::wstringstream ss; ss << current->tu; _numTimeUnits->setText(ss.str()); _barTimeUnits->setMax(current->tu); _barTimeUnits->setValue(current->tu); _barTimeUnits->setValue2(initial->tu); std::wstringstream ss2; ss2 << current->stamina; _numStamina->setText(ss2.str()); _barStamina->setMax(current->stamina); _barStamina->setValue(current->stamina); _barStamina->setValue2(initial->stamina); std::wstringstream ss3; ss3 << current->health; _numHealth->setText(ss3.str()); _barHealth->setMax(current->health); _barHealth->setValue(current->health); _barHealth->setValue2(initial->health); std::wstringstream ss4; ss4 << current->bravery; _numBravery->setText(ss4.str()); _barBravery->setMax(current->bravery); _barBravery->setValue(current->bravery); _barBravery->setValue2(initial->bravery); std::wstringstream ss5; ss5 << current->reactions; _numReactions->setText(ss5.str()); _barReactions->setMax(current->reactions); _barReactions->setValue(current->reactions); _barReactions->setValue2(initial->reactions); std::wstringstream ss6; ss6 << current->firing; _numFiring->setText(ss6.str()); _barFiring->setMax(current->firing); _barFiring->setValue(current->firing); _barFiring->setValue2(initial->firing); std::wstringstream ss7; ss7 << current->throwing; _numThrowing->setText(ss7.str()); _barThrowing->setMax(current->throwing); _barThrowing->setValue(current->throwing); _barThrowing->setValue2(initial->throwing); std::wstringstream ss8; ss8 << current->strength; _numStrength->setText(ss8.str()); _barStrength->setMax(current->strength); _barStrength->setValue(current->strength); _barStrength->setValue2(initial->strength); std::wstring wsArmor; std::string armorType = s->getArmor()->getType(); if (armorType == "STR_NONE_UC") { wsArmor.reserve(15); wsArmor = tr("STR_ARMOR"); wsArmor += L"> "; wsArmor += tr(armorType); } else wsArmor = tr(armorType); _btnArmor->setText(wsArmor); // _txtArmor->setText(tr(s->getArmor()->getType())); _btnSack->setVisible(!(s->getCraft() && s->getCraft()->getStatus() == "STR_OUT")); std::wstringstream ss9; ss9 << tr("STR_RANK_") << L'\x01' << tr(s->getRankString()); _txtRank->setText(ss9.str()); std::wstringstream ss10; ss10 << tr("STR_MISSIONS") << L'\x01' << s->getMissions(); _txtMissions->setText(ss10.str()); std::wstringstream ss11; ss11 << tr("STR_KILLS") << L'\x01' << s->getKills(); _txtKills->setText(ss11.str()); std::wstringstream ss12; ss12 << tr("STR_CRAFT_") << L'\x01'; if (s->getCraft() == 0) ss12 << tr("STR_NONE_UC"); else ss12 << s->getCraft()->getName(_game->getLanguage()); _txtCraft->setText(ss12.str()); if (s->getWoundRecovery() > 0) { std::wstringstream ss13; ss13 << tr("STR_WOUND_RECOVERY") << L'\x01' << tr("STR_DAY", s->getWoundRecovery()); _txtRecovery->setText(ss13.str()); } else { _txtRecovery->setText(L""); } _txtPsionic->setVisible(s->isInPsiTraining()); if(current->psiSkill > 0) { std::wstringstream ss14; ss14 << current->psiStrength; _numPsiStrength->setText(ss14.str()); _barPsiStrength->setMax(current->psiStrength); _barPsiStrength->setValue(current->psiStrength); _barPsiStrength->setValue2(initial->psiStrength); std::wstringstream ss15; ss15 << current->psiSkill; _numPsiSkill->setText(ss15.str()); _barPsiSkill->setMax(current->psiSkill); _barPsiSkill->setValue(current->psiSkill); _barPsiSkill->setValue2(initial->psiSkill); _txtPsiStrength->setVisible(true); _numPsiStrength->setVisible(true); _barPsiStrength->setVisible(true); _txtPsiSkill->setVisible(true); _numPsiSkill->setVisible(true); _barPsiSkill->setVisible(true); } else { _txtPsiStrength->setVisible(false); _numPsiStrength->setVisible(false); _barPsiStrength->setVisible(false); _txtPsiSkill->setVisible(false); _numPsiSkill->setVisible(false); _barPsiSkill->setVisible(false); } }
/** * Updates soldier name/rank/tu/energy/health/morale. * @param battleUnit Pointer to current unit. */ void BattlescapeState::updateSoldierInfo(BattleUnit *battleUnit) { if (battleUnit == 0) { _txtName->setText(L""); _rank->clear(); _numTimeUnits->clear(); _barTimeUnits->clear(); _barTimeUnits->clear(); _numEnergy->clear(); _barEnergy->clear(); _barEnergy->clear(); _numHealth->clear(); _barHealth->clear(); _barHealth->clear(); _numMorale->clear(); _barMorale->clear(); _barMorale->clear(); _btnLeftHandItem->clear(); _btnRightHandItem->clear(); return; } _txtName->setText(battleUnit->getUnit()->getName()); Soldier *soldier = dynamic_cast<Soldier*>(battleUnit->getUnit()); if (soldier != 0) { SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BASEBITS.PCK"); texture->getFrame(soldier->getRankSprite())->blit(_rank); } _numTimeUnits->setValue(battleUnit->getTimeUnits()); _barTimeUnits->setMax(battleUnit->getUnit()->getTimeUnits()); _barTimeUnits->setValue(battleUnit->getTimeUnits()); _numEnergy->setValue(battleUnit->getEnergy()); _barEnergy->setMax(battleUnit->getUnit()->getStamina()); _barEnergy->setValue(battleUnit->getEnergy()); _numHealth->setValue(battleUnit->getHealth()); _barHealth->setMax(battleUnit->getUnit()->getHealth()); _barHealth->setValue(battleUnit->getHealth()); _numMorale->setValue(battleUnit->getMorale()); _barMorale->setMax(100); _barMorale->setValue(battleUnit->getMorale()); BattleItem *leftHandItem = _battleGame->getItemFromUnit(battleUnit, LEFT_HAND); _btnLeftHandItem->clear(); _numAmmoLeft->clear(); if (leftHandItem) { drawItemSprite(leftHandItem, _btnLeftHandItem); _numAmmoLeft->setValue(leftHandItem->getAmmoQuantity()); } BattleItem *rightHandItem = _battleGame->getItemFromUnit(battleUnit, RIGHT_HAND); _btnRightHandItem->clear(); _numAmmoRight->clear(); if (rightHandItem) { drawItemSprite(rightHandItem, _btnRightHandItem); _numAmmoRight->setValue(rightHandItem->getAmmoQuantity()); } _battleGame->getTerrainModifier()->calculateFOV(_battleGame->getSelectedUnit()); for (int i = 0; i < 10; i++) { _btnVisibleUnit[i]->hide(); _numVisibleUnit[i]->hide(); _visibleUnit[i] = 0; } int j = 0; for (std::vector<BattleUnit*>::iterator i = battleUnit->getVisibleUnits()->begin(); i != battleUnit->getVisibleUnits()->end(); i++) { _btnVisibleUnit[j]->show(); _numVisibleUnit[j]->show(); _visibleUnit[j] = (*i); j++; } }
/** * Updates all soldier stats when the soldier changes. */ void InventoryState::init() { BattleUnit *unit = _battleGame->getSelectedUnit(); unit->setCache(0); _soldier->clear(); _btnRank->clear(); _txtName->setText(unit->getName(_game->getLanguage())); _inv->setSelectedUnit(unit); Soldier *s = _game->getSavedGame()->getSoldier(unit->getId()); if (s) { SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BASEBITS.PCK"); texture->getFrame(s->getRankSprite())->setX(0); texture->getFrame(s->getRankSprite())->setY(0); texture->getFrame(s->getRankSprite())->blit(_btnRank); std::string look = s->getArmor()->getSpriteInventory(); if (s->getGender() == GENDER_MALE) look += "M"; else look += "F"; if (s->getLook() == LOOK_BLONDE) look += "0"; if (s->getLook() == LOOK_BROWNHAIR) look += "1"; if (s->getLook() == LOOK_ORIENTAL) look += "2"; if (s->getLook() == LOOK_AFRICAN) look += "3"; look += ".SPK"; if (!CrossPlatform::fileExists(CrossPlatform::getDataFile("UFOGRAPH/" + look))) { look = s->getArmor()->getSpriteInventory() + ".SPK"; } _game->getResourcePack()->getSurface(look)->blit(_soldier); } if (_showMoreStatsInInventoryView && !_tu) { std::wstringstream ss2; ss2 << _game->getLanguage()->getString("STR_FACCURACY") << L'\x01' << (int)(unit->getStats()->firing * unit->getAccuracyModifier()); _txtFAcc->setText(ss2.str()); std::wstringstream ss3; ss3 << _game->getLanguage()->getString("STR_REACT") << L'\x01' << unit->getStats()->reactions; _txtReact->setText(ss3.str()); if (unit->getStats()->psiSkill > 0) { std::wstringstream ss4; ss4 << _game->getLanguage()->getString("STR_PSKILL") << L'\x01' << unit->getStats()->psiSkill; _txtPSkill->setText(ss4.str()); std::wstringstream ss5; ss5 << _game->getLanguage()->getString("STR_PSTRENGTH") << L'\x01' << unit->getStats()->psiStrength; _txtPStr->setText(ss5.str()); } else { _txtPSkill->setText(L""); _txtPStr->setText(L""); } } updateStats(); }
/** * Updates all soldier stats when the soldier changes. */ void InventoryState::init() { State::init(); BattleUnit *unit = _battleGame->getSelectedUnit(); // no selected unit, close inventory if (unit == 0) { btnOkClick(0); return; } // skip to the first unit with inventory if (!unit->hasInventory()) { if (_parent) { _parent->selectNextPlayerUnit(false, false, true); } else { _battleGame->selectNextPlayerUnit(false, false, true); } // no available unit, close inventory if (_battleGame->getSelectedUnit() == 0 || !_battleGame->getSelectedUnit()->hasInventory()) { // starting a mission with just vehicles btnOkClick(0); return; } else { unit = _battleGame->getSelectedUnit(); } } if (_parent) _parent->getMap()->getCamera()->centerOnPosition(unit->getPosition(), false); unit->setCache(0); _soldier->clear(); _btnRank->clear(); _txtName->setBig(); _txtName->setText(unit->getName(_game->getLanguage())); _inv->setSelectedUnit(unit); Soldier *s = _game->getSavedGame()->getSoldier(unit->getId()); if (s) { SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BASEBITS.PCK"); texture->getFrame(s->getRankSprite())->setX(0); texture->getFrame(s->getRankSprite())->setY(0); texture->getFrame(s->getRankSprite())->blit(_btnRank); std::string look = s->getArmor()->getSpriteInventory(); if (s->getGender() == GENDER_MALE) look += "M"; else look += "F"; if (s->getLook() == LOOK_BLONDE) look += "0"; if (s->getLook() == LOOK_BROWNHAIR) look += "1"; if (s->getLook() == LOOK_ORIENTAL) look += "2"; if (s->getLook() == LOOK_AFRICAN) look += "3"; look += ".SPK"; if (!CrossPlatform::fileExists(CrossPlatform::getDataFile("UFOGRAPH/" + look)) && !_game->getResourcePack()->getSurface(look)) { look = s->getArmor()->getSpriteInventory() + ".SPK"; } _game->getResourcePack()->getSurface(look)->blit(_soldier); } else { Surface *armorSurface = _game->getResourcePack()->getSurface(unit->getArmor()->getSpriteInventory()); if (armorSurface) { armorSurface->blit(_soldier); } } updateStats(); }
/** * Updates all soldier stats when the soldier changes. */ void InventoryState::init() { BattleUnit *unit = _battleGame->getSelectedUnit(); // no selected unit, close inventory if (unit == 0) { btnOkClick(0); return; } // skip to the first unit with inventory if (!unit->hasInventory()) { if (_parent) { _parent->selectNextPlayerUnit(false, false, true); } else { _battleGame->selectNextPlayerUnit(false, false, true); } // no available unit, close inventory if (_battleGame->getSelectedUnit() == 0) { // starting a mission with just vehicles btnOkClick(0); return; } else { unit = _battleGame->getSelectedUnit(); } } if (_parent) _parent->getMap()->getCamera()->centerOnPosition(unit->getPosition()); unit->setCache(0); _soldier->clear(); _btnRank->clear(); _txtName->setBig(); _txtName->setText(unit->getName(_game->getLanguage())); _inv->setSelectedUnit(unit); Soldier *s = _game->getSavedGame()->getSoldier(unit->getId()); if (s) { SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BASEBITS.PCK"); texture->getFrame(s->getRankSprite())->setX(0); texture->getFrame(s->getRankSprite())->setY(0); texture->getFrame(s->getRankSprite())->blit(_btnRank); std::string look = s->getArmor()->getSpriteInventory(); if (s->getGender() == GENDER_MALE) look += "M"; else look += "F"; if (s->getLook() == LOOK_BLONDE) look += "0"; if (s->getLook() == LOOK_BROWNHAIR) look += "1"; if (s->getLook() == LOOK_ORIENTAL) look += "2"; if (s->getLook() == LOOK_AFRICAN) look += "3"; look += ".SPK"; if (!CrossPlatform::fileExists(CrossPlatform::getDataFile("UFOGRAPH/" + look)) && !_game->getResourcePack()->getSurface(look)) { look = s->getArmor()->getSpriteInventory() + ".SPK"; } _game->getResourcePack()->getSurface(look)->blit(_soldier); } else { Surface *armorSurface = _game->getResourcePack()->getSurface(unit->getArmor()->getSpriteInventory()); if (armorSurface) { armorSurface->blit(_soldier); } } if (_showMoreStatsInInventoryView && !_tu) { std::wstringstream ss2; ss2 << tr("STR_FACCURACY") << L'\x01' << (int)(unit->getStats()->firing * unit->getAccuracyModifier()); _txtFAcc->setText(ss2.str()); std::wstringstream ss3; ss3 << tr("STR_REACT") << L'\x01' << unit->getStats()->reactions; _txtReact->setText(ss3.str()); if (unit->getStats()->psiSkill > 0) { std::wstringstream ss4; ss4 << tr("STR_PSKILL") << L'\x01' << unit->getStats()->psiSkill; _txtPSkill->setText(ss4.str()); std::wstringstream ss5; ss5 << tr("STR_PSTRENGTH") << L'\x01' << unit->getStats()->psiStrength; _txtPStr->setText(ss5.str()); } else { _txtPSkill->setText(L""); _txtPStr->setText(L""); } } updateStats(); }
/** * Update soldier stats when * the soldier changes. */ void SoldierInfoState::init() { Soldier *s = _base->getSoldiers()->at(_soldier); _edtSoldier->setText(s->getName()); SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BASEBITS.PCK"); texture->getFrame(s->getRankSprite())->setX(0); texture->getFrame(s->getRankSprite())->setY(0); texture->getFrame(s->getRankSprite())->blit(_rank); std::wstringstream ss; ss << s->getTimeUnits(); _numTimeUnits->setText(ss.str()); _barTimeUnits->setMax(s->getTimeUnits()); _barTimeUnits->setValue(s->getTimeUnits()); std::wstringstream ss2; ss2 << s->getStamina(); _numStamina->setText(ss2.str()); _barStamina->setMax(s->getStamina()); _barStamina->setValue(s->getStamina()); std::wstringstream ss3; ss3 << s->getHealth(); _numHealth->setText(ss3.str()); _barHealth->setMax(s->getHealth()); _barHealth->setValue(s->getHealth()); std::wstringstream ss4; ss4 << s->getBravery(); _numBravery->setText(ss4.str()); _barBravery->setMax(s->getBravery()); _barBravery->setValue(s->getBravery()); std::wstringstream ss5; ss5 << s->getReactions(); _numReactions->setText(ss5.str()); _barReactions->setMax(s->getReactions()); _barReactions->setValue(s->getReactions()); std::wstringstream ss6; ss6 << s->getFiringAccuracy(); _numFiring->setText(ss6.str()); _barFiring->setMax(s->getFiringAccuracy()); _barFiring->setValue(s->getFiringAccuracy()); std::wstringstream ss7; ss7 << s->getThrowingAccuracy(); _numThrowing->setText(ss7.str()); _barThrowing->setMax(s->getThrowingAccuracy()); _barThrowing->setValue(s->getThrowingAccuracy()); std::wstringstream ss8; ss8 << s->getStrength(); _numStrength->setText(ss8.str()); _barStrength->setMax(s->getStrength()); _barStrength->setValue(s->getStrength()); _txtArmor->setText(_game->getLanguage()->getString("STR_NONE_UC")); std::wstringstream ss9; ss9 << _game->getLanguage()->getString("STR_RANK_") << L'\x01' << _game->getLanguage()->getString(s->getRankString()); _txtRank->setText(ss9.str()); std::wstringstream ss10; ss10 << _game->getLanguage()->getString("STR_MISSIONS") << L'\x01' << s->getMissions(); _txtMissions->setText(ss10.str()); std::wstringstream ss11; ss11 << _game->getLanguage()->getString("STR_KILLS") << L'\x01' << s->getKills(); _txtKills->setText(ss11.str()); std::wstringstream ss12; ss12 << _game->getLanguage()->getString("STR_CRAFT_") << L'\x01'; if (s->getCraft() == 0) ss12 << _game->getLanguage()->getString("STR_NONE"); else ss12 << s->getCraft()->getName(_game->getLanguage()); _txtCraft->setText(ss12.str()); }
/** * Updates soldier stats when * the soldier changes. */ void SoldierInfoState::init() { State::init(); if (_list->empty()) { _game->popState(); return; } if (_soldierId >= _list->size()) { _soldierId = 0; } _soldier = _list->at(_soldierId); _edtSoldier->setBig(); _edtSoldier->setText(_soldier->getName()); UnitStats *initial = _soldier->getInitStats(); UnitStats *current = _soldier->getCurrentStats(); UnitStats withArmor(*current); withArmor += *(_soldier->getArmor()->getStats()); SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BASEBITS.PCK"); texture->getFrame(_soldier->getRankSprite())->setX(0); texture->getFrame(_soldier->getRankSprite())->setY(0); texture->getFrame(_soldier->getRankSprite())->blit(_rank); std::wostringstream ss; ss << withArmor.tu; _numTimeUnits->setText(ss.str()); _barTimeUnits->setMax(current->tu); _barTimeUnits->setValue(withArmor.tu); _barTimeUnits->setValue2(std::min(withArmor.tu, initial->tu)); std::wostringstream ss2; ss2 << withArmor.stamina; _numStamina->setText(ss2.str()); _barStamina->setMax(current->stamina); _barStamina->setValue(withArmor.stamina); _barStamina->setValue2(std::min(withArmor.stamina, initial->stamina)); std::wostringstream ss3; ss3 << withArmor.health; _numHealth->setText(ss3.str()); _barHealth->setMax(current->health); _barHealth->setValue(withArmor.health); _barHealth->setValue2(std::min(withArmor.health, initial->health)); std::wostringstream ss4; ss4 << withArmor.bravery; _numBravery->setText(ss4.str()); _barBravery->setMax(current->bravery); _barBravery->setValue(withArmor.bravery); _barBravery->setValue2(std::min(withArmor.bravery, initial->bravery)); std::wostringstream ss5; ss5 << withArmor.reactions; _numReactions->setText(ss5.str()); _barReactions->setMax(current->reactions); _barReactions->setValue(withArmor.reactions); _barReactions->setValue2(std::min(withArmor.reactions, initial->reactions)); std::wostringstream ss6; ss6 << withArmor.firing; _numFiring->setText(ss6.str()); _barFiring->setMax(current->firing); _barFiring->setValue(withArmor.firing); _barFiring->setValue2(std::min(withArmor.firing, initial->firing)); std::wostringstream ss7; ss7 << withArmor.throwing; _numThrowing->setText(ss7.str()); _barThrowing->setMax(current->throwing); _barThrowing->setValue(withArmor.throwing); _barThrowing->setValue2(std::min(withArmor.throwing, initial->throwing)); std::wostringstream ss8; ss8 << withArmor.melee; _numMelee->setText(ss8.str()); _barMelee->setMax(current->melee); _barMelee->setValue(withArmor.melee); _barMelee->setValue2(std::min(withArmor.melee, initial->melee)); std::wostringstream ss9; ss9 << withArmor.strength; _numStrength->setText(ss9.str()); _barStrength->setMax(current->strength); _barStrength->setValue(withArmor.strength); _barStrength->setValue2(std::min(withArmor.strength, initial->strength)); std::wstring wsArmor; std::string armorType = _soldier->getArmor()->getType(); if (armorType == "STR_NONE_UC") { wsArmor= tr("STR_ARMOR_").arg(tr(armorType)); } else { wsArmor = tr(armorType); } _btnArmor->setText(wsArmor); _btnSack->setVisible(!(_soldier->getCraft() && _soldier->getCraft()->getStatus() == "STR_OUT")); _txtRank->setText(tr("STR_RANK_").arg(tr(_soldier->getRankString()))); _txtMissions->setText(tr("STR_MISSIONS").arg(_soldier->getMissions())); _txtKills->setText(tr("STR_KILLS").arg(_soldier->getKills())); std::wstring craft; if (_soldier->getCraft() == 0) { craft = tr("STR_NONE_UC"); } else { craft = _soldier->getCraft()->getName(_game->getLanguage()); } _txtCraft->setText(tr("STR_CRAFT_").arg(craft)); if (_soldier->getWoundRecovery() > 0) { _txtRecovery->setText(tr("STR_WOUND_RECOVERY").arg(tr("STR_DAY", _soldier->getWoundRecovery()))); } else { _txtRecovery->setText(L""); } _txtPsionic->setVisible(_soldier->isInPsiTraining()); if (current->psiSkill > 0 || (Options::psiStrengthEval && _game->getSavedGame()->isResearched(_game->getRuleset()->getPsiRequirements()))) { std::wstringstream ss14; ss14 << withArmor.psiStrength; _numPsiStrength->setText(ss14.str()); _barPsiStrength->setMax(current->psiStrength); _barPsiStrength->setValue(withArmor.psiStrength); _barPsiStrength->setValue2(std::min(withArmor.psiStrength, initial->psiStrength)); _txtPsiStrength->setVisible(true); _numPsiStrength->setVisible(true); _barPsiStrength->setVisible(true); } else { _txtPsiStrength->setVisible(false); _numPsiStrength->setVisible(false); _barPsiStrength->setVisible(false); } if (current->psiSkill > 0) { std::wstringstream ss15; ss15 << withArmor.psiSkill; _numPsiSkill->setText(ss15.str()); _barPsiSkill->setMax(current->psiSkill); _barPsiSkill->setValue(withArmor.psiSkill); _barPsiSkill->setValue2(std::min(withArmor.psiSkill, initial->psiSkill)); _txtPsiSkill->setVisible(true); _numPsiSkill->setVisible(true); _barPsiSkill->setVisible(true); } else { _txtPsiSkill->setVisible(false); _numPsiSkill->setVisible(false); _barPsiSkill->setVisible(false); } // Dead can't talk if (_base == 0) { _btnArmor->setVisible(false); _btnSack->setVisible(false); _txtCraft->setVisible(false); } else { _btnSack->setVisible(_game->getSavedGame()->getMonthsPassed() > -1); } }
ArticleStateBaseFacility::ArticleStateBaseFacility(ArticleDefinitionBaseFacility *defs) : ArticleState(defs->id) { RuleBaseFacility *facility = _game->getRuleset()->getBaseFacility(defs->id); // add screen elements _txtTitle = new Text(200, 17, 10, 24); // Set palette setPalette("PAL_BASESCAPE"); ArticleState::initLayout(); // add other elements add(_txtTitle); // Set up objects _game->getResourcePack()->getSurface("BACK09.SCR")->blit(_bg); _btnOk->setColor(Palette::blockOffset(4)); _btnPrev->setColor(Palette::blockOffset(4)); _btnNext->setColor(Palette::blockOffset(4)); _txtTitle->setColor(Palette::blockOffset(13)+10); _txtTitle->setBig(); _txtTitle->setText(tr(defs->title)); // build preview image int tile_size = 32; _image = new Surface(tile_size*2, tile_size*2, 232, 16); add(_image); SurfaceSet *graphic = _game->getResourcePack()->getSurfaceSet("BASEBITS.PCK"); Surface *frame; int x_offset, y_offset; int x_pos, y_pos; int num; if (facility->getSize()==1) { x_offset = y_offset = tile_size/2; } else { x_offset = y_offset = 0; } num = 0; y_pos = y_offset; for (int y = 0; y < facility->getSize(); ++y) { x_pos = x_offset; for (int x = 0; x < facility->getSize(); ++x) { frame = graphic->getFrame(facility->getSpriteShape() + num); frame->setX(x_pos); frame->setY(y_pos); frame->blit(_image); if (facility->getSize()==1) { frame = graphic->getFrame(facility->getSpriteFacility() + num); frame->setX(x_pos); frame->setY(y_pos); frame->blit(_image); } x_pos += tile_size; num++; } y_pos += tile_size; } _txtInfo = new Text(300, 90, 10, 104); add(_txtInfo); _txtInfo->setColor(Palette::blockOffset(13)+10); _txtInfo->setWordWrap(true); _txtInfo->setText(tr(defs->text)); _lstInfo = new TextList(200, 42, 10, 42); add(_lstInfo); _lstInfo->setColor(Palette::blockOffset(13)+10); _lstInfo->setColumns(2, 140, 60); _lstInfo->setDot(true); _lstInfo->addRow(2, tr("STR_CONSTRUCTION_TIME").c_str(), tr("STR_DAY", facility->getBuildTime()).c_str()); _lstInfo->setCellColor(0, 1, Palette::blockOffset(13)+0); std::wostringstream ss; ss << Text::formatFunding(facility->getBuildCost()); _lstInfo->addRow(2, tr("STR_CONSTRUCTION_COST").c_str(), ss.str().c_str()); _lstInfo->setCellColor(1, 1, Palette::blockOffset(13)+0); ss.str(L"");ss.clear(); ss << Text::formatFunding(facility->getMonthlyCost()); _lstInfo->addRow(2, tr("STR_MAINTENANCE_COST").c_str(), ss.str().c_str()); _lstInfo->setCellColor(2, 1, Palette::blockOffset(13)+0); if (facility->getDefenseValue() > 0) { ss.str(L"");ss.clear(); ss << facility->getDefenseValue(); _lstInfo->addRow(2, tr("STR_DEFENSE_VALUE").c_str(), ss.str().c_str()); _lstInfo->setCellColor(3, 1, Palette::blockOffset(13)+0); ss.str(L"");ss.clear(); ss << Text::formatPercentage(facility->getHitRatio()); _lstInfo->addRow(2, tr("STR_HIT_RATIO").c_str(), ss.str().c_str()); _lstInfo->setCellColor(4, 1, Palette::blockOffset(13)+0); } centerAllSurfaces(); }
/** * The craft info can change * after going into other screens. */ void CraftInfoState::init() { // Set palette _game->setPalette(_game->getResourcePack()->getPalette("BACKPALS.DAT")->getColors(Palette::blockOffset(3)), Palette::backPos, 16); Craft *c = _base->getCrafts()->at(_craft); _edtCraft->setText(c->getName(_game->getLanguage())); SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BASEBITS.PCK"); texture->getFrame(c->getRules()->getSprite() + 33)->setX(0); texture->getFrame(c->getRules()->getSprite() + 33)->setY(0); texture->getFrame(c->getRules()->getSprite() + 33)->blit(_sprite); std::wstringstream ss; ss << _game->getLanguage()->getString("STR_DAMAGE_UC_") << L'\x01' << c->getDamagePercentage() << "%"; _txtDamage->setText(ss.str()); std::wstringstream ss2; ss2 << _game->getLanguage()->getString("STR_FUEL") << L'\x01' << c->getFuelPercentage() << "%"; _txtFuel->setText(ss2.str()); if (c->getRules()->getSoldiers() > 0) { _crew->clear(); _equip->clear(); Surface *frame1 = texture->getFrame(38); frame1->setY(0); for (int i = 0, x = 0; i < c->getNumSoldiers(); ++i, x += 10) { frame1->setX(x); frame1->blit(_crew); } Surface *frame2 = texture->getFrame(39); frame2->setY(0); int x = 0; for (int i = 0; i < c->getNumEquipment(); i += 4, x += 10) { frame2->setX(x); frame2->blit(_equip); } Surface *frame3 = texture->getFrame(40); for (int i = 0; i < c->getNumVehicles(); ++i, x += 10) { frame3->setX(x); frame3->blit(_equip); } } else { _crew->setVisible(false); _equip->setVisible(false); _btnCrew->setVisible(false); _btnEquip->setVisible(false); _btnArmor->setVisible(false); } if (c->getRules()->getWeapons() > 0) { CraftWeapon *w1 = c->getWeapons()->at(0); if (w1 != 0) { Surface *frame = texture->getFrame(w1->getRules()->getSprite() + 48); frame->setX(0); frame->setY(0); frame->blit(_weapon1); _txtW1Name->setText(_game->getLanguage()->getString(w1->getRules()->getType())); std::wstringstream ss3; ss3 << _game->getLanguage()->getString("STR_AMMO_") << L'\x01' << w1->getAmmo(); _txtW1Ammo->setText(ss3.str()); std::wstringstream ss4; ss4 << _game->getLanguage()->getString("STR_MAX") << L'\x01' << w1->getRules()->getAmmoMax(); _txtW1Max->setText(ss4.str()); } else { _weapon1->clear(); _txtW1Name->setText(L""); _txtW1Ammo->setText(L""); _txtW1Max->setText(L""); } } else { _weapon1->setVisible(false); _btnW1->setVisible(false); _txtW1Name->setVisible(false); _txtW1Ammo->setVisible(false); _txtW1Max->setVisible(false); } if (c->getRules()->getWeapons() > 1) { CraftWeapon *w2 = c->getWeapons()->at(1); if (w2 != 0) { Surface *frame = texture->getFrame(w2->getRules()->getSprite() + 48); frame->setX(0); frame->setY(0); frame->blit(_weapon2); _txtW2Name->setText(_game->getLanguage()->getString(w2->getRules()->getType())); std::wstringstream ss5; ss5 << _game->getLanguage()->getString("STR_AMMO_") << L'\x01' << w2->getAmmo(); _txtW2Ammo->setText(ss5.str()); std::wstringstream ss6; ss6 << _game->getLanguage()->getString("STR_MAX") << L'\x01' << w2->getRules()->getAmmoMax(); _txtW2Max->setText(ss6.str()); } else { _weapon2->clear(); _txtW2Name->setText(L""); _txtW2Ammo->setText(L""); _txtW2Max->setText(L""); } } else { _weapon2->setVisible(false); _btnW2->setVisible(false); _txtW2Name->setVisible(false); _txtW2Ammo->setVisible(false); _txtW2Max->setVisible(false); } }
/** * The craft info can change * after going into other screens. */ void CraftInfoState::init() { // Set palette _game->setPalette(_game->getResourcePack()->getPalette("BACKPALS.DAT")->getColors(Palette::blockOffset(3)), Palette::backPos, 16); Craft *c = _base->getCrafts()->at(_craft); _edtCraft->setText(c->getName(_game->getLanguage())); SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BASEBITS.PCK"); texture->getFrame(c->getRules()->getSprite() + 33)->setX(0); texture->getFrame(c->getRules()->getSprite() + 33)->setY(0); texture->getFrame(c->getRules()->getSprite() + 33)->blit(_sprite); std::wstringstream ss; ss << tr("STR_DAMAGE_UC_").arg(Text::formatPercentage(c->getDamagePercentage())); if (c->getStatus() == "STR_REPAIRS") { int damageDays = (int)ceil((float)c->getDamage() / c->getRules()->getRepairRate() / 24.0f); ss << L"\n(" << tr("STR_DAY", damageDays) << ")"; } _txtDamage->setText(ss.str()); std::wstringstream ss2; ss2 << tr("STR_FUEL").arg(Text::formatPercentage(c->getFuelPercentage())); if (c->getStatus() == "STR_REFUELLING") { int fuelDays = (int) ceil((float)(c->getRules()->getMaxFuel() - c->getFuel()) / c->getRules()->getRefuelRate() / 48.0f); ss2 << L"\n(" << tr("STR_DAY", fuelDays) << ")"; } _txtFuel->setText(ss2.str()); if (c->getRules()->getSoldiers() > 0) { _crew->clear(); _equip->clear(); Surface *frame1 = texture->getFrame(38); frame1->setY(0); for (int i = 0, x = 0; i < c->getNumSoldiers(); ++i, x += 10) { frame1->setX(x); frame1->blit(_crew); } Surface *frame2 = texture->getFrame(40); frame2->setY(0); int x = 0; for (int i = 0; i < c->getNumVehicles(); ++i, x += 10) { frame2->setX(x); frame2->blit(_equip); } Surface *frame3 = texture->getFrame(39); for (int i = 0; i < c->getNumEquipment(); i += 4, x += 10) { frame3->setX(x); frame3->blit(_equip); } } else { _crew->setVisible(false); _equip->setVisible(false); _btnCrew->setVisible(false); _btnEquip->setVisible(false); _btnArmor->setVisible(false); } if (c->getRules()->getWeapons() > 0) { CraftWeapon *w1 = c->getWeapons()->at(0); if (w1 != 0) { Surface *frame = texture->getFrame(w1->getRules()->getSprite() + 48); frame->setX(0); frame->setY(0); frame->blit(_weapon1); _txtW1Name->setText(tr(w1->getRules()->getType())); _txtW1Ammo->setText(tr("STR_AMMO_").arg(w1->getAmmo())); _txtW1Max->setText(tr("STR_MAX").arg(w1->getRules()->getAmmoMax())); } else { _weapon1->clear(); _txtW1Name->setText(L""); _txtW1Ammo->setText(L""); _txtW1Max->setText(L""); } } else { _weapon1->setVisible(false); _btnW1->setVisible(false); _txtW1Name->setVisible(false); _txtW1Ammo->setVisible(false); _txtW1Max->setVisible(false); } if (c->getRules()->getWeapons() > 1) { CraftWeapon *w2 = c->getWeapons()->at(1); if (w2 != 0) { Surface *frame = texture->getFrame(w2->getRules()->getSprite() + 48); frame->setX(0); frame->setY(0); frame->blit(_weapon2); _txtW2Name->setText(tr(w2->getRules()->getType())); _txtW2Ammo->setText(tr("STR_AMMO_").arg(w2->getAmmo())); _txtW2Max->setText(tr("STR_MAX").arg(w2->getRules()->getAmmoMax())); } else { _weapon2->clear(); _txtW2Name->setText(L""); _txtW2Ammo->setText(L""); _txtW2Max->setText(L""); } } else { _weapon2->setVisible(false); _btnW2->setVisible(false); _txtW2Name->setVisible(false); _txtW2Ammo->setVisible(false); _txtW2Max->setVisible(false); } }
/** * The craft info can change * after going into other screens. */ void CraftInfoState::init() { State::init(); _craft = _base->getCrafts()->at(_craftId); _edtCraft->setText(_craft->getName(_game->getLanguage())); SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BASEBITS.PCK"); texture->getFrame(_craft->getRules()->getSprite() + 33)->setX(0); texture->getFrame(_craft->getRules()->getSprite() + 33)->setY(0); texture->getFrame(_craft->getRules()->getSprite() + 33)->blit(_sprite); std::wostringstream ss; ss << tr("STR_DAMAGE_UC_").arg(Text::formatPercentage(_craft->getDamagePercentage())); if (_craft->getStatus() == "STR_REPAIRS" && _craft->getDamage() > 0) { int damageHours = (int)ceil((double)_craft->getDamage() / _craft->getRules()->getRepairRate()); ss << formatTime(damageHours); } _txtDamage->setText(ss.str()); std::wostringstream ss2; ss2 << tr("STR_FUEL").arg(Text::formatPercentage(_craft->getFuelPercentage())); if (_craft->getStatus() == "STR_REFUELLING" && _craft->getRules()->getMaxFuel() - _craft->getFuel() > 0) { int fuelHours = (int)ceil((double)(_craft->getRules()->getMaxFuel() - _craft->getFuel()) / _craft->getRules()->getRefuelRate() / 2.0); ss2 << formatTime(fuelHours); } _txtFuel->setText(ss2.str()); if (_craft->getRules()->getSoldiers() > 0) { _crew->clear(); _equip->clear(); Surface *frame1 = texture->getFrame(38); frame1->setY(0); for (int i = 0, x = 0; i < _craft->getNumSoldiers(); ++i, x += 10) { frame1->setX(x); frame1->blit(_crew); } Surface *frame2 = texture->getFrame(40); frame2->setY(0); int x = 0; for (int i = 0; i < _craft->getNumVehicles(); ++i, x += 10) { frame2->setX(x); frame2->blit(_equip); } Surface *frame3 = texture->getFrame(39); for (int i = 0; i < _craft->getNumEquipment(); i += 4, x += 10) { frame3->setX(x); frame3->blit(_equip); } } else { _crew->setVisible(false); _equip->setVisible(false); _btnCrew->setVisible(false); _btnEquip->setVisible(false); _btnArmor->setVisible(false); } if (_craft->getRules()->getWeapons() > 0) { CraftWeapon *w1 = _craft->getWeapons()->at(0); if (w1 != 0) { Surface *frame = texture->getFrame(w1->getRules()->getSprite() + 48); frame->setX(0); frame->setY(0); frame->blit(_weapon1); std::wostringstream ss; ss << L'\x01' << tr(w1->getRules()->getType()); _txtW1Name->setText(ss.str()); ss.str(L""); ss << tr("STR_AMMO_").arg(w1->getAmmo()) << L"\n\x01"; ss << tr("STR_MAX").arg(w1->getRules()->getAmmoMax()); if (_craft->getStatus() == "STR_REARMING" && w1->getAmmo() < w1->getRules()->getAmmoMax()) { int rearmHours = (int)ceil((double)(w1->getRules()->getAmmoMax() - w1->getAmmo()) / w1->getRules()->getRearmRate()); ss << formatTime(rearmHours); } _txtW1Ammo->setText(ss.str()); } else { _weapon1->clear(); _txtW1Name->setText(L""); _txtW1Ammo->setText(L""); } } else { _weapon1->setVisible(false); _btnW1->setVisible(false); _txtW1Name->setVisible(false); _txtW1Ammo->setVisible(false); } if (_craft->getRules()->getWeapons() > 1) { CraftWeapon *w2 = _craft->getWeapons()->at(1); if (w2 != 0) { Surface *frame = texture->getFrame(w2->getRules()->getSprite() + 48); frame->setX(0); frame->setY(0); frame->blit(_weapon2); std::wostringstream ss; ss << L'\x01' << tr(w2->getRules()->getType()); _txtW2Name->setText(ss.str()); ss.str(L""); ss << tr("STR_AMMO_").arg(w2->getAmmo()) << L"\n\x01"; ss << tr("STR_MAX").arg(w2->getRules()->getAmmoMax()); if (_craft->getStatus() == "STR_REARMING" && w2->getAmmo() < w2->getRules()->getAmmoMax()) { int rearmHours = (int)ceil((double)(w2->getRules()->getAmmoMax() - w2->getAmmo()) / w2->getRules()->getRearmRate()); ss << formatTime(rearmHours); } _txtW2Ammo->setText(ss.str()); } else { _weapon2->clear(); _txtW2Name->setText(L""); _txtW2Ammo->setText(L""); } } else { _weapon2->setVisible(false); _btnW2->setVisible(false); _txtW2Name->setVisible(false); _txtW2Ammo->setVisible(false); } _defaultName = tr("STR_CRAFTNAME").arg(tr(_craft->getRules()->getType())).arg(_craft->getId()); }