void Player::throwAction(Optional<Vec2> dir) { vector<Item*> items = chooseItem("Choose an item to throw:", [this](const Item* item) { return !creature->getEquipment().isEquiped(item);}, ActionId::THROW); if (items.size() == 0) return; throwItem(items, dir); }
void Player::displayInventory() { if (!creature->isHumanoid()) { model->getView()->presentText("", "You can't use inventory."); return; } if (creature->getEquipment().isEmpty()) { model->getView()->presentText("", "Your inventory is empty."); return; } vector<Item*> item = chooseItem("Inventory:", alwaysTrue<const Item*>(), ActionId::SHOW_INVENTORY); if (item.size() == 0) { return; } vector<View::ListElem> options; if (creature->canEquip(item[0], nullptr)) { options.push_back("equip"); } if (creature->canApplyItem(item[0])) { options.push_back("apply"); } if (creature->canUnequip(item[0], nullptr)) options.push_back("remove"); else { options.push_back("throw"); options.push_back("drop"); } auto index = model->getView()->chooseFromList("What to do with " + getPluralName(item[0], item.size()) + "?", options); if (!index) { displayInventory(); return; } if (options[*index].getText() == "drop") { creature->privateMessage("You drop " + getPluralName(item[0], item.size())); creature->drop(item); } if (options[*index].getText() == "throw") { throwItem(item); } if (options[*index].getText() == "apply") { applyItem(item); } if (options[*index].getText() == "remove") { creature->privateMessage("You remove " + getPluralName(item[0], item.size())); creature->unequip(getOnlyElement(item)); } if (options[*index].getText() == "equip") { creature->privateMessage("You equip " + getPluralName(item[0], item.size())); creature->equip(item[0]); } }
void Level::throwItem(PItem item, const Attack& attack, int maxDist, Vec2 position, Vec2 direction, VisionId vision) { vector<PItem> v; v.push_back(std::move(item)); throwItem(std::move(v), attack, maxDist, position, direction, vision); }