Browse Source

Rewrote two identical code snippets in inv.cpp into one function. (#1528)

pull/1540/head
FluffyQuack 5 years ago committed by GitHub
parent
commit
7c5646a475
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 63
      Source/inv.cpp

63
Source/inv.cpp

@ -584,6 +584,28 @@ void DrawInvBelt(CelOutputBuffer out)
}
}
/**
* @brief Adds an item to a player's InvGrid array
* @param playerNumber Player index
* @param invGridIndex Item's position in InvGrid (this should be the item's topleft grid tile)
* @param invListIndex The item's InvList index (it's expected this already has +1 added to it since InvGrid can't store a 0 index)
* @param sizeX Horizontal size of item
* @param sizeY Vertical size of item
*/
static void AddItemToInvGrid(int playerNumber, int invGridIndex, int invListIndex, int sizeX, int sizeY)
{
const int pitch = 10;
for (int y = 0; y < sizeY; y++) {
for (int x = 0; x < sizeX; x++) {
if (x == 0 & y == sizeY - 1)
plr[playerNumber].InvGrid[invGridIndex + x] = invListIndex;
else
plr[playerNumber].InvGrid[invGridIndex + x] = -invListIndex;
}
invGridIndex += pitch;
}
}
/**
* @brief Gets the size, in inventory cells, of the given item.
* @param item The item whose size is to be determined.
@ -969,25 +991,8 @@ bool AutoPlaceItemInInventorySlot(int playerNumber, int slotIndex, const ItemStr
if (done && persistItem) {
plr[playerNumber].InvList[plr[playerNumber]._pNumInv] = plr[playerNumber].HoldItem;
plr[playerNumber]._pNumInv++;
yy = 10 * (slotIndex / 10);
if (yy < 0) {
yy = 0;
}
for (j = 0; j < itemSize.Y; j++) {
xx = slotIndex % 10;
if (xx < 0) {
xx = 0;
}
for (i = 0; i < itemSize.X; i++) {
if (i != 0 || j != itemSize.Y - 1) {
plr[playerNumber].InvGrid[xx + yy] = -plr[playerNumber]._pNumInv;
} else {
plr[playerNumber].InvGrid[xx + yy] = plr[playerNumber]._pNumInv;
}
xx++;
}
yy += 10;
}
AddItemToInvGrid(playerNumber, slotIndex, plr[playerNumber]._pNumInv, itemSize.X, itemSize.Y);
CalcPlrScrolls(playerNumber);
}
return done;
@ -1424,22 +1429,16 @@ void CheckInvPaste(int pnum, int mx, int my)
}
}
ii = r - SLOTXY_INV_FIRST;
// Calculate top-left position of item for InvGrid and then add item to InvGrid
yy = 10 * (ii / 10 - ((sy - 1) >> 1));
xx = (ii % 10 - ((sx - 1) >> 1));
if (yy < 0)
yy = 0;
for (j = 0; j < sy; j++) {
xx = (ii % 10 - ((sx - 1) >> 1));
if (xx < 0)
xx = 0;
for (i = 0; i < sx; i++) {
if (i != 0 || j != sy - 1)
plr[pnum].InvGrid[xx + yy] = -it;
else
plr[pnum].InvGrid[xx + yy] = it;
xx++;
}
yy += 10;
}
if (xx < 0)
xx = 0;
AddItemToInvGrid(pnum, xx + yy, it, sx, sy);
}
break;
case ILOC_BELT:

Loading…
Cancel
Save