#include "Circle.h" #include "Collision.h" #include /*Default constructor*/ Circle::Circle(void) : Shape() { this->circleDiameter = 0; this->circleRadius = 0; } /*Set constructor with values*/ Circle::Circle(const float x, const float y, const float diameter) : Shape(x, y, diameter, diameter) { this->circleDiameter = diameter; this->circleRadius = diameter / 2; } /*Copy constructor*/ Circle::Circle(const Circle& shape) { position.shapeLeft = shape.position.shapeLeft; position.shapeTop = shape.position.shapeTop; position.shapeRight = shape.position.shapeRight; position.shapeBottom = shape.position.shapeBottom; circleDiameter = shape.circleDiameter; circleRadius = shape.circleRadius; } /*Destructor*/ Circle::~Circle(void) { } /*Collision detection method in the Collision class*/ bool Circle::isDetectCollision(const Shape &shape) const { try { if (typeid(shape) == typeid(Square)) { return Collision::isDetectCollision(*this, dynamic_cast(shape)); } else if (typeid(shape) == typeid(Circle)) { return Collision::isDetectCollision(dynamic_cast(shape), *this); } else { throw "Error: the shape is not defined"; } } catch (char const* &exception) { std::cout << exception; } return false; } /*Overload to print out the output of the circles*/ std::ostream& Circle::result(std::ostream& output) const { output << *this; return output; } /*assignment operator*/ Circle& Circle::operator=(const Circle &circle) { if (this != &circle) { position.shapeLeft = circle.position.shapeLeft; position.shapeTop = circle.position.shapeTop; position.shapeRight = circle.position.shapeRight; position.shapeBottom = circle.position.shapeBottom; circleDiameter = circle.circleDiameter; circleRadius = circle.circleRadius; } return *this; } /*ostream operator*/ std::ostream& operator<<(std::ostream& output, const Circle& circle) { output << "CIRCLE" << std::endl << "Position[Top: " << circle.position.shapeTop << " , Right: " << circle.position.shapeRight << " , Bottom: " << circle.position.shapeBottom << " , Left: " << circle.position.shapeLeft << "]" << std::endl << "Diameter[" << circle.circleDiameter << "]" << std::endl << "Radius[" << circle.circleRadius << "]" << std::endl << "Shape Origin[X: " << circle.getOriginPositionX() << " , Y: " << circle.getOriginPositionY() << "]" << std::endl; return output; }