Trying to switch to more object-oriented
This commit is contained in:
@@ -6,28 +6,41 @@
|
||||
namespace SDLPP {
|
||||
CircleRender::CircleRender( double x, double y, double rad,
|
||||
std::shared_ptr< Renderer > &r )
|
||||
: RenderObject( r ) {
|
||||
og_x = x_ = x;
|
||||
og_y = y_ = y;
|
||||
og_r = r_ = rad;
|
||||
}
|
||||
: CircleRender( { x, y }, rad, r ) {}
|
||||
|
||||
CircleRender::CircleRender( double x, double y, double rad,
|
||||
std::shared_ptr< Renderer > &r,
|
||||
std::shared_ptr< Texture > &t )
|
||||
: CircleRender( x, y, rad, r ) {
|
||||
throw "I don't support textures yet!!!";
|
||||
}
|
||||
: CircleRender( { x, y }, rad, r, t ) {}
|
||||
|
||||
CircleRender::CircleRender( double x, double y, double rad,
|
||||
std::shared_ptr< Renderer > &r,
|
||||
const std::string &img_or_color,
|
||||
bool is_polygon )
|
||||
: CircleRender( x, y, rad, r ) {
|
||||
if(!is_polygon) {
|
||||
const std::string &img_or_color, bool is_polygon )
|
||||
: CircleRender( { x, y }, rad, r, img_or_color, is_polygon ) {}
|
||||
|
||||
CircleRender::CircleRender( Vec2D< double > center, double rad,
|
||||
std::shared_ptr< Renderer > &r )
|
||||
: RenderObject( r ) {
|
||||
original = center;
|
||||
current = center;
|
||||
og_r = r_ = rad;
|
||||
}
|
||||
|
||||
CircleRender::CircleRender( Vec2D< double > center, double rad,
|
||||
std::shared_ptr< Renderer > &r,
|
||||
std::shared_ptr< Texture > &t )
|
||||
: CircleRender( center, rad, r ) {
|
||||
throw "I don't support textures yet!!!";
|
||||
}
|
||||
|
||||
CircleRender::CircleRender( Vec2D< double > center, double rad,
|
||||
std::shared_ptr< Renderer > &r,
|
||||
const std::string &img_or_color, bool is_polygon )
|
||||
: CircleRender( center, rad, r ) {
|
||||
if ( !is_polygon ) {
|
||||
throw "I don't support textures yet!!!";
|
||||
} else {
|
||||
setColor(img_or_color);
|
||||
setColor( img_or_color );
|
||||
color = img_or_color;
|
||||
}
|
||||
}
|
||||
@@ -50,9 +63,9 @@ void CircleRender::setOutlineColor( const std::string &color ) {
|
||||
polygon->setOutlineColor( color );
|
||||
}
|
||||
|
||||
std::pair< std::pair< double, double >, std::pair< double, double > >
|
||||
std::pair< Vec2D<double>, Vec2D<double> >
|
||||
CircleRender::getDoubleRect() const {
|
||||
return { { og_x - og_r, og_y - og_r }, { 2 * og_r, 2 * og_r } };
|
||||
return { { original.getX() - og_r, original.getY() - og_r }, { 2 * og_r, 2 * og_r } };
|
||||
}
|
||||
|
||||
int CircleRender::leftmost() {
|
||||
@@ -90,10 +103,10 @@ int CircleRender::collisionHeight() {
|
||||
void CircleRender::updateSizeAndPosition() {
|
||||
updateXY();
|
||||
auto dimension = renderer->getSmallerSide();
|
||||
rect.x = std::round( (x_ - r_) * dimension );
|
||||
rect.y = std::round( (y_ - r_) * dimension );
|
||||
rect.w = std::round( ( x_ + r_ ) * dimension ) - rect.x;
|
||||
rect.h = std::round( ( y_ + r_ ) * dimension ) - rect.y;
|
||||
rect.x = std::round( ( current.getX() - r_ ) * dimension );
|
||||
rect.y = std::round( ( current.getY() - r_ ) * dimension );
|
||||
rect.w = std::round( ( current.getX() + r_ ) * dimension ) - rect.x;
|
||||
rect.h = std::round( ( current.getY() + r_ ) * dimension ) - rect.y;
|
||||
if ( polygon )
|
||||
polygon->updateCollision( collisionPushX(), collisionPushY(),
|
||||
collisionWidth(), collisionHeight() );
|
||||
@@ -114,12 +127,12 @@ void CircleRender::centerX() {
|
||||
|
||||
std::shared_ptr< RenderObject > CircleRender::copySelf() {
|
||||
auto ret = std::make_shared< CircleRender >( *this );
|
||||
copyTo(ret);
|
||||
copyTo( ret );
|
||||
return ret;
|
||||
}
|
||||
|
||||
void CircleRender::copyTo(std::shared_ptr<RenderObject> other) {
|
||||
RenderObject::copyTo(other);
|
||||
void CircleRender::copyTo( std::shared_ptr< RenderObject > other ) {
|
||||
RenderObject::copyTo( other );
|
||||
}
|
||||
|
||||
std::string CircleRender::getColor() const {
|
||||
@@ -128,19 +141,20 @@ std::string CircleRender::getColor() const {
|
||||
|
||||
void CircleRender::updateXY() {
|
||||
if ( !centerx ) {
|
||||
x_ = og_x;
|
||||
y_ = og_y;
|
||||
current = original;
|
||||
return;
|
||||
}
|
||||
auto width = renderer->getWidth();
|
||||
auto height = renderer->getHeight();
|
||||
double x_, y_;
|
||||
if ( width > height ) {
|
||||
auto multiplier =
|
||||
static_cast< double >( width ) / static_cast< double >( height );
|
||||
x_ = og_x + static_cast< double >( multiplier - 1 ) / 2;
|
||||
x_ = original.getX() + static_cast< double >( multiplier - 1 ) / 2;
|
||||
} else {
|
||||
x_ = og_x;
|
||||
x_ = original.getX();
|
||||
}
|
||||
y_ = og_y;
|
||||
y_ = original.getY();
|
||||
current = { x_, y_ };
|
||||
}
|
||||
} // namespace SDLPP
|
||||
|
||||
Reference in New Issue
Block a user