本文整理汇总了C++中ItemStack::clear方法的典型用法代码示例。如果您正苦于以下问题:C++ ItemStack::clear方法的具体用法?C++ ItemStack::clear怎么用?C++ ItemStack::clear使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ItemStack
的用法示例。
在下文中一共展示了ItemStack::clear方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: checkLoot
/**
* Check to see if the player is picking up loot on the ground
*/
void GameStatePlay::checkLoot() {
if (!pc->stats.alive)
return;
if (menu->isDragging())
return;
ItemStack pickup;
// Autopickup
if (AUTOPICKUP_CURRENCY) {
pickup = loot->checkAutoPickup(pc->stats.pos);
if (!pickup.empty()) {
menu->inv->add(pickup, CARRIED, -1, true, true);
pickup.clear();
}
}
// Normal pickups
if (!pc->stats.attacking) {
pickup = loot->checkPickup(inpt->mouse, mapr->cam, pc->stats.pos);
}
if (!pickup.empty()) {
menu->inv->add(pickup, CARRIED, -1, true, true);
camp->setStatus(items->items[pickup.item].pickup_status);
pickup.clear();
}
}
示例2: click
ItemStack MenuItemStorage::click(Point position) {
ItemStack item;
drag_prev_slot = slotOver(position);
// try to click on the highlighted (aka in focus) slot
// since mouse clicks defocus slots before this point,
// we don't have to worry about the mouse being over another slot
if (drag_prev_slot == -1) {
for (unsigned int i=0; i<slots.size(); i++) {
if (slots[i]->in_focus) {
drag_prev_slot = i;
break;
}
}
}
if (drag_prev_slot > -1) {
item = storage[drag_prev_slot];
if (TOUCHSCREEN) {
if (!slots[drag_prev_slot]->in_focus && !item.empty()) {
slots[drag_prev_slot]->in_focus = true;
current_slot = slots[drag_prev_slot];
item.clear();
drag_prev_slot = -1;
return item;
}
else {
slots[drag_prev_slot]->in_focus = false;
current_slot = NULL;
}
}
if (!item.empty()) {
if (item.quantity > 1 && !inpt->pressing[CTRL] && (inpt->pressing[SHIFT] || NO_MOUSE || inpt->touch_locked)) {
// we use an external menu to let the player pick the desired quantity
// we will subtract from this stack after they've made their decision
return item;
}
subtract( drag_prev_slot, item.quantity);
}
// item will be cleared if item.empty() == true
return item;
}
else {
item.clear();
return item;
}
}
示例3: click
/**
* Click-start dragging in the inventory
*/
ItemStack MenuInventory::click(Point position) {
ItemStack item;
drag_prev_src = areaOver(position);
if (drag_prev_src > -1) {
item = inventory[drag_prev_src].click(position);
if (TOUCHSCREEN) {
tablist.setCurrent(inventory[drag_prev_src].current_slot);
}
if (item.empty()) {
drag_prev_src = -1;
return item;
}
// if dragging equipment, prepare to change stats/sprites
if (drag_prev_src == EQUIPMENT) {
if (stats->humanoid) {
updateEquipment(inventory[EQUIPMENT].drag_prev_slot);
}
else {
itemReturn(item);
item.clear();
}
}
}
return item;
}
示例4: click
ItemStack MenuItemStorage::click(Point position) {
ItemStack item;
drag_prev_slot = slotOver(position);
// try to click on the highlighted (aka in focus) slot
// since mouse clicks defocus slots before this point,
// we don't have to worry about the mouse being over another slot
if (drag_prev_slot == -1) {
for (unsigned int i=0; i<slots.size(); i++) {
if (slots[i]->in_focus) {
drag_prev_slot = i;
break;
}
}
}
if (drag_prev_slot > -1) {
item = storage[drag_prev_slot];
if (TOUCHSCREEN) {
if (!slots[drag_prev_slot]->in_focus && !item.empty()) {
slots[drag_prev_slot]->in_focus = true;
current_slot = slots[drag_prev_slot];
item.clear();
return item;
}
else {
slots[drag_prev_slot]->in_focus = false;
current_slot = NULL;
}
}
if (!item.empty()) {
if (inpt->pressing[SHIFT] || NO_MOUSE || inpt->touch_locked) {
item.quantity = 1;
}
substract( drag_prev_slot, item.quantity);
}
// item will be cleared if item.empty() == true
return item;
}
else {
item.clear();
return item;
}
}
示例5: getCraftingResult
// Crafting helper
bool getCraftingResult(Inventory *inv, ItemStack& result,
std::vector<ItemStack> &output_replacements,
bool decrementInput, IGameDef *gamedef)
{
DSTACK(__FUNCTION_NAME);
result.clear();
// Get the InventoryList in which we will operate
InventoryList *clist = inv->getList("craft");
if(!clist)
return false;
// Mangle crafting grid to an another format
CraftInput ci;
ci.method = CRAFT_METHOD_NORMAL;
ci.width = clist->getWidth() ? clist->getWidth() : 3;
for(u16 i=0; i<clist->getSize(); i++)
ci.items.push_back(clist->getItem(i));
// Find out what is crafted and add it to result item slot
CraftOutput co;
bool found = gamedef->getCraftDefManager()->getCraftResult(
ci, co, output_replacements, decrementInput, gamedef);
if(found)
result.deSerialize(co.item, gamedef->getItemDefManager());
if(found && decrementInput)
{
// CraftInput has been changed, apply changes in clist
for(u16 i=0; i<clist->getSize(); i++)
{
clist->changeItem(i, ci.items[i]);
}
}
return found;
}
示例6: add
/**
* Insert item into first available carried slot, preferably in the optionnal specified slot
*
* @param ItemStack Stack of items
* @param area Area number where it will try to store the item
* @param slot Slot number where it will try to store the item
*/
bool MenuInventory::add(ItemStack stack, int area, int slot, bool play_sound, bool auto_equip) {
if (stack.empty())
return true;
bool success = true;
if (play_sound)
items->playSound(stack.item);
if (auto_equip && AUTO_EQUIP) {
int equip_slot = getEquipSlotFromItem(stack.item, true);
if (equip_slot >= 0 && inventory[EQUIPMENT].slots[equip_slot]->enabled) {
area = EQUIPMENT;
slot = equip_slot;
}
}
if (area == CARRIED) {
ItemStack leftover = inventory[CARRIED].add(stack, slot);
if (!leftover.empty()) {
pc->logMsg(msg->get("Inventory is full."), true);
drop_stack.push(leftover);
success = false;
}
}
else if (area == EQUIPMENT) {
ItemStack &dest = inventory[EQUIPMENT].storage[slot];
ItemStack leftover;
leftover.item = stack.item;
if (!dest.empty() && dest.item != stack.item) {
// items don't match, so just add the stack to the carried area
leftover.quantity = stack.quantity;
}
else if (dest.quantity + stack.quantity > items->items[stack.item].max_quantity) {
// items match, so attempt to merge the stacks. Any leftover will be added to the carried area
leftover.quantity = dest.quantity + stack.quantity - items->items[stack.item].max_quantity;
stack.quantity = items->items[stack.item].max_quantity - dest.quantity;
if (stack.quantity > 0) {
add(stack, EQUIPMENT, slot, false, false);
}
}
else {
// put the item in the appropriate equipment slot
inventory[EQUIPMENT].add(stack, slot);
updateEquipment(slot);
leftover.clear();
}
if (!leftover.empty()) {
add(leftover, CARRIED, -1, false, false);
}
applyEquipment();
}
// if this item has a power, place it on the action bar if possible
if (success && items->items[stack.item].type == "consumable" && items->items[stack.item].power > 0) {
menu_act->addPower(items->items[stack.item].power, 0);
}
drag_prev_src = -1;
return success;
}