Trying to switch to more object-oriented
This commit is contained in:
@@ -4,33 +4,67 @@
|
||||
namespace SDLPP {
|
||||
RectangleRender::RectangleRender( double x, double y, double w, double h,
|
||||
const std::shared_ptr< Renderer > &r )
|
||||
: RenderObject( r ) {
|
||||
og_x = x_ = x;
|
||||
og_y = y_ = y;
|
||||
og_w = w_ = w;
|
||||
og_h = h_ = h;
|
||||
updateSizeAndPosition();
|
||||
}
|
||||
: RectangleRender( { x, y }, { w, h }, r ) {}
|
||||
RectangleRender::RectangleRender( double x, double y, double w, double h,
|
||||
const std::shared_ptr< Renderer > &r,
|
||||
const std::shared_ptr< Texture > &t,
|
||||
int source_x, int source_y, int source_width,
|
||||
int source_height )
|
||||
: RectangleRender( x, y, w, h, r ) {
|
||||
setTexture( t, source_x, source_y, source_width, source_height );
|
||||
}
|
||||
: RectangleRender( { x, y }, { w, h }, r, t, source_x, source_y,
|
||||
source_width, source_height ) {}
|
||||
RectangleRender::RectangleRender( double x, double y, double w, double h,
|
||||
const std::shared_ptr< Renderer > &r,
|
||||
const std::shared_ptr< Texture > &t,
|
||||
const SDL_Rect &source_rect )
|
||||
: RectangleRender( x, y, w, h, r ) {
|
||||
setTexture( t, source_rect );
|
||||
}
|
||||
: RectangleRender( { x, y }, { w, h }, r, t, source_rect ) {}
|
||||
RectangleRender::RectangleRender( double x, double y, double w, double h,
|
||||
const std::shared_ptr< Renderer > &r,
|
||||
const std::string &img_or_color,
|
||||
bool is_polygon )
|
||||
: RectangleRender( x, y, w, h, r ) {
|
||||
: RectangleRender( { x, y }, { w, h }, r, img_or_color, is_polygon ) {}
|
||||
RectangleRender::RectangleRender( double x, double y, double w, double h,
|
||||
const std::shared_ptr< Renderer > &r,
|
||||
const std::string &img, int source_x,
|
||||
int source_y, int source_width,
|
||||
int source_height )
|
||||
: RectangleRender( { x, y }, { w, h }, r, img, source_x, source_y,
|
||||
source_width, source_height ) {}
|
||||
RectangleRender::RectangleRender( double x, double y, double w, double h,
|
||||
const std::shared_ptr< Renderer > &r,
|
||||
const std::string &img,
|
||||
const SDL_Rect &source_rect )
|
||||
: RectangleRender( { x, y }, { w, h }, r, img, source_rect ) {}
|
||||
RectangleRender::RectangleRender( const Vec2D< double > &top_left,
|
||||
const Vec2D< double > &size,
|
||||
const std::shared_ptr< Renderer > &r )
|
||||
: RenderObject( r ) {
|
||||
original = top_left;
|
||||
original_size = size;
|
||||
updateSizeAndPosition();
|
||||
}
|
||||
RectangleRender::RectangleRender( const Vec2D< double > &top_left,
|
||||
const Vec2D< double > &size,
|
||||
const std::shared_ptr< Renderer > &r,
|
||||
const std::shared_ptr< Texture > &t,
|
||||
int source_x, int source_y, int source_width,
|
||||
int source_height )
|
||||
: RectangleRender( top_left, size, r ) {
|
||||
setTexture( t, source_x, source_y, source_width, source_height );
|
||||
}
|
||||
RectangleRender::RectangleRender( const Vec2D< double > &top_left,
|
||||
const Vec2D< double > &size,
|
||||
const std::shared_ptr< Renderer > &r,
|
||||
const std::shared_ptr< Texture > &t,
|
||||
const SDL_Rect &source_rect )
|
||||
: RectangleRender( top_left, size, r ) {
|
||||
setTexture( t, source_rect );
|
||||
}
|
||||
RectangleRender::RectangleRender( const Vec2D< double > &top_left,
|
||||
const Vec2D< double > &size,
|
||||
const std::shared_ptr< Renderer > &r,
|
||||
const std::string &img_or_color,
|
||||
bool is_polygon )
|
||||
: RectangleRender( top_left, size, r ) {
|
||||
if ( !is_polygon ) {
|
||||
setTexture( img_or_color );
|
||||
} else {
|
||||
@@ -38,19 +72,21 @@ RectangleRender::RectangleRender( double x, double y, double w, double h,
|
||||
color = img_or_color;
|
||||
}
|
||||
}
|
||||
RectangleRender::RectangleRender( double x, double y, double w, double h,
|
||||
RectangleRender::RectangleRender( const Vec2D< double > &top_left,
|
||||
const Vec2D< double > &size,
|
||||
const std::shared_ptr< Renderer > &r,
|
||||
const std::string &img, int source_x,
|
||||
int source_y, int source_width,
|
||||
int source_height )
|
||||
: RectangleRender( x, y, w, h, r ) {
|
||||
: RectangleRender( top_left, size, r ) {
|
||||
setTexture( img, source_x, source_y, source_width, source_height );
|
||||
}
|
||||
RectangleRender::RectangleRender( double x, double y, double w, double h,
|
||||
RectangleRender::RectangleRender( const Vec2D< double > &top_left,
|
||||
const Vec2D< double > &size,
|
||||
const std::shared_ptr< Renderer > &r,
|
||||
const std::string &img,
|
||||
const SDL_Rect &source_rect )
|
||||
: RectangleRender( x, y, w, h, r ) {
|
||||
: RectangleRender( top_left, size, r ) {
|
||||
setTexture( img, source_rect );
|
||||
}
|
||||
void RectangleRender::setColor( const std::string &color ) {
|
||||
@@ -69,9 +105,9 @@ void RectangleRender::setOutlineColor( const std::string &color ) {
|
||||
}
|
||||
polygon->setOutlineColor( color );
|
||||
}
|
||||
std::pair< std::pair< double, double >, std::pair< double, double > >
|
||||
std::pair< Vec2D< double >, Vec2D< double > >
|
||||
RectangleRender::getDoubleRect() const {
|
||||
return { { og_x, og_y }, { og_w, og_h } };
|
||||
return { original, original_size };
|
||||
}
|
||||
int RectangleRender::leftmost() {
|
||||
return rect.x;
|
||||
@@ -100,10 +136,12 @@ int RectangleRender::collisionHeight() {
|
||||
void RectangleRender::updateSizeAndPosition() {
|
||||
updateXY();
|
||||
auto dimension = renderer->getSmallerSide();
|
||||
rect.x = std::round( x_ * dimension );
|
||||
rect.y = std::round( y_ * dimension );
|
||||
rect.w = std::round( ( x_ + w_ ) * dimension ) - rect.x;
|
||||
rect.h = std::round( ( y_ + h_ ) * dimension ) - rect.y;
|
||||
rect.x = std::round( current.getX() * dimension );
|
||||
rect.y = std::round( current.getY() * dimension );
|
||||
rect.w =
|
||||
std::round( ( current.getX() + original_size.getX() ) * dimension ) - rect.x;
|
||||
rect.h =
|
||||
std::round( ( current.getY() + original_size.getY() ) * dimension ) - rect.y;
|
||||
if ( polygon )
|
||||
polygon->updateCollision( collisionPushX(), collisionPushY(),
|
||||
collisionWidth(), collisionHeight() );
|
||||
@@ -133,19 +171,20 @@ std::string RectangleRender::getColor() const {
|
||||
|
||||
void RectangleRender::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