1
0
This repository has been archived on 2025-01-26. You can view files and clone it, but cannot push or open issues or pull requests.
CPP_Module_04/ex03/Character.cpp

80 lines
2.5 KiB
C++
Raw Permalink Normal View History

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* 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);
}
}