Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "SFML/Graphics.hpp"
- class OvalShape : public sf::Shape {
- public:
- OvalShape( sf::Vector2f radius = sf::Vector2f( 0, 0 ) );
- void setPointCount( std::size_t );
- std::size_t getPointCount() const;
- sf::Vector2f getPoint( std::size_t ) const;
- void setRadius( sf::Vector2f );
- sf::Vector2f getRadius() const;
- private:
- sf::Vector2f radius_;
- sf::CircleShape circle_;
- };
- OvalShape::OvalShape( sf::Vector2f radius ){
- setRadius( radius );
- }
- void OvalShape::setPointCount( std::size_t count ){
- circle_.setPointCount( count );
- update();
- }
- std::size_t OvalShape::getPointCount() const{
- return circle_.getPointCount();
- }
- sf::Vector2f OvalShape::getPoint( std::size_t index ) const{
- const float circle_radius = circle_.getRadius();
- const sf::Vector2f circle_position( circle_.getPosition() );
- const sf::Vector2f circle_point( circle_.getPoint( index ) );
- sf::Vector2f circle_origin( sf::Vector2f( circle_position.x + circle_radius,
- circle_position.y + circle_radius ) );
- float oval_position_movement_y =
- circle_radius * ( radius_.y - radius_.x ) / radius_.x;
- sf::Vector2f oval_point;
- oval_point.x = circle_point.x;
- oval_point.y = ( circle_point.y - circle_origin.y ) * radius_.y / radius_.x
- + circle_origin.y + oval_position_movement_y;
- return oval_point;
- }
- void OvalShape::setRadius( sf::Vector2f radius ){
- radius_ = radius;
- circle_.setRadius( radius.x );
- update();
- }
- sf::Vector2f OvalShape::getRadius() const{
- return radius_;
- }
Add Comment
Please, Sign In to add comment