* Draws the items contained in the soldier's inventory. */
| 204 | * Draws the items contained in the soldier's inventory. |
| 205 | */ |
| 206 | void Inventory::drawItems() |
| 207 | { |
| 208 | _items->clear(); |
| 209 | if (_selUnit != 0) |
| 210 | { |
| 211 | SurfaceSet *texture = _game->getResourcePack()->getSurfaceSet("BIGOBS.PCK"); |
| 212 | // Soldier items |
| 213 | for (std::vector<BattleItem*>::iterator i = _selUnit->getInventory()->begin(); i != _selUnit->getInventory()->end(); ++i) |
| 214 | { |
| 215 | if ((*i) == _selItem) |
| 216 | continue; |
| 217 | |
| 218 | Surface *frame = texture->getFrame((*i)->getRules()->getBigSprite()); |
| 219 | if ((*i)->getSlot()->getType() == INV_SLOT) |
| 220 | { |
| 221 | frame->setX((*i)->getSlot()->getX() + (*i)->getSlotX() * RuleInventory::SLOT_W); |
| 222 | frame->setY((*i)->getSlot()->getY() + (*i)->getSlotY() * RuleInventory::SLOT_H); |
| 223 | } |
| 224 | else if ((*i)->getSlot()->getType() == INV_HAND) |
| 225 | { |
| 226 | frame->setX((*i)->getSlot()->getX() + (RuleInventory::HAND_W - (*i)->getRules()->getInventoryWidth()) * RuleInventory::SLOT_W/2); |
| 227 | frame->setY((*i)->getSlot()->getY() + (RuleInventory::HAND_H - (*i)->getRules()->getInventoryHeight()) * RuleInventory::SLOT_H/2); |
| 228 | } |
| 229 | texture->getFrame((*i)->getRules()->getBigSprite())->blit(_items); |
| 230 | } |
| 231 | Surface *stackLayer = new Surface(getWidth(), getHeight(), 0, 0); |
| 232 | stackLayer->setPalette(getPalette()); |
| 233 | // Ground items |
| 234 | for (std::vector<BattleItem*>::iterator i = _selUnit->getTile()->getInventory()->begin(); i != _selUnit->getTile()->getInventory()->end(); ++i) |
| 235 | { |
| 236 | // note that you can make items invisible by setting their width or height to 0 (for example used with tank corpse items) |
| 237 | if ((*i) == _selItem || (*i)->getSlotX() < _groundOffset || (*i)->getRules()->getInventoryHeight() == 0 || (*i)->getRules()->getInventoryWidth() == 0) |
| 238 | continue; |
| 239 | Surface *frame = texture->getFrame((*i)->getRules()->getBigSprite()); |
| 240 | frame->setX((*i)->getSlot()->getX() + ((*i)->getSlotX() - _groundOffset) * RuleInventory::SLOT_W); |
| 241 | frame->setY((*i)->getSlot()->getY() + (*i)->getSlotY() * RuleInventory::SLOT_H); |
| 242 | texture->getFrame((*i)->getRules()->getBigSprite())->blit(_items); |
| 243 | if (_stackLevel[(*i)->getSlotX()][(*i)->getSlotY()] > 1) |
| 244 | { |
| 245 | _stackNumber->setX(((*i)->getSlot()->getX() + (((*i)->getSlotX() + (*i)->getRules()->getInventoryWidth()) - _groundOffset) * RuleInventory::SLOT_W)-3); |
| 246 | if (_stackLevel[(*i)->getSlotX()][(*i)->getSlotY()] > 9) |
| 247 | { |
| 248 | _stackNumber->setX(_stackNumber->getX()-4); |
| 249 | } |
| 250 | _stackNumber->setY(((*i)->getSlot()->getY() + ((*i)->getSlotY() + (*i)->getRules()->getInventoryHeight()) * RuleInventory::SLOT_H)-5); |
| 251 | _stackNumber->setValue(_stackLevel[(*i)->getSlotX()][(*i)->getSlotY()]); |
| 252 | _stackNumber->draw(); |
| 253 | _stackNumber->setColor(Palette::blockOffset(4)+2); |
| 254 | _stackNumber->blit(stackLayer); |
| 255 | } |
| 256 | } |
| 257 | |
| 258 | // give it a border |
| 259 | // this is the "darker" shade that goes in the corners. |
| 260 | for (int x = -1; x <= 1; x += 2) |
| 261 | { |
| 262 | for (int y = -1; y <= 1; y += 2) |
| 263 | { |
nothing calls this directly
no test coverage detected