void InventoryState::btnCreateTemplateClick(Action *) { // don't accept clicks when moving items if (_inv->getSelectedItem() != 0) { return; } // clear current template _clearInventoryTemplate(_curInventoryTemplate); // copy inventory instead of just keeping a pointer to it. that way // create/apply can be used as an undo button for a single unit and will // also work as expected if inventory is modified after 'create' is clicked std::vector<BattleItem*> *unitInv = _battleGame->getSelectedUnit()->getInventory(); for (std::vector<BattleItem*>::iterator j = unitInv->begin(); j != unitInv->end(); ++j) { if ((*j)->getRules()->isFixed()) { // don't copy fixed weapons into the template continue; } std::string ammo; if ((*j)->needsAmmo() && (*j)->getAmmoItem()) { ammo = (*j)->getAmmoItem()->getRules()->getType(); } else { ammo = "NONE"; } _curInventoryTemplate.push_back(new EquipmentLayoutItem( (*j)->getRules()->getType(), (*j)->getSlot()->getId(), (*j)->getSlotX(), (*j)->getSlotY(), ammo, (*j)->getFuseTimer())); } // give audio feedback _game->getMod()->getSoundByDepth(_battleGame->getDepth(), Mod::ITEM_DROP)->play(); _refreshMouse(); }
InventoryState::~InventoryState() { _clearInventoryTemplate(_curInventoryTemplate); if (_battleGame->getTileEngine()) { if (Options::maximizeInfoScreens) { Screen::updateScale(Options::battlescapeScale, Options::battlescapeScale, Options::baseXBattlescape, Options::baseYBattlescape, true); _game->getScreen()->resetDisplay(false); } Tile *inventoryTile = _battleGame->getSelectedUnit()->getTile(); _battleGame->getTileEngine()->applyGravity(inventoryTile); _battleGame->getTileEngine()->calculateTerrainLighting(); // dropping/picking up flares _battleGame->getTileEngine()->recalculateFOV(); } else { Screen::updateScale(Options::geoscapeScale, Options::geoscapeScale, Options::baseXGeoscape, Options::baseYGeoscape, true); _game->getScreen()->resetDisplay(false); } }