#include "ClapTrap.hpp" /* * statics */ int ClapTrap::_totalNumber = 0; /* * default/parametric constructor */ ClapTrap::ClapTrap( void ) { std::cout << "claptrap created without name\n"; return; } /* * destructor */ ClapTrap::~ClapTrap( void ) { std::cout << _class << " " << _name << " destructed\n"; return; } /* * copy constructor */ ClapTrap::ClapTrap( ClapTrap const & src ) { std::cout << _class << " " << _name << " copied\n"; *this = src; return; } /* * assignement operator */ ClapTrap & ClapTrap::operator=( ClapTrap const & rhs ) { if ( this != &rhs ) { this->_hit = rhs.getHit(); this->_energy = rhs.getEnergy(); this->_attack = rhs.getAttack(); } std::cout << _class << " " << _name << " assigned\n"; return *this; } /* * constructor */ ClapTrap::ClapTrap( std::string name ) : _name(name) { ClapTrap::_increaseNumber(); _class = "ClapTrap"; _hit = 10; _energy = 10; _attack = 1; _number = _getNumber(); std::cout << _class << " " << _name << " created with number " << _number << "\n"; return; } /* * getters */ std::string ClapTrap::getName() const {return _name;} int ClapTrap::getHit() const {return _hit;} int ClapTrap::getEnergy() const {return _energy;} int ClapTrap::getAttack() const {return _attack;} int ClapTrap::_getNumber() {return ClapTrap::_totalNumber;} void ClapTrap::_increaseNumber() {ClapTrap::_totalNumber++;} /* * robots */ void ClapTrap::attack(const std::string & target) { std::ostringstream action; std::ostringstream state; state << B_CYAN "[" B_GREEN << _class[0] << _number << B_PURPLE "h,e,a" B_CYAN ":" B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "->"; action << _class << " " << _name; if (_energy > 0 && _hit > 0) { _energy--; if (_energy < 0) _energy = 0; action << " attacked " << target << ", causing " B_YELLOW << _attack << RESET << " points of damage" << '\n'; } else { _attack = 0; if (_energy <= 0) action << " cannot attack because " B_RED " is out of energy" RESET"\n"; else if (_hit <= 0) action << " cannot attack because " B_RED " is out of hit" RESET "\n"; } state << B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "]" RESET; std::cout << state.str() << action.str(); } void ClapTrap::takeDamage(unsigned int amount) { std::ostringstream action; std::ostringstream state; state << B_CYAN "[" B_GREEN << _class[0] << _number << B_PURPLE "h,e,a" B_CYAN ":" B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "->"; action << _class << " " << _name; if (_energy > 0 && _hit > 0) { _hit -= amount; if (_hit < 0) _hit = 0; action << " looses " B_YELLOW << amount << RESET << " hit points" << '\n'; } else { if (_energy <= 0) action << " cannot take damage because " B_RED " is out of energy" RESET "\n"; else if (_hit <= 0) action << " cannot take damage because " B_RED " is out of hit" RESET "\n"; } state << B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "]" RESET; std::cout << state.str() << action.str(); } void ClapTrap::beRepaired(unsigned int amount) { std::ostringstream action; std::ostringstream state; state << B_CYAN "[" B_GREEN << _class[0] << _number << B_PURPLE "h,e,a" B_CYAN ":" B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "->"; action << _class << " " << _name; if (_energy > 0 && _hit > 0) { _energy--; if (_energy < 0) _energy = 0; _hit += amount; action << " repaired itself and gained " B_YELLOW << amount << RESET << " points of life" << '\n'; } else { if (_energy <= 0) action << " cannot repair itself because " B_RED " is out of energy" RESET "\n"; else if (_hit <= 0) action << " cannot repair itself because " B_RED " is out of hit" RESET "\n"; } state << B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "]" RESET; std::cout << state.str() << action.str(); }