Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00025
00028
00029 #ifndef THOR_ARROW_HPP
00030 #define THOR_ARROW_HPP
00031
00032 #include <Thor/Config.hpp>
00033
00034 #include <SFML/Graphics/Drawable.hpp>
00035 #include <SFML/Graphics/Transformable.hpp>
00036 #include <SFML/Graphics/ConvexShape.hpp>
00037
00038
00039 namespace thor
00040 {
00041
00044
00048 class THOR_API Arrow : public sf::Drawable, public sf::Transformable
00049 {
00050
00051
00052 public:
00055 enum Style
00056 {
00057 Line,
00058 Forward,
00059 };
00060
00061
00062
00063
00064 public:
00068 static void setZeroVectorTolerance(float tolerance);
00069
00072 static float getZeroVectorTolerance();
00073
00074
00075
00076
00077 public:
00083 explicit Arrow(sf::Vector2f position = sf::Vector2f(), sf::Vector2f direction = sf::Vector2f(),
00084 const sf::Color& color = sf::Color::White, float thickness = 3.f);
00085
00088 void setDirection(sf::Vector2f direction);
00089
00092 void setDirection(float dirX, float dirY);
00093
00096 sf::Vector2f getDirection() const;
00097
00100 void setThickness(float thickness);
00101
00104 float getThickness() const;
00105
00108 void setColor(const sf::Color& color);
00109
00112 sf::Color getColor() const;
00113
00116 void setStyle(Style style);
00117
00120 Style getStyle() const;
00121
00122
00123
00124
00125 private:
00126 float getTriangleHeight() const;
00127 void adaptLine() const;
00128 void adaptTriangle() const;
00129 void draw(sf::RenderTarget& target, sf::RenderStates states) const;
00130
00131
00132
00133
00134 private:
00135 float mThickness;
00136 float mLength;
00137 sf::Vector2f mDirection;
00138 sf::Color mColor;
00139 Style mStyle;
00140
00141 mutable bool mNeedsShapeUpdate;
00142 mutable sf::ConvexShape mLine;
00143 mutable sf::ConvexShape mTriangle;
00144
00145 static float zeroVectorTolerance;
00146
00147 };
00148
00150
00151 }
00152
00153 #endif // THOR_ARROW_HPP