80 lines
2.5 KiB
C++
80 lines
2.5 KiB
C++
/* ************************************************************************** */
|
||
/* */
|
||
/* ::: :::::::: */
|
||
/* Character.cpp :+: :+: :+: */
|
||
/* +:+ +:+ +:+ */
|
||
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
|
||
/* +#+#+#+#+#+ +#+ */
|
||
/* Created: 2024/12/12 16:25:46 by adjoly #+# #+# */
|
||
/* Updated: 2024/12/12 18:55:42 by adjoly ### ########.fr */
|
||
/* */
|
||
/* ************************************************************************** */
|
||
|
||
#include "Character.hpp"
|
||
#include "AMateria.hpp"
|
||
#include "ICharacter.hpp"
|
||
#include "Log.hpp"
|
||
|
||
Character::Character(void) : _name("noname") {
|
||
log("➕", "Character", "", "default constructor called");
|
||
}
|
||
|
||
Character::~Character(void) {
|
||
log("➖", "Character", "", "destructor called");
|
||
for (int i = 0; i < ENV_SIZE; i++) {
|
||
if (_materias[i].obj)
|
||
delete _materias[i].obj;
|
||
}
|
||
}
|
||
|
||
Character::Character(std::string const name) : _name(name) {
|
||
log("➕", "Character", name, "name constructor called");
|
||
}
|
||
|
||
Character::Character(const Character &cpy) {
|
||
for(int i = 0; i < ENV_SIZE; i++) {
|
||
_materias[i].equipped = cpy._materias[i].equipped;
|
||
_materias[i].obj = cpy._materias[i].obj->clone();
|
||
}
|
||
_name = cpy._name;
|
||
log("➕", "Character", "", "copy constructor called");
|
||
}
|
||
|
||
Character &Character::operator=(const Character &cpy) {
|
||
if (this != &cpy) {
|
||
_name = cpy._name;
|
||
for (int i = 0; i < ENV_SIZE; i++) {
|
||
_materias[i].obj = cpy._materias[i].obj->clone();
|
||
_materias[i].equipped = cpy._materias[i].equipped;
|
||
}
|
||
}
|
||
log("➕", "Character", "", "copy assignement constructor called");
|
||
return (*this);
|
||
}
|
||
|
||
std::string const &Character::getName(void) const {
|
||
return(_name);
|
||
}
|
||
|
||
void Character::equip(AMateria *m) {
|
||
for (int i = 0; i < ENV_SIZE; i++) {
|
||
if (!_materias[i].equipped) {
|
||
_materias[i].obj = m;
|
||
_materias[i].equipped = true;
|
||
return ;
|
||
}
|
||
}
|
||
}
|
||
|
||
void Character::unequip(int idx) {
|
||
if (idx >= 0 && idx < ENV_SIZE) {
|
||
_materias[idx].equipped = false;
|
||
}
|
||
}
|
||
|
||
void Character::use(int idx, ICharacter &character) {
|
||
if (idx >= 0 && idx < ENV_SIZE && _materias[idx].equipped) {
|
||
_materias[idx].obj->use(character);
|
||
}
|
||
}
|