aboutsummaryrefslogtreecommitdiff
path: root/cpp04/ex01/Character.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp04/ex01/Character.cpp')
-rw-r--r--cpp04/ex01/Character.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/cpp04/ex01/Character.cpp b/cpp04/ex01/Character.cpp
new file mode 100644
index 0000000..e06be50
--- /dev/null
+++ b/cpp04/ex01/Character.cpp
@@ -0,0 +1,81 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* Character.cpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/14 13:44:35 by charles #+# #+# */
+/* Updated: 2020/04/14 14:13:39 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "Character.hpp"
+
+Character::Character(Character const& other)
+{
+ *this = other;
+}
+
+void Character::operator=(Character const& other)
+{
+ m_name = other.m_name;
+}
+
+Character::~Character()
+{
+}
+
+Character::Character(std::string const& name) : m_name(name), m_ap(40), m_weapon(NULL)
+{
+}
+
+void Character::recoverAP()
+{
+ m_ap += 10;
+ if (m_ap > 40)
+ m_ap = 40;
+}
+
+void Character::equip(AWeapon *weapon)
+{
+ m_weapon = weapon;
+}
+
+void Character::attack(Enemy *enemy)
+{
+ if (m_weapon == NULL || m_ap < m_weapon->getAPCost())
+ return;
+ std::cout << m_name << " attacks " << enemy->getType() << " with a " << m_weapon->getName() << std::endl;
+ m_weapon->attack();
+ enemy->takeDamage(m_weapon->getDamage());
+ if (enemy->getHP() <= 0)
+ delete enemy;
+ m_ap -= m_weapon->getAPCost();
+}
+
+std::string const& Character::getName() const
+{
+ return m_name;
+}
+
+int Character::getAP() const
+{
+ return m_ap;
+}
+
+AWeapon* Character::getWeapon() const
+{
+ return m_weapon;
+}
+
+std::ostream& operator<<(std::ostream& out, Character const& c)
+{
+ out << c.getName() << " has " << c.getAP();
+ if (c.getWeapon() == NULL)
+ out << " and is unarmed";
+ else
+ out << " and wields a " << c.getWeapon()->getName();
+ out << std::endl;
+ return out;
+}