Browse Source

Avoid unnecessary item initialisation and copy

pull/6104/head
ephphatha 3 years ago committed by Anders Jenbo
parent
commit
9987bb6be2
  1. 4
      Source/inv.cpp
  2. 9
      Source/items.cpp
  3. 6
      Source/items.h
  4. 2
      Source/msg.cpp

4
Source/inv.cpp

@ -1765,7 +1765,7 @@ int SyncDropItem(Point position, _item_indexes idx, uint16_t icreateinfo, int is
item._iAC = ac;
item.dwBuff = ibuff;
return PlaceItemInWorld(item, position);
return PlaceItemInWorld(std::move(item), position);
}
int SyncDropEar(Point position, uint16_t icreateinfo, uint32_t iseed, uint8_t cursval, string_view heroname)
@ -1776,7 +1776,7 @@ int SyncDropEar(Point position, uint16_t icreateinfo, uint32_t iseed, uint8_t cu
Item item;
RecreateEar(item, icreateinfo, iseed, cursval, heroname);
return PlaceItemInWorld(item, position);
return PlaceItemInWorld(std::move(item), position);
}
int8_t CheckInvHLight()

9
Source/items.cpp

@ -3108,13 +3108,16 @@ int AllocateItem()
return inum;
}
int PlaceItemInWorld(Item &&item, WorldTilePosition position)
uint8_t PlaceItemInWorld(Item &&item, WorldTilePosition position)
{
int ii = AllocateItem();
assert(ActiveItemCount < MAXITEMS);
uint8_t ii = ActiveItems[ActiveItemCount];
ActiveItemCount++;
dItem[position.x][position.y] = ii + 1;
auto &item_ = Items[ii];
item_ = item;
item_ = std::move(item);
item_.position = position;
RespawnItem(item_, true);

6
Source/items.h

@ -500,12 +500,12 @@ void CreatePlrItems(Player &player);
bool ItemSpaceOk(Point position);
int AllocateItem();
/**
* @brief Puts the item onto the floor of the current dungeon level
* @param item The source of the item data
* @brief Moves the item onto the floor of the current dungeon level
* @param item The source of the item data, should not be used after calling this function
* @param position Coordinates of the tile to place the item on
* @return The index assigned to the item
*/
int PlaceItemInWorld(const Item &item, WorldTilePosition position);
uint8_t PlaceItemInWorld(Item &&item, WorldTilePosition position);
Point GetSuperItemLoc(Point position);
void GetItemAttrs(Item &item, _item_indexes itemData, int lvl);
void SetupItem(Item &item);

2
Source/msg.cpp

@ -1315,7 +1315,7 @@ size_t OnPutItem(const TCmd *pCmd, size_t pnum)
if (isSelf) {
std::optional<Point> itemTile = FindAdjacentPositionForItem(player.position.tile, GetDirection(player.position.tile, position));
if (itemTile)
ii = PlaceItemInWorld(ItemLimbo, *itemTile);
ii = PlaceItemInWorld(std::move(ItemLimbo), *itemTile);
else
ii = -1;
} else

Loading…
Cancel
Save