* Unloads the selected weapon, placing the gun * on the right hand and the ammo on the left hand. * @return The success of the weapon being unlaoded. */
| 747 | * @return The success of the weapon being unlaoded. |
| 748 | */ |
| 749 | bool Inventory::unload() |
| 750 | { |
| 751 | // Must be holding an item |
| 752 | if (_selItem == 0) |
| 753 | { |
| 754 | return false; |
| 755 | } |
| 756 | |
| 757 | // Item must be loaded |
| 758 | if (_selItem->getAmmoItem() == 0 && !_selItem->getRules()->getCompatibleAmmo()->empty()) |
| 759 | { |
| 760 | _warning->showMessage(_game->getLanguage()->getString("STR_NO_AMMUNITION_LOADED")); |
| 761 | } |
| 762 | if (_selItem->getAmmoItem() == 0 || !_selItem->needsAmmo()) |
| 763 | { |
| 764 | return false; |
| 765 | } |
| 766 | |
| 767 | // Hands must be free |
| 768 | for (std::vector<BattleItem*>::iterator i = _selUnit->getInventory()->begin(); i != _selUnit->getInventory()->end(); ++i) |
| 769 | { |
| 770 | if ((*i)->getSlot()->getType() == INV_HAND && (*i) != _selItem) |
| 771 | { |
| 772 | _warning->showMessage(_game->getLanguage()->getString("STR_BOTH_HANDS_MUST_BE_EMPTY")); |
| 773 | return false; |
| 774 | } |
| 775 | } |
| 776 | |
| 777 | if (!_tu || _selUnit->spendTimeUnits(8)) |
| 778 | { |
| 779 | moveItem(_selItem->getAmmoItem(), _game->getRuleset()->getInventory("STR_LEFT_HAND"), 0, 0); |
| 780 | _selItem->getAmmoItem()->moveToOwner(_selUnit); |
| 781 | moveItem(_selItem, _game->getRuleset()->getInventory("STR_RIGHT_HAND"), 0, 0); |
| 782 | _selItem->moveToOwner(_selUnit); |
| 783 | _selItem->setAmmoItem(0); |
| 784 | setSelectedItem(0); |
| 785 | } |
| 786 | else |
| 787 | { |
| 788 | _warning->showMessage(_game->getLanguage()->getString("STR_NOT_ENOUGH_TIME_UNITS")); |
| 789 | return false; |
| 790 | } |
| 791 | |
| 792 | return true; |
| 793 | } |
| 794 | |
| 795 | /** |
| 796 | * Arranges items on the ground for the inventory display. |
no test coverage detected