From efea8712aaf8169b1184cceb83705ca6b8783173 Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 14 Apr 2020 18:02:14 +0200 Subject: cpp04, ex03 not finished, require more sophisticated main --- cpp04/ex03/Character.cpp | 72 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 cpp04/ex03/Character.cpp (limited to 'cpp04/ex03/Character.cpp') diff --git a/cpp04/ex03/Character.cpp b/cpp04/ex03/Character.cpp new file mode 100644 index 0000000..34aaa48 --- /dev/null +++ b/cpp04/ex03/Character.cpp @@ -0,0 +1,72 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Character.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 16:45:54 by charles #+# #+# */ +/* Updated: 2020/04/14 17:59:57 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Character.hpp" + +Character::Character() : m_name(""), m_inventory_size(0) +{ +} + +Character::Character(Character const& other) +{ + *this = other; +} + +void Character::operator=(Character const& other) +{ + for (int i = 0; i < m_inventory_size; i++) + delete m_inventory[i]; + m_inventory_size = other.m_inventory_size; + for (int i = 0; i < m_inventory_size; i++) + m_inventory[i] = other.m_inventory[i]->clone(); + m_name = other.m_name; +} + +Character::~Character() +{ + for (int i = 0; i < m_inventory_size; i++) + delete m_inventory[i]; +} + +Character::Character(std::string const& name) + : m_name(name), m_inventory_size(0) +{ +} + +std::string const& Character::getName() const +{ + return m_name; +} + +void Character::equip(AMateria* m) +{ + if (m_inventory_size >= INVENTORY_MAX_SIZE) + return; + m_inventory[m_inventory_size] = m; + m_inventory_size++; +} + +void Character::unequip(int idx) +{ + if (idx < 0 || idx >= m_inventory_size) + return; + for (int i = idx; i < m_inventory_size - 1; i++) + m_inventory[i] = m_inventory[i + 1]; + m_inventory_size--; +} + +void Character::use(int idx, ICharacter& target) +{ + if (idx < 0 || idx >= m_inventory_size) + return; + m_inventory[idx]->use(target); +} -- cgit