SDLPP: add constant rotation
This commit is contained in:
parent
5a0cb397b1
commit
9617499ab8
@ -149,6 +149,7 @@ bool MarioBlock::isTraveling() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MarioBlock::custom_move(int ticks) {
|
void MarioBlock::custom_move(int ticks) {
|
||||||
|
SDLPP::RectangleRender::custom_move(ticks);
|
||||||
if (!_bouncing && !_traveling) {
|
if (!_bouncing && !_traveling) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,9 @@ public:
|
|||||||
virtual void setColor( const std::string &color ) override;
|
virtual void setColor( const std::string &color ) override;
|
||||||
virtual void setOutlineColor( const std::string &color ) override;
|
virtual void setOutlineColor( const std::string &color ) override;
|
||||||
virtual void specialAction( int /*UNUSED*/ ) override {}
|
virtual void specialAction( int /*UNUSED*/ ) override {}
|
||||||
virtual void custom_move( int /*UNUSED*/ ) override {}
|
virtual void custom_move( int ticks ) override {
|
||||||
|
RenderObject::custom_move(ticks);
|
||||||
|
}
|
||||||
virtual std::pair< Vec2D< double >, Vec2D< double > >
|
virtual std::pair< Vec2D< double >, Vec2D< double > >
|
||||||
getDoubleRect() const override;
|
getDoubleRect() const override;
|
||||||
virtual int leftmost() override;
|
virtual int leftmost() override;
|
||||||
|
@ -24,7 +24,9 @@ public:
|
|||||||
virtual void setColor( const std::string &color ) override;
|
virtual void setColor( const std::string &color ) override;
|
||||||
virtual void specialAction( int /*UNUSED*/ ) override{};
|
virtual void specialAction( int /*UNUSED*/ ) override{};
|
||||||
virtual void render() override;
|
virtual void render() override;
|
||||||
virtual void custom_move( int /*UNUSED*/ ) override {}
|
virtual void custom_move( int ticks ) override {
|
||||||
|
RenderObject::custom_move(ticks);
|
||||||
|
}
|
||||||
virtual void setPos( double x, double y ) override;
|
virtual void setPos( double x, double y ) override;
|
||||||
virtual void setPos( const std::pair< double, double > &pos ) override;
|
virtual void setPos( const std::pair< double, double > &pos ) override;
|
||||||
virtual void setPos( const Vec2D< double > &vec ) override;
|
virtual void setPos( const Vec2D< double > &vec ) override;
|
||||||
|
@ -61,7 +61,9 @@ public:
|
|||||||
virtual void setColor( const std::string &color ) override;
|
virtual void setColor( const std::string &color ) override;
|
||||||
virtual void setOutlineColor( const std::string &color ) override;
|
virtual void setOutlineColor( const std::string &color ) override;
|
||||||
virtual void specialAction( int /*UNUSED*/ ) override {}
|
virtual void specialAction( int /*UNUSED*/ ) override {}
|
||||||
virtual void custom_move( int /*UNUSED*/ ) override {}
|
virtual void custom_move( int ticks ) override {
|
||||||
|
RenderObject::custom_move(ticks);
|
||||||
|
}
|
||||||
virtual std::pair< Vec2D< double >, Vec2D< double > >
|
virtual std::pair< Vec2D< double >, Vec2D< double > >
|
||||||
getDoubleRect() const override;
|
getDoubleRect() const override;
|
||||||
virtual int leftmost() override;
|
virtual int leftmost() override;
|
||||||
|
@ -291,6 +291,16 @@ void RenderObject::rotateClockwise( int angle ) {
|
|||||||
void RenderObject::rotateCounterClockwise( int angle ) {
|
void RenderObject::rotateCounterClockwise( int angle ) {
|
||||||
rotateClockwise( 360 - ( angle % 360 ) );
|
rotateClockwise( 360 - ( angle % 360 ) );
|
||||||
}
|
}
|
||||||
|
void RenderObject::setRotationSpeed(int speed) {
|
||||||
|
rotation_speed = speed;
|
||||||
|
}
|
||||||
|
void RenderObject::startRotation() {
|
||||||
|
rotating = true;
|
||||||
|
}
|
||||||
|
void RenderObject::stopRotation() {
|
||||||
|
rotating = false;
|
||||||
|
}
|
||||||
|
|
||||||
Vec2D< double > RenderObject::computeAlignmentAdditions() {
|
Vec2D< double > RenderObject::computeAlignmentAdditions() {
|
||||||
double x_addition = 0;
|
double x_addition = 0;
|
||||||
double y_addition = 0;
|
double y_addition = 0;
|
||||||
@ -322,4 +332,10 @@ void RenderObject::updateXY() {
|
|||||||
current = { original.getX() + additions.getX(),
|
current = { original.getX() + additions.getX(),
|
||||||
original.getY() + additions.getY() };
|
original.getY() + additions.getY() };
|
||||||
}
|
}
|
||||||
|
void RenderObject::custom_move(int ticks) {
|
||||||
|
if(isRotating()) {
|
||||||
|
auto angle = ticks * rotation_speed / 1000; // tick = millisecond
|
||||||
|
rotateCounterClockwise(angle);
|
||||||
|
}
|
||||||
|
}
|
||||||
} // namespace SDLPP
|
} // namespace SDLPP
|
||||||
|
@ -131,10 +131,16 @@ public:
|
|||||||
void setRotationCenter( const Vec2D< double > ¢er );
|
void setRotationCenter( const Vec2D< double > ¢er );
|
||||||
void rotateClockwise( int angle );
|
void rotateClockwise( int angle );
|
||||||
void rotateCounterClockwise( int angle );
|
void rotateCounterClockwise( int angle );
|
||||||
|
void setRotationSpeed(int speed);
|
||||||
|
void startRotation();
|
||||||
|
void stopRotation();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void copyTo( std::shared_ptr< RenderObject > other );
|
virtual void copyTo( std::shared_ptr< RenderObject > other );
|
||||||
bool entireTexture();
|
bool entireTexture();
|
||||||
|
bool isRotating() {
|
||||||
|
return rotating;
|
||||||
|
}
|
||||||
std::vector< std::shared_ptr< CollisionPolygon > > collisions;
|
std::vector< std::shared_ptr< CollisionPolygon > > collisions;
|
||||||
std::shared_ptr< Texture > texture;
|
std::shared_ptr< Texture > texture;
|
||||||
std::shared_ptr< Texture > cur_texture;
|
std::shared_ptr< Texture > cur_texture;
|
||||||
@ -164,6 +170,8 @@ protected:
|
|||||||
Vec2D< double > rotation_center = { -1, -1 };
|
Vec2D< double > rotation_center = { -1, -1 };
|
||||||
SDL_Point rotation_center_point;
|
SDL_Point rotation_center_point;
|
||||||
int rotation_angle = 0;
|
int rotation_angle = 0;
|
||||||
|
int rotation_speed = 720;
|
||||||
|
bool rotating = false;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend Scene;
|
friend Scene;
|
||||||
|
Loading…
Reference in New Issue
Block a user