#include "Person.h" #include "Environment.h" #include "Animal.h" #include "Weapon.h" #include "HuntingSchool.h" #include "WeaponStore.h" #include #include Person::Person(std::string myName, Environment* env) { name = myName; currEnv = env; money = 14362; varIsHunter = false; currentTarget = 0; currWeapon = 0; } Person::~Person() { resetPerson(); } void Person::go(Environment* enviromentToGoTo) { currEnv = enviromentToGoTo; currentTarget = 0; currWeapon = 0; } void Person::takeExam() { if(currEnv->whereAmI() == "HuntingSchool") { HuntingSchool * huntSch =dynamic_cast(currEnv); if(!isHunter()) { if(huntSch->takeExam()) { std::cout << "Grattis till din jägarexamen! \n Du har nu blivit jägare och kan köpa vapen och jaga...\n\n"; updateLicense(); } else std::cout << "Tyvärr du var inte riktigt smart nog för att bevisa din dumhet som jägare... \n Bättre lycka nästa gång! \n\n"; } else std::cout << "Du är ju redan en jägare, dummer...\n\n"; } else std::cout << "Du har redan en licens. Du kan inte ta en till! Computer says no! [takeExam] \n\n"; } void Person::buyWeapon(std::string weaponToBuy) { if(currEnv->whereAmI() == "WeaponStore") { if(isHunter()) { if(!weapons.count(weaponToBuy)) { WeaponStore * store = dynamic_cast(currEnv); long price = store->getWeaponPrice(weaponToBuy); if(price > 0) { if(price <= money) { money -= price; addWeapon(store->buyWeapon(weaponToBuy), weaponToBuy); std::cout << "Grattis till ditt inköp av en " << weaponToBuy << ". \n Hoppas du kommer ha mycket roligt med vapnet - välkommen åter. \n\n"; } else std::cout << "Tyvärr har du inte råd att köpa en " << weaponToBuy << ".\n\n"; } else std::cout << "Tyvärr finns inte " << weaponToBuy << " i lager och kan därför inte köpas. \n Du får begära ett till nästa version...\n\n"; } else std::cout << "Du har redan en " << weaponToBuy << "! \n Shoppingmissbruk är inte bra. \n\n"; } else std::cout << "Du har ingen jägarlicens och då har du inte rätt att handla några vapen!\n\n"; } else std::cout << "Du måste vara i affären för att kunna handla vapen. Computer says no! [buyWeapon] \n\n"; } void Person::shoot() { if(currEnv->whereAmI() == "Forest") { if(currWeapon != 0) { if(currentTarget != 0) { if(!currentTarget->isDead()) { if(currentTarget->isCorrectWeapon(currWeapon->getName())) { currWeapon->shoot(currentTarget); std::cout << "Grattis! Du dödade just ett litet oskyldigt djur! \n\n"; currentTarget = 0; } else { std::cout << "Du måste använda rätt vapen! Nu förlorar du alla dina vapen och din jägarlicens.\n\n"; resetPerson(); } } else { std::cout << "Du är en faschist! Du förlorar alla dina vapen och din jägarlicens. \n\n"; resetPerson(); } } else std::cout << "Du träffade inget djur! \n\n"; } else std::cout << "Du har inte valt något vapen, hur ska du då kunna skjuta? \n\n"; } else { std::cout << "Du måste vara i skogen för att kunna skjuta ett djur. Computer says no! [shoot] \n\n"; } } void Person::aim(Animal* animalToAimAt) { if(currEnv->whereAmI() == "Forest") { if(currWeapon != 0) { currentTarget = 0; if(currWeapon->aim()) currentTarget = animalToAimAt; } else std::cout << "Du måste välja ett vapen för att kunna sikta. \n\n"; } else std::cout << "Du måste vara i skogen för att kunna sikta. Computer says no! [aim] \n\n"; } void Person::selectWeapon(std::string weapon) { if(currEnv->whereAmI() == "Forest") { if(weapons.count(weapon)) currWeapon = weapons[weapon]; else { std::cout << "Du har inte en " << weapon << ".\n\n"; currWeapon = 0; } } else { std::cout << "Du måste vara i skogen för att kunna ta fram ett vapen. Computer says no [weapon] \n\n"; } } bool Person::isHunter() { return varIsHunter; } void Person::addWeapon(Weapon* weaponToAdd, std::string weaponName) { weapons[weaponName] = weaponToAdd; } void Person::resetPerson() { //Iterera genom matrisen och ta bort varje vapen! Minnesläckage std::map::iterator iteratorn = weapons.begin(); while(iteratorn != weapons.end()) { delete iteratorn->second; iteratorn->second = 0; iteratorn++; } varIsHunter = false; weapons.clear(); currentTarget = 0; currWeapon = 0; } void Person::updateLicense() { varIsHunter = true; }