RenderTarget InventoryScreenState::GetRenderTarget() const { assert(mPlayer.IsValid()); static const int kWindowWidth = ScreenConstants::EViewPortWidth; static const int kWindowHeight = ScreenConstants::EViewPortHeight; static const int kWindowMargin = 2; static const int kCellLeftOffset = 2; static const int kCellWidth = (ScreenConstants::EViewPortWidth - (2 * (kWindowMargin + kCellLeftOffset)) - 2) / 2; static const int kCellHeight = 2; static const int kVerticalSpacingBetweenCells = 1; static const Fragment kCursor((char) 26, ETextWhite); auto armedItem0 = mGameData->mPlayerData.GetItemInSlot( Player::EItemSlot_Slot0 ); auto armedItem1 = mGameData->mPlayerData.GetItemInSlot( Player::EItemSlot_Slot1 ); auto& items = mGameData->mPlayerData.mInventory.GetAllItems(); auto renderItemCell = [&] (ItemBase* inItem) { RenderTarget target(kCellWidth, kCellHeight); std::string itemName = inItem->GetName(); itemName += (inItem == armedItem0) ? " (Spc)" : ""; itemName += (inItem == armedItem1) ? " (E)" : ""; target.Write(itemName, ETextWhite, 0, 0); target.Write(inItem->GetHUDIcon(), 0, 1); return target; }; RenderTarget window = BorderedFrame(kWindowWidth, kWindowHeight).Render(); window.Write( " Inventory ", 3, 0 ); for (size_t i = 0; i < items.size(); ++i) { RenderTarget renderedCell = renderItemCell( items[i] ); int col = ((i % 2) == 0) ? (kWindowMargin + kCellLeftOffset) : (kWindowWidth - kWindowMargin - kCellWidth); int row = kWindowMargin + ((i / 2) * (kCellHeight + kVerticalSpacingBetweenCells)); window.Write(renderedCell, col, row); if ((int) i == mHighlightedItem) { window.Write(kCursor, col - kCellLeftOffset, row); } } return window; }