void Player::equip(Equipment * eq) { Armor * pArm = dynamic_cast<Armor*>(eq); if (pArm != NULL) { vInventory.push_back(armor); armor = pArm; cout << "You have equipped a " << pArm->getName() << "!" << endl; } Weapon * pWeap = dynamic_cast<Weapon *>(eq); if (pWeap != NULL) { vInventory.push_back(weapon); weapon = pWeap; cout << "You have equipped a " << pWeap->getName() << "!" << endl; } }
void MenuInventory::getViewScreen() { DM::say("Gear:"); Player *player = _game->getPlayer(); Weapon *main = player->getMainWeapon(); if (main) { int base = player->getStrength(); string type = ""; switch (main->getWeaponType()) { case WeaponType::SIMPLE: type = "Simple Weapon"; break; case WeaponType::FINESSE: if (player->getDexterity() > player->getStrength()) { base = player->getDexterity(); } type = "Finesse Weapon"; break; case WeaponType::MARTIAL: type = "Martial Weapon"; break; case WeaponType::HEAVY: type = "heavy Weapon"; break; case WeaponType::SHIELD: type = "Shield"; break; } DM::say("\t<Main> Weapon: " + main->getName() + " (" + to_string(main->getDiceAmount()) + "d" + to_string(main->getDiceSize()) + "+" + to_string(base) + " " + type + ")"); } else { DM::say("\t<Main> Weapon: None"); } Weapon *off = player->getOffHandWeapon(); if (off) { int base = player->getStrength(); string type = ""; switch (off->getWeaponType()) { case WeaponType::SIMPLE: type = "Simple Weapon"; break; case WeaponType::FINESSE: if (player->getDexterity() > player->getStrength()) { base = player->getDexterity(); } type = "Finesse Weapon"; break; case WeaponType::MARTIAL: type = "Martial Weapon"; break; case WeaponType::HEAVY: type = "heavy Weapon"; break; case WeaponType::SHIELD: type = "Shield (+2AC)"; break; } DM::say("\t<Off>hand Weapon: " + off->getName() + " (" + to_string(off->getDiceAmount()) + "d" + to_string(off->getDiceSize()) + "+" + to_string(base) + " " + type + ")"); } else { DM::say("\t<Off>hand Weapon: None"); } Armor *armor = player->getArmor(); if (armor) { string extra = ""; switch (armor->getArmorType()) { case ArmorType::LIGHT: extra = " + Dex "; break; case ArmorType::MEDIUM: extra = " + max 2 Dex "; break; case ArmorType::HEAVY: break; } DM::say("\t<Armor>: " + armor->getName() + " ( AC: " + to_string(armor->getBaseAC()) + extra + ")"); } else { DM::say("\t<Armor>: None"); } DM::say("\nInventory:"); int i = 1; for (map<Item *, int>::iterator item = _inventory->begin(); item != _inventory->end(); ++item) { switch (item->first->getItemType()) { case ItemType::ARMOR: { Armor *armor = (Armor *) item->first; string extra = ""; switch (armor->getArmorType()) { case ArmorType::LIGHT: extra = " + Dex "; break; case ArmorType::MEDIUM: extra = " + max 2 Dex "; break; case ArmorType::HEAVY: break; } DM::say("\t[" + to_string(i) + "]: " + item->first->getName() + " - AC: " + to_string(armor->getBaseAC()) + extra + "(" + to_string(item->second) + "x)"); break; } case ItemType::WEAPON: { Weapon *weapon = (Weapon *) item->first; string type = ""; switch (weapon->getWeaponType()) { case WeaponType::SIMPLE: type = "Simple Weapon"; break; case WeaponType::FINESSE: type = "Finesse Weapon"; break; case WeaponType::MARTIAL: type = "Martial Weapon"; break; case WeaponType::HEAVY: type = "heavy Weapon"; break; case WeaponType::SHIELD: type = "Shield (+2AC)"; break; } DM::say("\t[" + to_string(i) + "]: " + item->first->getName() + " - " + type + " - " + to_string(weapon->getDiceAmount()) + "d" + to_string(weapon->getDiceSize()) + " dmg (" + to_string(item->second) + "x)"); break; } case ItemType::CONSUMABLE: { Consumable *consumable = (Consumable *) item->first; string type = ""; string effect = ""; switch (consumable->getConsumableType()) { case ConsumableType::FOOD: type = "Food"; effect = "hp max per rest"; break; case ConsumableType::HEALING: type = "Healing item"; effect = "hp max on use"; break; case ConsumableType::ILLUMINATION: type = "Illumination"; effect = "room(s) of light"; break; case ConsumableType::BOMB: type = "Bomb"; if (consumable->getDiceAmount() == 0) { effect = "cave-in(s)"; } else { effect = "probable cave-in(s)"; } break; case ConsumableType::TALISMAN: type = "Talisman"; effect = "maximum distance to exit"; break; } if (consumable->getDiceAmount() == 0) { DM::say("\t[" + to_string(i) + "]: " + consumable->getName() + " - " + type + " - " + to_string(consumable->getBaseValue()) + " " + effect + " (" + to_string(item->second) + "x)"); } else { DM::say("\t[" + to_string(i) + "]: " + consumable->getName() + " - " + type + " - " + to_string(consumable->getDiceAmount()) + "d" + to_string(consumable->getDiceSize()) + "+" + to_string(consumable->getBaseValue()) + " " + effect + " (" + to_string(item->second) + "x)"); } break; } } ++i; } if (i == 1) { DM::say("\tNo items"); } }