/** * Updates item info. * @param action Pointer to an action. */ void InventoryState::invClick(Action *action) { BattleItem *item = _inv->getSelectedItem(); _txtItem->setText(L""); _txtAmmo->setText(L""); _selAmmo->clear(); if (item != 0) { if (item->getUnit() && item->getUnit()->getStatus() == STATUS_UNCONSCIOUS) { _txtItem->setText(item->getUnit()->getName(_game->getLanguage())); } else { if (_game->getSavedGame()->isResearched(item->getRules()->getRequirements())) { _txtItem->setText(_game->getLanguage()->getString(item->getRules()->getName())); } else { _txtItem->setText(_game->getLanguage()->getString("STR_ALIEN_ARTIFACT")); } } std::wstringstream ss; if (item->getAmmoItem() != 0 && item->needsAmmo()) { ss << _game->getLanguage()->getString("STR_AMMO_ROUNDS_LEFT") << L'\x01' << item->getAmmoItem()->getAmmoQuantity(); SDL_Rect r; r.x = 0; r.y = 0; r.w = RuleInventory::HAND_W * RuleInventory::SLOT_W; r.h = RuleInventory::HAND_H * RuleInventory::SLOT_H; _selAmmo->drawRect(&r, Palette::blockOffset(0)+8); r.x++; r.y++; r.w -= 2; r.h -= 2; _selAmmo->drawRect(&r, 0); item->getAmmoItem()->getRules()->drawHandSprite(_game->getResourcePack()->getSurfaceSet("BIGOBS.PCK"), _selAmmo); } else if (item->getAmmoQuantity() != 0 && item->needsAmmo()) { ss << _game->getLanguage()->getString("STR_AMMO_ROUNDS_LEFT") << L'\x01' << item->getAmmoQuantity(); } _txtAmmo->setText(ss.str()); } if (_tu) { std::wstringstream ss; ss << _game->getLanguage()->getString("STR_TUS") << L'\x01' << _battleGame->getSelectedUnit()->getTimeUnits(); _txtTus->setText(ss.str()); } }
/** * Updates item info. * @param action Pointer to an action. */ void InventoryState::invClick(Action *) { BattleItem *item = _inv->getSelectedItem(); _txtItem->setText(L""); _txtAmmo->setText(L""); _selAmmo->clear(); if (item != 0) { if (item->getUnit() && item->getUnit()->getStatus() == STATUS_UNCONSCIOUS) { _txtItem->setText(item->getUnit()->getName(_game->getLanguage())); } else { if (_game->getSavedGame()->isResearched(item->getRules()->getRequirements())) { _txtItem->setText(tr(item->getRules()->getName())); } else { _txtItem->setText(tr("STR_ALIEN_ARTIFACT")); } } std::wstring s; if (item->getAmmoItem() != 0 && item->needsAmmo()) { s = tr("STR_AMMO_ROUNDS_LEFT").arg(item->getAmmoItem()->getAmmoQuantity()); SDL_Rect r; r.x = 0; r.y = 0; r.w = RuleInventory::HAND_W * RuleInventory::SLOT_W; r.h = RuleInventory::HAND_H * RuleInventory::SLOT_H; _selAmmo->drawRect(&r, Palette::blockOffset(0)+8); r.x++; r.y++; r.w -= 2; r.h -= 2; _selAmmo->drawRect(&r, 0); item->getAmmoItem()->getRules()->drawHandSprite(_game->getResourcePack()->getSurfaceSet("BIGOBS.PCK"), _selAmmo); } else if (item->getAmmoQuantity() != 0 && item->needsAmmo()) { s = tr("STR_AMMO_ROUNDS_LEFT").arg(item->getAmmoQuantity()); } else if (item->getRules()->getBattleType() == BT_MEDIKIT) { s = tr("STR_MEDI_KIT_QUANTITIES_LEFT").arg(item->getPainKillerQuantity()).arg(item->getStimulantQuantity()).arg(item->getHealQuantity()); } _txtAmmo->setText(s); } updateStats(); }
/** * Shows item info. * @param action Pointer to an action. */ void InventoryState::invMouseOver(Action *) { if (_inv->getSelectedItem() != 0) { return; } BattleItem *item = _inv->getMouseOverItem(); if (item != 0) { if (item->getUnit() && item->getUnit()->getStatus() == STATUS_UNCONSCIOUS) { _txtItem->setText(item->getUnit()->getName(_game->getLanguage())); } else { if (_game->getSavedGame()->isResearched(item->getRules()->getRequirements())) { _txtItem->setText(tr(item->getRules()->getName())); } else { _txtItem->setText(tr("STR_ALIEN_ARTIFACT")); } } std::wstring s; if (item->getAmmoItem() != 0 && item->needsAmmo()) { s = tr("STR_AMMO_ROUNDS_LEFT").arg(item->getAmmoItem()->getAmmoQuantity()); SDL_Rect r; r.x = 0; r.y = 0; r.w = RuleInventory::HAND_W * RuleInventory::SLOT_W; r.h = RuleInventory::HAND_H * RuleInventory::SLOT_H; _selAmmo->drawRect(&r, _game->getMod()->getInterface("inventory")->getElement("grid")->color); r.x++; r.y++; r.w -= 2; r.h -= 2; _selAmmo->drawRect(&r, Palette::blockOffset(0)+15); item->getAmmoItem()->getRules()->drawHandSprite(_game->getMod()->getSurfaceSet("BIGOBS.PCK"), _selAmmo); _updateTemplateButtons(false); } else { _selAmmo->clear(); _updateTemplateButtons(!_tu); } if (item->getAmmoQuantity() != 0 && item->needsAmmo()) { s = tr("STR_AMMO_ROUNDS_LEFT").arg(item->getAmmoQuantity()); } else if (item->getRules()->getBattleType() == BT_MEDIKIT) { s = tr("STR_MEDI_KIT_QUANTITIES_LEFT").arg(item->getPainKillerQuantity()).arg(item->getStimulantQuantity()).arg(item->getHealQuantity()); } _txtAmmo->setText(s); } else { if (_currentTooltip.empty()) { _txtItem->setText(L""); } _txtAmmo->setText(L""); _selAmmo->clear(); _updateTemplateButtons(!_tu); } }
/** * 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++; } }