/ CPP_Modules / CPP_Module_03 / ex03 / ScavTrap.cpp
ScavTrap.cpp
 1  /* ************************************************************************** */
 2  /*                                                                            */
 3  /*                                                        :::      ::::::::   */
 4  /*   ScavTrap.cpp                                       :+:      :+:    :+:   */
 5  /*                                                    +:+ +:+         +:+     */
 6  /*   By: gychoi <gychoi@student.42seoul.kr>         +#+  +:+       +#+        */
 7  /*                                                +#+#+#+#+#+   +#+           */
 8  /*   Created: 2023/08/09 18:54:29 by gychoi            #+#    #+#             */
 9  /*   Updated: 2023/08/12 20:33:36 by gychoi           ###   ########.fr       */
10  /*                                                                            */
11  /* ************************************************************************** */
12  
13  #include "ScavTrap.hpp"
14  #include <iostream>
15  
16  /*
17   * Constructor & Destructor
18   */
19  
20  ScavTrap::ScavTrap(void) : ClapTrap()
21  {
22  	std::cout << "ScavTrap default constructor called" << std::endl;
23  	_hit = 100;
24  	_energy = 50;
25  	_attack = 20;
26  	introduce();
27  }
28  
29  ScavTrap::ScavTrap(std::string const& _name) : ClapTrap(_name)
30  {
31  	std::cout << "ScavTrap parameterized constructor called" << std::endl;
32  	const_cast<std::string&>(name) = _name;
33  	_hit = 100;
34  	_energy = 50;
35  	_attack = 20;
36  	introduce();
37  }
38  
39  ScavTrap::ScavTrap(ScavTrap const& target) : ClapTrap(target.getName())
40  {
41  	std::cout << "ScavTrap copy constructor called" << std::endl;
42  	if (this != &target)
43  		*this = target;
44  	introduce();
45  }
46  
47  ScavTrap&	ScavTrap::operator=(ScavTrap const& target)
48  {
49  	std::cout << "ScavTrap copy assignment operator called" << std::endl;
50  	if (this != &target)
51  	{
52  		const_cast<std::string&>(name) = target.name;
53  		_hit = target._hit;
54  		_energy = target._energy;
55  		_attack = target._attack;
56  	}
57  	return (*this);
58  }
59  
60  ScavTrap::~ScavTrap(void)
61  {
62  	std::cout << "ScavTrap destructor called" << std::endl;
63  }
64  
65  /*
66   * Public Member Functions : ScavTrap Actions
67   */
68  
69  void	ScavTrap::attack(std::string const& target)
70  {
71  	if (_energy > 0)
72  	{
73  		std::cout << "ScavTrap " << getName() << " attacks " << target << " causing " << _attack << " points of damage!" << std::endl;
74  		_energy--;
75  	}
76  	else
77  		std::cout << "ScavTrap " << getName() << " is out of energy. Cannot move!" << std::endl;
78  }
79  
80  void	ScavTrap::guardGate(void)
81  {
82  	if (_energy > 0)
83  	{
84  		std::cout << "ScavTrap " << getName() << " is guarding the gate" << std::endl;
85  		std::cout << "[" << getName() << "]: " << "Guarding gates is FUN!" << std::endl;
86  		_energy--;
87  	}
88  	else
89  		std::cout << "ScavTrap " << getName() << " is out of energy. Cannot move!" << std::endl;
90  }
91  
92  void	ScavTrap::introduce(void)
93  {
94  	std::cout << "["<< getName() << "]: " << "Halt, moon citizen! I've been chosen to stand out here far, far away from everyone else -- to guard the main gate to the old communications facility." << std::endl;
95  }