LCOV - code coverage report
Current view: top level - shared - Player.cpp (source / functions) Hit Total Coverage
Test: code-coverage.info.cleaned Lines: 108 133 81.2 %
Date: 2023-01-28 00:08:57 Functions: 24 28 85.7 %

          Line data    Source code
       1             : #include <shared.hpp>
       2             : 
       3             : #define TECH_LEVEL_1 3
       4             : #define TECH_LEVEL_2 6
       5             : #define TECH_LEVEL_3 10
       6             : #define TECH_LEVEL_4 14
       7             : #define TECH_LEVEL_5 19
       8             : #define TECH_LEVEL_END 24
       9             : #define TECH_LEVEL_RESET 17
      10             : 
      11             : using namespace shared;
      12             : 
      13          12 : Player::Player()
      14             : {
      15          12 :     connectedToSocket.store(false);
      16          12 :     std::fill(resources.begin(), resources.end(), 0);
      17          12 :     this->techLevel = 0;
      18          12 :     this->listOfPriorityCard[0] = std::make_shared<Card>(CardsEnum::economy, 1, 2);
      19          12 :     this->listOfPriorityCard[1] = std::make_shared<Card>(CardsEnum::military, 2, 4);
      20          12 :     this->listOfPriorityCard[2] = std::make_shared<Card>(CardsEnum::science, 3, 2);
      21          12 :     this->listOfPriorityCard[3] = std::make_shared<Card>(CardsEnum::culture, 4, 1);
      22          12 :     this->listOfPriorityCard[4] = std::make_shared<Card>(CardsEnum::industry, 5, 0);
      23          12 : }
      24             : 
      25           2 : Player::Player(std::string username)
      26             : {
      27           2 :     connectedToSocket.store(false);
      28           2 :     std::fill(resources.begin(), resources.end(), 0);
      29           2 :     this->techLevel = 0;
      30           2 :     this->username = username;
      31           2 :     this->listOfPriorityCard[0] = std::make_shared<Card>(CardsEnum::economy, 1, 2);
      32           2 :     this->listOfPriorityCard[1] = std::make_shared<Card>(CardsEnum::military, 2, 4);
      33           2 :     this->listOfPriorityCard[2] = std::make_shared<Card>(CardsEnum::science, 3, 2);
      34           2 :     this->listOfPriorityCard[3] = std::make_shared<Card>(CardsEnum::culture, 4, 1);
      35           2 :     this->listOfPriorityCard[4] = std::make_shared<Card>(CardsEnum::industry, 5, 0);
      36           2 : }
      37             : 
      38           6 : void Player::setUsername(std::string username)
      39             : {
      40           6 :     this->username = username;
      41           6 : }
      42             : 
      43           4 : void Player::setSocket(boost::asio::ip::tcp::socket &clientSocket)
      44             : {
      45           4 :     if (connectedToSocket.load())
      46             :     {
      47           0 :         disconnectPlayer();
      48             :     }
      49           4 :     connectedToSocket.store(true);
      50           4 :     this->playerSocket = std::make_shared<boost::asio::ip::tcp::socket>(std::move(clientSocket));
      51           4 : }
      52             : 
      53          30 : std::string Player::getName()
      54             : {
      55          30 :     return this->username;
      56             : }
      57             : 
      58           7 : std::array<int, 3> Player::incrementTechWheel(unsigned toIncrement)
      59             : {
      60             :     std::array<int, 3> result;
      61           7 :     std::fill(result.begin(), result.end(), 0);
      62         109 :     for (unsigned i = 0; i < toIncrement; i++)
      63             :     {
      64         102 :         this->techLevel += 1;
      65         102 :         if (this->techLevel == TECH_LEVEL_1 || this->techLevel == TECH_LEVEL_2)
      66             :         {
      67           8 :             result[0]++;
      68             :         }
      69          94 :         else if (this->techLevel == TECH_LEVEL_3 || this->techLevel == TECH_LEVEL_4)
      70             :         {
      71           8 :             result[1]++;
      72             :         }
      73          86 :         else if (this->techLevel == TECH_LEVEL_5 || this->techLevel == TECH_LEVEL_END)
      74             :         {
      75           8 :             result[2]++;
      76             :         }
      77         102 :         if (this->techLevel == TECH_LEVEL_END)
      78             :         {
      79           2 :             this->techLevel = TECH_LEVEL_RESET;
      80             :         }
      81             :     }
      82           7 :     return result;
      83             : }
      84             : 
      85          27 : unsigned Player::getLevelOfCard(CardsEnum cardType)
      86             : {
      87          80 :     for (auto card : this->listOfPriorityCard)
      88             :     {
      89          80 :         if (card->getType() == cardType)
      90             :         {
      91          27 :             return card->getLevel();
      92             :         }
      93          80 :     }
      94           0 :     return 0;
      95             : }
      96             : 
      97           6 : void Player::upgradeCard(CardsEnum cardType)
      98             : {
      99          36 :     for (auto card : this->listOfPriorityCard)
     100             :     {
     101          30 :         if (card->getType() == cardType)
     102             :         {
     103           6 :             card->addLevel();
     104             :         }
     105          30 :     }
     106           6 : }
     107             : 
     108           7 : void Player::addBox(CardsEnum cardType, unsigned numberOfBoxToAdd)
     109             : {
     110          42 :     for (auto card : this->listOfPriorityCard)
     111             :     {
     112          35 :         if (card->getType() == cardType)
     113             :         {
     114           7 :             card->addBox(numberOfBoxToAdd);
     115             :         }
     116          35 :     }
     117           7 : }
     118           0 : bool Player::operator==(Player &otherPlayer)
     119             : {
     120           0 :     return (this->getName() == otherPlayer.getName() &&
     121           0 :             connectedToSocket.load() == false &&
     122           0 :             otherPlayer.connectedToSocket.load() == false);
     123             : }
     124             : 
     125          48 : boost::asio::ip::tcp::socket &Player::getSocket()
     126             : {
     127          48 :     return *(this->playerSocket.get());
     128             : }
     129             : 
     130           0 : void Player::disconnectPlayer()
     131             : {
     132           0 :     connectedToSocket.store(false);
     133           0 :     std::lock_guard<std::mutex> socketLock(socketReadMutex);
     134           0 :     std::lock_guard<std::mutex> socketLock2(socketWriteMutex);
     135           0 :     if (playerSocket && playerSocket->is_open())
     136             :     {
     137           0 :         playerSocket->close();
     138             :     }
     139           0 :     playerSocket.reset();
     140           0 : }
     141             : 
     142           1 : std::vector<std::shared_ptr<Caravan>> Player::getCaravans()
     143             : {
     144           1 :     return this->listOfCaravan;
     145             : }
     146             : 
     147          13 : unsigned Player::getNumberOfBox(CardsEnum cardType)
     148             : {
     149          35 :     for (auto card : this->listOfPriorityCard)
     150             :     {
     151          35 :         if (card->getType() == cardType)
     152             :         {
     153          13 :             return card->getNumberOfBox();
     154             :         }
     155          35 :     }
     156           0 :     return 0;
     157             : }
     158             : 
     159           1 : void Player::addCaravan(std::shared_ptr<Caravan> newCaravan)
     160             : {
     161           1 :     this->listOfCaravan.push_back(newCaravan);
     162           1 : }
     163             : 
     164           1 : bool Player::haveResource(ResourceEnum resourceType)
     165             : {
     166           1 :     return this->resources[(int)resourceType] > 0;
     167             : }
     168             : 
     169           8 : void Player::addControlPawn(std::shared_ptr<ControlPawn> newControlPawn)
     170             : {
     171           8 :     this->listOfControlPawn.push_back(newControlPawn);
     172           8 : }
     173             : 
     174           2 : void Player::removeControlPawn(std::shared_ptr<ControlPawn> controlPawnToRemove)
     175             : {
     176           8 :     for (auto controlPawn : this->listOfControlPawn)
     177             :     {
     178           6 :         if (controlPawn == controlPawnToRemove)
     179             :         {
     180           0 :             this->listOfControlPawn.erase(std::remove(this->listOfControlPawn.begin(), this->listOfControlPawn.end(), controlPawnToRemove), this->listOfControlPawn.end());
     181             :         }
     182           6 :     }
     183           2 : }
     184             : 
     185           1 : void Player::addResource(ResourceEnum resourceType)
     186             : {
     187           1 :     this->resources[(int)resourceType] += 1;
     188           1 : }
     189             : 
     190           1 : unsigned Player::getTechLevel()
     191             : {
     192           1 :     return this->techLevel;
     193             : }
     194             : 
     195           2 : unsigned Player::getNumberOfResource(ResourceEnum resourceType)
     196             : {
     197           2 :     return this->resources[(int)resourceType];
     198             : }
     199             : 
     200           7 : void Player::deleteBox(CardsEnum cardType, unsigned numberOfBoxToDelete)
     201             : {
     202          42 :     for (auto card : this->listOfPriorityCard)
     203             :     {
     204          35 :         if (card->getType() == cardType)
     205             :         {
     206           7 :             card->deleteBox(numberOfBoxToDelete);
     207             :         }
     208          35 :     }
     209           7 : }
     210             : 
     211           2 : std::vector<std::shared_ptr<City>> Player::getCityList()
     212             : {
     213           2 :     return this->listOfCity;
     214             : }
     215             : 
     216           3 : void Player::addCity(std::shared_ptr<City> newCity)
     217             : {
     218           3 :     this->listOfCity.push_back(newCity);
     219           3 : }
     220             : 
     221           0 : std::vector<std::shared_ptr<ControlPawn>> Player::getControlPawns()
     222             : {
     223           0 :     return this->listOfControlPawn;
     224             : }
     225             : 
     226           0 : void Player::setDificultyOfCard(CardsEnum cardType, unsigned newDificulty)
     227             : {
     228           0 :     for (auto card : this->listOfPriorityCard)
     229             :     {
     230           0 :         if (card->getType() == cardType)
     231             :         {
     232           0 :             card->setDificulty(newDificulty);
     233             :         }
     234           0 :     }
     235           0 : }
     236             : 
     237          21 : unsigned Player::getDificultyOfCard(CardsEnum cardType)
     238             : {
     239          62 :     for (auto card : this->listOfPriorityCard)
     240             :     {
     241          62 :         if (card->getType() == cardType)
     242             :         {
     243          21 :             return card->getDificulty();
     244             :         }
     245          62 :     }
     246           0 :     return 0;
     247             : }
     248             : 
     249          11 : std::array<std::shared_ptr<Card>, 5> Player::getListOfPriorityCards()
     250             : {
     251          11 :     return this->listOfPriorityCard;
     252             : }

Generated by: LCOV version 1.14