CSC3221_Programming_For_Games_Shapes / Project2 / Circle.cpp
Circle.cpp
Raw
#include "Circle.h"
#include "Collision.h"
#include <iostream>

/*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<const Square&>(shape));
		}
		else if (typeid(shape) == typeid(Circle)) {
			return Collision::isDetectCollision(dynamic_cast<const Circle&>(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;
}