From 95d416da26408432a3e786abc07925d9d2ffc095 Mon Sep 17 00:00:00 2001 From: whaffman Date: Mon, 14 Apr 2025 22:42:37 +0200 Subject: [PATCH] this is going to be allot of work!! --- .editorconfig | 12 +++++++++++ ex03/Makefile | 6 +++--- ex03/inc/AMateria.hpp | 33 +++++++++++++++++++++++++++++ ex03/inc/Character.hpp | 41 +++++++++++++++++++++++++++++++++++++ ex03/inc/Cure.hpp | 32 +++++++++++++++++++++++++++++ ex03/inc/ICharacter.hpp | 25 ++++++++++++++++++++++ ex03/inc/IMateriaSource.hpp | 23 +++++++++++++++++++++ ex03/inc/Ice.hpp | 30 +++++++++++++++++++++++++++ ex03/inc/MateriaSource.hpp | 29 ++++++++++++++++++++++++++ ex03/src/AMateria.cpp | 37 +++++++++++++++++++++++++++++++++ 10 files changed, 265 insertions(+), 3 deletions(-) create mode 100644 .editorconfig create mode 100644 ex03/inc/AMateria.hpp create mode 100644 ex03/inc/Character.hpp create mode 100644 ex03/inc/Cure.hpp create mode 100644 ex03/inc/ICharacter.hpp create mode 100644 ex03/inc/IMateriaSource.hpp create mode 100644 ex03/inc/Ice.hpp create mode 100644 ex03/inc/MateriaSource.hpp create mode 100644 ex03/src/AMateria.cpp diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..980ef21 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = tab +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/ex03/Makefile b/ex03/Makefile index 9013f1c..e851fa7 100644 --- a/ex03/Makefile +++ b/ex03/Makefile @@ -6,11 +6,11 @@ # By: whaffman +#+ # # +#+ # # Created: 2025/03/24 15:14:58 by whaffman #+# #+# # -# Updated: 2025/04/05 16:49:25 by whaffman ######## odam.nl # +# Updated: 2025/04/14 22:41:56 by whaffman ######## odam.nl # # # # **************************************************************************** # -NAME= -SRC= main.cpp +NAME= Materia +SRC= main.cpp AMateria.cpp Ice.cpp Cure.cpp Character.cpp MateriaSource.cpp -include ../common.mk diff --git a/ex03/inc/AMateria.hpp b/ex03/inc/AMateria.hpp new file mode 100644 index 0000000..276cf66 --- /dev/null +++ b/ex03/inc/AMateria.hpp @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* AMateria.hpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/04/14 22:12:51 by whaffman #+# #+# */ +/* Updated: 2025/04/14 22:35:00 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#pragma once +#include +#include "ICharacter.hpp" + +class AMateria +{ +protected: + std::string type; + +public: + AMateria() = default; + AMateria(AMateria const &other); + AMateria(std::string const &type); + virtual ~AMateria(); + AMateria &operator=(AMateria const &other); + + std::string const &getType() const; // Returns the materia type + virtual AMateria *clone() const = 0; + virtual void use(ICharacter &target); + +}; diff --git a/ex03/inc/Character.hpp b/ex03/inc/Character.hpp new file mode 100644 index 0000000..112e533 --- /dev/null +++ b/ex03/inc/Character.hpp @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* Character.hpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/04/14 22:23:59 by whaffman #+# #+# */ +/* Updated: 2025/04/14 22:29:01 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#pragma once +#include "ICharacter.hpp" +#include + +#include +#include "colors.h" + +class Character : public ICharacter +{ +private: + std::string name; + AMateria *inventory[4]; + +public: + Character(); + Character(std::string const &name); + Character(Character const &other); + ~Character() override; + Character &operator=(Character const &other); + + std::string const &getName() const override; + void equip(AMateria *m) override; + void unequip(int idx) override; + void use(int idx, ICharacter &target) override; + + void printInventory() const; + +}; + diff --git a/ex03/inc/Cure.hpp b/ex03/inc/Cure.hpp new file mode 100644 index 0000000..ee097d1 --- /dev/null +++ b/ex03/inc/Cure.hpp @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* Cure.hpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/04/14 22:21:38 by whaffman #+# #+# */ +/* Updated: 2025/04/14 22:29:08 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#pragma once +#include "AMateria.hpp" + +#include "ICharacter.hpp" +#include +#include +#include "colors.h" + +class Cure : public AMateria +{ +public: + Cure(); + Cure(Cure const &other); + ~Cure() override; + Cure &operator=(Cure const &other); + + AMateria *clone() const override; + void use(ICharacter &target) override; + +}; diff --git a/ex03/inc/ICharacter.hpp b/ex03/inc/ICharacter.hpp new file mode 100644 index 0000000..2757b5b --- /dev/null +++ b/ex03/inc/ICharacter.hpp @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ICharacter.hpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/04/14 22:14:07 by whaffman #+# #+# */ +/* Updated: 2025/04/14 22:14:28 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#pragma once +#include +#include "AMateria.hpp" + +class ICharacter +{ +public: + virtual ~ICharacter() {} + virtual std::string const &getName() const = 0; + virtual void equip(AMateria *m) = 0; + virtual void unequip(int idx) = 0; + virtual void use(int idx, ICharacter &target) = 0; +}; diff --git a/ex03/inc/IMateriaSource.hpp b/ex03/inc/IMateriaSource.hpp new file mode 100644 index 0000000..29c64e9 --- /dev/null +++ b/ex03/inc/IMateriaSource.hpp @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* IMateriaSource.hpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/04/14 22:25:03 by whaffman #+# #+# */ +/* Updated: 2025/04/14 22:25:53 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#pragma once +#include "AMateria.hpp" +#include + +class IMateriaSource +{ +public: + virtual ~IMateriaSource() {} + virtual void learnMateria(AMateria *m) = 0; + virtual AMateria *createMateria(std::string const &type) = 0; +}; diff --git a/ex03/inc/Ice.hpp b/ex03/inc/Ice.hpp new file mode 100644 index 0000000..74f45d3 --- /dev/null +++ b/ex03/inc/Ice.hpp @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* Ice.hpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/04/14 22:23:22 by whaffman #+# #+# */ +/* Updated: 2025/04/14 22:23:50 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#pragma once +#include "AMateria.hpp" +#include "ICharacter.hpp" +#include +#include +#include "colors.h" + +class Ice : public AMateria +{ +public: + Ice(); + Ice(Ice const &other); + ~Ice() override; + Ice &operator=(Ice const &other); + + AMateria *clone() const override; + void use(ICharacter &target) override; +}; diff --git a/ex03/inc/MateriaSource.hpp b/ex03/inc/MateriaSource.hpp new file mode 100644 index 0000000..66830dd --- /dev/null +++ b/ex03/inc/MateriaSource.hpp @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* MateriaSource.hpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/04/14 22:26:01 by whaffman #+# #+# */ +/* Updated: 2025/04/14 22:26:45 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#pragma once +#include "IMateriaSource.hpp" +#include + +class MateriaSource : public IMateriaSource +{ +private: + AMateria *materia[4]; +public: + MateriaSource(); + MateriaSource(MateriaSource const &other); + ~MateriaSource() override; + MateriaSource &operator=(MateriaSource const &other); + + void learnMateria(AMateria *m) override; + AMateria *createMateria(std::string const &type) override; +}; diff --git a/ex03/src/AMateria.cpp b/ex03/src/AMateria.cpp new file mode 100644 index 0000000..7b2e0c1 --- /dev/null +++ b/ex03/src/AMateria.cpp @@ -0,0 +1,37 @@ +#include "AMateria.hpp" +#include "ICharacter.hpp" +#include +#include + +AMateria::AMateria() : type("default") +{ +} + +AMateria::AMateria(AMateria const & other) +{ +} + +AMateria::AMateria(std::string const & type) : type(type) +{ +} + +AMateria::~AMateria() +{ +} + +AMateria & AMateria::operator=(AMateria const & other) +{ + if (this != &other) + type = other.type; + return *this; +} + +std::string const & AMateria::getType() const +{ + return type; +} + +void AMateria::use(ICharacter & target) +{ + std::cout << "AMateria::use called on " << target.getName() << std::endl; +}