Guest User

Untitled

a guest
Jun 18th, 2018
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. #include "SFML/Graphics.hpp"
  2.  
  3. class OvalShape : public sf::Shape {
  4. public:
  5. OvalShape( sf::Vector2f radius = sf::Vector2f( 0, 0 ) );
  6.  
  7. void setPointCount( std::size_t );
  8. std::size_t getPointCount() const;
  9. sf::Vector2f getPoint( std::size_t ) const;
  10. void setRadius( sf::Vector2f );
  11. sf::Vector2f getRadius() const;
  12. private:
  13. sf::Vector2f radius_;
  14. sf::CircleShape circle_;
  15. };
  16.  
  17. OvalShape::OvalShape( sf::Vector2f radius ){
  18. setRadius( radius );
  19. }
  20. void OvalShape::setPointCount( std::size_t count ){
  21. circle_.setPointCount( count );
  22. update();
  23. }
  24. std::size_t OvalShape::getPointCount() const{
  25. return circle_.getPointCount();
  26. }
  27. sf::Vector2f OvalShape::getPoint( std::size_t index ) const{
  28. const float circle_radius = circle_.getRadius();
  29. const sf::Vector2f circle_position( circle_.getPosition() );
  30. const sf::Vector2f circle_point( circle_.getPoint( index ) );
  31. sf::Vector2f circle_origin( sf::Vector2f( circle_position.x + circle_radius,
  32. circle_position.y + circle_radius ) );
  33. float oval_position_movement_y =
  34. circle_radius * ( radius_.y - radius_.x ) / radius_.x;
  35. sf::Vector2f oval_point;
  36. oval_point.x = circle_point.x;
  37. oval_point.y = ( circle_point.y - circle_origin.y ) * radius_.y / radius_.x
  38. + circle_origin.y + oval_position_movement_y;
  39. return oval_point;
  40. }
  41. void OvalShape::setRadius( sf::Vector2f radius ){
  42. radius_ = radius;
  43. circle_.setRadius( radius.x );
  44. update();
  45. }
  46. sf::Vector2f OvalShape::getRadius() const{
  47. return radius_;
  48. }
Add Comment
Please, Sign In to add comment