CUGL 2.1
Cornell University Game Library
|
#include <CUPolygonNode.h>
Public Member Functions | |
PolygonNode () | |
~PolygonNode () | |
bool | initWithPoly (const std::vector< Vec2 > &vertices) |
bool | initWithPoly (const Poly2 &poly) |
bool | initWithPoly (const Rect rect) |
virtual bool | initWithFile (const std::string &filename) override |
bool | initWithFilePoly (const std::string &filename, const std::vector< Vec2 > &vertices) |
bool | initWithFilePoly (const std::string &filename, const Poly2 &poly) |
bool | initWithFilePoly (const std::string &filename, const Rect rect) |
virtual bool | initWithTexture (const std::shared_ptr< Texture > &texture) override |
bool | initWithTexturePoly (const std::shared_ptr< Texture > &texture, const std::vector< Vec2 > &vertices) |
bool | initWithTexturePoly (const std::shared_ptr< Texture > &texture, const Poly2 &poly) |
bool | initWithTexturePoly (const std::shared_ptr< Texture > &texture, const Rect rect) |
virtual bool | initWithData (const Scene2Loader *loader, const std::shared_ptr< JsonValue > &data) override |
virtual std::shared_ptr< SceneNode > | copy (const std::shared_ptr< SceneNode > &dst) const override |
float | getFringe () const |
void | setFringe (float fringe) |
virtual void | setPolygon (const std::vector< Vec2 > &vertices) |
virtual void | setPolygon (const Poly2 &poly) |
virtual void | setPolygon (const Rect rect) |
const Poly2 & | getPolygon () const |
const Rect | getBoundingRect () const |
virtual void | draw (const std::shared_ptr< SpriteBatch > &batch, const Affine2 &transform, Color4 tint) override |
Public Member Functions inherited from cugl::scene2::TexturedNode | |
TexturedNode () | |
~TexturedNode () | |
virtual void | dispose () override |
virtual bool | init () override |
void | setTexture (const std::string &filename) |
void | setTexture (const std::shared_ptr< Texture > &texture) |
std::shared_ptr< Texture > & | getTexture () |
const std::shared_ptr< Texture > & | getTexture () const |
const std::shared_ptr< Gradient > & | getGradient () const |
void | setGradient (const std::shared_ptr< Gradient > &gradient) |
void | shiftTexture (float dx, float dy) |
void | setBlendFunc (GLenum srcFactor, GLenum dstFactor) |
GLenum | getSourceBlendFactor () const |
GLenum | getDestinationBlendFactor () const |
void | setBlendEquation (GLenum equation) |
GLenum | getBlendEquation () const |
void | flipHorizontal (bool flag) |
bool | isFlipHorizontal () const |
void | flipVertical (bool flag) |
bool | isFlipVertical () const |
virtual std::string | toString (bool verbose=false) const override |
bool | isAbsolute () const |
void | setAbsolute (bool flag) |
virtual void | setAnchor (const Vec2 anchor) override |
virtual void | setAnchor (float x, float y) override |
virtual void | setContentSize (const Size size) override |
virtual void | setContentSize (float width, float height) override |
void | refresh () |
Public Member Functions inherited from cugl::scene2::SceneNode | |
SceneNode () | |
~SceneNode () | |
virtual bool | initWithPosition (const Vec2 pos) |
bool | initWithPosition (float x, float y) |
virtual bool | initWithBounds (const Size size) |
virtual bool | initWithBounds (float width, float height) |
virtual bool | initWithBounds (const Rect rect) |
virtual bool | initWithBounds (float x, float y, float width, float height) |
unsigned int | getTag () const |
void | setTag (unsigned int tag) |
const std::string | getName () const |
void | setName (const std::string name) |
const std::string | getClassName () const |
operator std::string () const | |
const Vec2 | getPosition () const |
void | setPosition (const Vec2 &position) |
void | setPosition (float x, float y) |
float | getPositionX (void) const |
void | setPositionX (float x) |
float | getPositionY (void) const |
void | setPositionY (float y) |
Vec2 | getWorldPosition () const |
const Size | getContentSize () const |
float | getContentWidth () const |
void | setContentWidth (float width) |
float | getContentHeight () const |
void | setContentHeight (float height) |
virtual Rect | getLayoutBounds () const |
Size | getSize () const |
float | getWidth () const |
float | getHeight () const |
Rect | getBoundingBox () const |
const Vec2 | getAnchor () const |
Vec2 | getAnchorInPixels () |
Color4 | getColor () const |
virtual void | setColor (Color4 color) |
Color4 | getAbsoluteColor () |
bool | isVisible () const |
void | setVisible (bool visible) |
bool | hasRelativeColor () const |
void | setRelativeColor (bool flag) |
std::shared_ptr< Scissor > | getScissor () const |
void | setScissor (const std::shared_ptr< Scissor > &scissor) |
void | setScissor () |
const Vec2 | getScale () const |
float | getScaleX () const |
float | getScaleY () const |
void | setScale (float scale) |
void | setScale (const Vec2 vec) |
void | setScale (float sx, float sy) |
float | getAngle () |
void | setAngle (float angle) |
const Affine2 & | getTransform () const |
const Affine2 & | getAlternateTransform () const |
void | setAlternateTransform (const Affine2 &transform) |
bool | withAlternateTransform () |
void | chooseAlternateTransform (bool active) |
const Affine2 & | getNodeToParentTransform () const |
Affine2 | getParentToNodeTransform () const |
Affine2 | getNodeToWorldTransform () const |
Affine2 | getWorldToNodeTransform () const |
Vec2 | screenToNodeCoords (const Vec2 screenPoint) const |
Vec2 | worldToNodeCoords (const Vec2 worldPoint) const |
Vec2 | nodeToScreenCoords (const Vec2 nodePoint) const |
Vec2 | nodeToWorldCoords (const Vec2 nodePoint) const |
Vec2 | parentToNodeCoords (const Vec2 parentPoint) const |
Vec2 | nodeToParentCoords (const Vec2 nodePoint) const |
size_t | getChildCount () const |
std::shared_ptr< SceneNode > | getChild (unsigned int pos) |
const std::shared_ptr< SceneNode > & | getChild (unsigned int pos) const |
template<typename T > | |
std::shared_ptr< T > | getChild (unsigned int pos) const |
std::shared_ptr< SceneNode > | getChildByTag (unsigned int tag) const |
template<typename T > | |
std::shared_ptr< T > | getChildByTag (unsigned int tag) const |
std::shared_ptr< SceneNode > | getChildByName (const std::string name) const |
template<typename T > | |
std::shared_ptr< T > | getChildByName (const std::string name) const |
std::vector< std::shared_ptr< SceneNode > > | getChildren () |
const std::vector< std::shared_ptr< SceneNode > > & | getChildren () const |
void | addChild (const std::shared_ptr< SceneNode > &child) |
void | addChildWithTag (const std::shared_ptr< SceneNode > &child, unsigned int tag) |
void | addChildWithName (const std::shared_ptr< SceneNode > &child, const std::string name) |
void | swapChild (const std::shared_ptr< SceneNode > &child1, const std::shared_ptr< SceneNode > &child2, bool inherit=false) |
SceneNode * | getParent () |
const SceneNode * | getParent () const |
Scene2 * | getScene () |
const Scene2 * | getScene () const |
void | removeFromParent () |
virtual void | removeChild (unsigned int pos) |
void | removeChild (const std::shared_ptr< SceneNode > &child) |
void | removeChildByTag (unsigned int tag) |
void | removeChildByName (const std::string name) |
virtual void | removeAllChildren () |
void | setPriority (float priority) |
float | getPriority () |
virtual void | render (const std::shared_ptr< SpriteBatch > &batch, const Affine2 &transform, Color4 tint) |
virtual void | render (const std::shared_ptr< SpriteBatch > &batch) |
const std::shared_ptr< Layout > & | getLayout () const |
void | setLayout (const std::shared_ptr< Layout > &layout) |
virtual void | doLayout () |
Static Public Member Functions | |
static std::shared_ptr< PolygonNode > | alloc () |
static std::shared_ptr< PolygonNode > | allocWithPoly (const std::vector< Vec2 > &vertices) |
static std::shared_ptr< PolygonNode > | allocWithPoly (const Poly2 &poly) |
static std::shared_ptr< PolygonNode > | allocWithPoly (const Rect rect) |
static std::shared_ptr< PolygonNode > | allocWithFile (const std::string &filename) |
static std::shared_ptr< PolygonNode > | allocWithFilePoly (const std::string &filename, const std::vector< Vec2 > &vertices) |
static std::shared_ptr< PolygonNode > | allocWithFilePoly (const std::string &filename, const Poly2 &poly) |
static std::shared_ptr< PolygonNode > | allocWithFilePoly (const std::string &filename, const Rect rect) |
static std::shared_ptr< PolygonNode > | allocWithTexture (const std::shared_ptr< Texture > &texture) |
static std::shared_ptr< PolygonNode > | allocWithTexture (const std::shared_ptr< Texture > &texture, const std::vector< Vec2 > &vertices) |
static std::shared_ptr< PolygonNode > | allocWithTexture (const std::shared_ptr< Texture > &texture, const Poly2 &poly) |
static std::shared_ptr< PolygonNode > | allocWithTexture (const std::shared_ptr< Texture > &texture, const Rect rect) |
static std::shared_ptr< SceneNode > | allocWithData (const Scene2Loader *loader, const std::shared_ptr< JsonValue > &data) |
Static Public Member Functions inherited from cugl::scene2::SceneNode | |
static std::shared_ptr< SceneNode > | alloc () |
static std::shared_ptr< SceneNode > | allocWithPosition (const Vec2 pos) |
static std::shared_ptr< SceneNode > | allocWithPosition (float x, float y) |
static std::shared_ptr< SceneNode > | allocWithBounds (const Size size) |
static std::shared_ptr< SceneNode > | allocWithBounds (float width, float height) |
static std::shared_ptr< SceneNode > | allocWithBounds (const Rect rect) |
static std::shared_ptr< SceneNode > | allocWithBounds (float x, float y, float width, float height) |
static std::shared_ptr< SceneNode > | allocWithData (const Scene2Loader *loader, const std::shared_ptr< JsonValue > &data) |
Protected Attributes | |
Poly2 | _polygon |
float | _fringe |
Protected Attributes inherited from cugl::scene2::TexturedNode | |
std::shared_ptr< Texture > | _texture |
std::shared_ptr< Gradient > | _gradient |
bool | _absolute |
Vec2 | _offset |
bool | _rendered |
Mesh< SpriteVertex2 > | _mesh |
GLenum | _blendEquation |
GLenum | _srcFactor |
GLenum | _dstFactor |
bool | _flipHorizontal |
bool | _flipVertical |
Protected Attributes inherited from cugl::scene2::SceneNode | |
Vec2 | _position |
Vec2 | _anchor |
Size | _contentSize |
Color4 | _tintColor |
bool | _hasParentColor |
bool | _isVisible |
std::shared_ptr< Scissor > | _scissor |
Vec2 | _scale |
float | _angle |
Affine2 | _transform |
bool | _useTransform |
Affine2 | _combined |
std::vector< std::shared_ptr< SceneNode > > | _children |
SceneNode * | _parent |
Scene2 * | _graph |
std::shared_ptr< Layout > | _layout |
int | _childOffset |
unsigned int | _tag |
std::string | _name |
size_t | _hashOfName |
std::string | _classname |
float | _priority |
std::shared_ptr< JsonValue > | _json |
Additional Inherited Members | |
Protected Member Functions inherited from cugl::scene2::TexturedNode | |
void | clearRenderData () |
CU_DISALLOW_COPY_AND_ASSIGN (TexturedNode) | |
This is a scene graph node representing a textured solid 2D polygon.
The polygon is specified in image coordinates. Image coordinates are different from texture coordinates. Their origin is at the bottom-left corner of the file, and each pixel is one unit. This makes specifying a polygon more natural for irregular shapes.
This means that a polygon with vertices (0,0), (width,0), (width,height), and (0,height) would be identical to a sprite node. However, a polygon with vertices (0,0), (2*width,0), (2*width,2*height), and (0,2*height) would tile the sprite (given the wrap settings) twice both horizontally and vertically.
The content size of this node is defined by the size (but not the offset) of the bounding box. The anchor point is relative to this content size. The default anchor point in a TexturedNode is (0.5, 0.5). This means that a uniform translation of the polygon (in contrast to the node itself) will not move the shape on the the screen. Instead, it will just change the part of the texture it uses.
For example, suppose the texture has given width and height. We have one polygon with vertices (0,0), (width/2,0), (width/2,height/2), and (0,height/2). We have another polygon with vertices (width/2,height/2), (width,height/2), (width,height), and (width/2,height). Both polygons would create a rectangle of size (width/2,height/2). centered at the node position. However, the first would use the bottom left part of the texture, while the second would use the top right.
You can disable these features at any time by setting the attribute absolute to true. Doing this will place the polygon vertices in their absolute positions in Node space. This will also disable anchor functions (setting the anchor as the bottom left corner), since anchors do not make sense when we are drawing vertices directly into the coordinate space.
|
inline |
Creates an empty polygon with the degenerate texture.
You must initialize this PolygonNode before use.
NEVER USE A CONSTRUCTOR WITH NEW. If you want to allocate an object on the heap, use one of the static constructors instead.
|
inline |
Releases all resources allocated with this node.
This will release, but not necessarily delete the associated texture. However, the polygon and drawing commands will be deleted and no longer safe to use.
|
inlinestatic |
Returns an empty polygon with the degenerate texture.
You do not need to set the texture; rendering this into a SpriteBatch will simply use the blank texture. The polygon, however, will also be empty, and must be set via setPolygon.
|
inlinestatic |
Returns a new polygon node with the given JSON specificaton.
This initializer is designed to receive the "data" object from the JSON passed to Scene2Loader. This JSON format supports all of the attribute values of its parent class. In addition, it supports the following additional attributes:
"polygon": A JSON object defining a polygon. See {@link Poly2}. "fringe": A number indicating the size of the border fringe.
All attributes are optional. If the polygon is not specified, the node will use a rectangle with the dimensions of the texture. For more information, see TexturedNode#initWithData.
loader | The scene loader passing this JSON file |
data | The JSON object specifying the node |
|
inlinestatic |
Returns a new polygon node from the image filename.
After creation, the polygon will be a rectangle. The vertices of this polygon will be the corners of the image. The rectangle will be triangulated with the standard two triangles.
filename | A path to image file, e.g., "scene1/earthtile.png" |
|
inlinestatic |
Returns a new polygon node from the image filename and the given polygon.
The polygon will define the portion of the of the texture shown (in image space).
filename | A path to image file, e.g., "scene1/earthtile.png" |
poly | The polygon to texture |
|
inlinestatic |
Returns a new polygon node from the image filename and the given rect.
The vertices of the rectangle will define the portion of the texture shown (in image space). The rectangle will be triangulated with the standard two triangles.
filename | A path to image file, e.g., "scene1/earthtile.png" |
rect | The rectangle to texture |
|
inlinestatic |
Returns a new polygon node from the image filename and the given vertices.
The vertices will define the portion of the of the texture shown (in image space). The vertices will be triangulated with EarclipTriangulator.
filename | A path to image file, e.g., "scene1/earthtile.png" |
vertices | The vertices to texture (expressed in image space) |
|
inlinestatic |
Returns a new polygon node with the given shape.
You do not need to set the texture; rendering this into a SpriteBatch will simply use the blank texture. Hence the polygon will have a solid color.
poly | The polygon to texture |
|
inlinestatic |
Returns a new polygon node with the given rect.
You do not need to set the texture; rendering this into a SpriteBatch will simply use the blank texture. Hence the polygon will have a solid color.
The rectangle will be triangulated with the standard two triangles.
rect | The rectangle to texture |
|
inlinestatic |
Returns a new polygon node with the given vertices.
You do not need to set the texture; rendering this into a SpriteBatch will simply use the blank texture. Hence the polygon will have a solid color.
The vertices will be triangulated with EarclipTriangulator.
vertices | The vertices to texture (expressed in image space) |
|
inlinestatic |
Returns a new polygon node from a Texture object.
After creation, the polygon will be a rectangle. The vertices of this polygon will be the corners of the image. The rectangle will be triangulated with the standard two triangles.
texture | A shared pointer to a Texture object. |
|
inlinestatic |
Returns a new polygon node from a Texture object and the given polygon.
The polygon will define the portion of the of the texture shown (in image space).
texture | A shared pointer to a Texture object. |
poly | The polygon to texture |
|
inlinestatic |
Returns a new polygon node from a Texture object and the given rect.
The vertices of the rectangle will define the portion of the texture shown (in image space). The rectangle will be triangulated with the standard two triangles.
texture | A shared pointer to a Texture object. |
rect | The rectangle to texture |
|
inlinestatic |
Returns a new polygon node from a Texture object and the given vertices.
The vertices will define the portion of the of the texture shown (in image space). The vertices will be triangulated with EarclipTriangulator.
texture | A shared pointer to a Texture object. |
vertices | The vertices to texture (expressed in image space) |
|
overridevirtual |
Performs a shallow copy of this Node into dst.
No children from this node are copied, and no children of dst are modified. In addition, the parents of both Nodes are unchanged. However, all other attributes of this node are copied.
dst | The Node to copy into |
Reimplemented from cugl::scene2::TexturedNode.
Reimplemented in cugl::scene2::SpriteNode.
|
overridevirtual |
Draws this polygon node via the given SpriteBatch.
This method only worries about drawing the current node. It does not attempt to render the children.
batch | The SpriteBatch to draw with. |
transform | The global transformation matrix. |
tint | The tint to blend with the Node color. |
Implements cugl::scene2::TexturedNode.
|
inline |
Returns the rect of the Polygon in points
The bounding rect is the smallest rectangle containing all of the points in the polygon.
This value also defines the content size of the node. The polygon will be shifted so that its bounding rect is centered at the node center.
|
inline |
Returns the antialiasing fringe for this polygon node
If this value is non-zero, the node will surround the polygon with a stroke the width of the fringe. The stroke will fade to transparent on the outside edge. This is a way of providing antialiasing that is significantly better than multisampling. Furthermore, this works on OpenGLES, which does not support multisampling.
Creating a fringe does introduce significant overhead (tenths of a millisecond). The algorithm must detriangulate the polygon to find the borders and then extrude those borders. In addition, this effect is often unnecessary on retina/high-dpi displays. As a result, the default fringe value is 0.
A fringe value should be >= 0.5 to have noticeable effects. In practice, values between 1 and 2 work best.
|
inline |
Returns the texture polygon for this scene graph node
|
overridevirtual |
Initializes a polygon node with the given JSON specificaton.
This initializer is designed to receive the "data" object from the JSON passed to Scene2Loader. This JSON format supports all of the attribute values of its parent class. In addition, it supports the following additional attributes:
"polygon": A JSON object defining a polygon. See {@link Poly2}. "fringe": A number indicating the size of the border fringe.
All attributes are optional. If the polygon is not specified, the node will use a rectangle with the dimensions of the texture. For more information, see TexturedNode#initWithData.
loader | The scene loader passing this JSON file |
data | The JSON object specifying the node |
Reimplemented from cugl::scene2::TexturedNode.
Reimplemented in cugl::scene2::SpriteNode.
|
overridevirtual |
Intializes a polygon node from the image filename.
After creation, the polygon will be a rectangle. The vertices of this polygon will be the corners of the image. The rectangle will be triangulated with the standard two triangles.
filename | A path to image file, e.g., "scene1/earthtile.png" |
Reimplemented from cugl::scene2::TexturedNode.
|
inline |
Initializes a polygon node from the image filename and the given polygon.
The polygon will define the portion of the of the texture shown (in image space).
filename | A path to image file, e.g., "scene1/earthtile.png" |
poly | The polygon to texture |
|
inline |
Initializes a polygon node from the image filename and the given rect.
The vertices of the rectangle will define the portion of the texture shown (in image space). The rectangle will be triangulated with the standard two triangles.
filename | A path to image file, e.g., "scene1/earthtile.png" |
rect | The rectangle to texture |
|
inline |
Initializes a polygon node from the image filename and the given vertices.
The vertices will define the portion of the of the texture shown (in image space). The vertices will be triangulated with EarclipTriangulator.
filename | A path to image file, e.g., "scene1/earthtile.png" |
vertices | The vertices to texture (expressed in image space) |
|
inline |
Intializes a polygon node given polygon shape.
You do not need to set the texture; rendering this into a SpriteBatch will simply use the blank texture. Hence the polygon will have a solid color.
poly | The polygon to texture |
|
inline |
Intializes a polygon node with the given rect.
You do not need to set the texture; rendering this into a SpriteBatch will simply use the blank texture. Hence the polygon will have a solid color.
The rectangle will be triangulated with the standard two triangles.
rect | The rectangle to texture |
|
inline |
Intializes a polygon node with the given vertices.
You do not need to set the texture; rendering this into a SpriteBatch will simply use the blank texture. Hence the polygon will have a solid color.
The vertices will be triangulated with EarclipTriangulator.
vertices | The vertices to texture (expressed in image space) |
|
overridevirtual |
Initializes a polygon node from a Texture object.
After creation, the polygon will be a rectangle. The vertices of this polygon will be the corners of the image. The rectangle will be triangulated with the standard two triangles.
texture | A shared pointer to a Texture object. |
Reimplemented from cugl::scene2::TexturedNode.
|
inline |
Initializes a polygon node from a Texture object and the given polygon.
The polygon will define the portion of the of the texture shown (in image space).
texture | A shared pointer to a Texture object. |
poly | The polygon to texture |
|
inline |
Initializes a polygon node from a Texture object and the given rect.
The vertices of the rectangle will define the portion of the texture shown (in image space). The rectangle will be triangulated with the standard two triangles.
texture | A shared pointer to a Texture object. |
rect | The rectangle to texture |
|
inline |
Initializes a polygon node from a Texture object and the given vertices.
The vertices will define the portion of the of the texture shown (in image space). The vertices will be triangulated with EarclipTriangulator.
texture | A shared pointer to a Texture object. |
vertices | The vertices to texture (expressed in image space) |
|
inline |
Sets the antialiasing fringe for this polygon node
If this value is non-zero, the node will surround the polygon with a stroke the width of the fringe. The stroke will fade to transparent on the outside edge. This is a way of providing antialiasing that is significantly better than multisampling. Furthermore, this works on OpenGLES, which does not support multisampling.
Creating a fringe does introduce significant overhead (tenths of a millisecond). The algorithm must detriangulate the polygon to find the borders and then extrude those borders. In addition, this effect is often unnecessary on retina/high-dpi displays. As a result, the default fringe value is 0.
A fringe value should be >= 0.5 to have noticeable effects. In practice, values between 1 and 2 work best.
fringe | The antialiasing fringe for this polygon node |
|
virtual |
Sets the polygon to the given one in texture space.
poly | The polygon to texture |
|
virtual |
Sets the texture polygon to one equivalent to the given rect.
The rectangle will be triangulated with the standard two triangles.
rect | The rectangle to texture |
|
virtual |
Sets the polgon to the vertices expressed in texture space.
The vertices will be triangulated with EarclipTriangulator.
vertices | The vertices to texture |
|
protected |
The border fringe for the mesh
|
protected |
The underlying polygon