MCPcopy Create free account
hub / github.com/OpenXcom/OpenXcom / drawItems

Method drawItems

src/Battlescape/Inventory.cpp:206–277  ·  view source on GitHub ↗

* Draws the items contained in the soldier's inventory. */

Source from the content-addressed store, hash-verified

204 * Draws the items contained in the soldier's inventory.
205 */
206void 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 {

Callers

nothing calls this directly

Calls 15

getSurfaceSetMethod · 0.80
getFrameMethod · 0.80
getBigSpriteMethod · 0.80
getInventoryWidthMethod · 0.80
getInventoryHeightMethod · 0.80
blitNShadeMethod · 0.80
clearMethod · 0.45
getResourcePackMethod · 0.45
getInventoryMethod · 0.45
getRulesMethod · 0.45
getTypeMethod · 0.45
getSlotMethod · 0.45

Tested by

no test coverage detected