CUGL 2.0
Cornell University Game Library
Public Member Functions | Static Public Member Functions | Static Protected Attributes | List of all members
cugl::scene2::PolygonNode Class Reference

#include <CUPolygonNode.h>

Inheritance diagram for cugl::scene2::PolygonNode:
cugl::scene2::TexturedNode cugl::scene2::SceneNode cugl::scene2::AnimationNode

Public Member Functions

 PolygonNode ()
 
 ~PolygonNode ()
 
virtual void setPolygon (const std::vector< Vec2 > &vertices) override
 
virtual void setPolygon (const Poly2 &poly) override
 
virtual void setPolygon (const Rect rect) override
 
virtual void draw (const std::shared_ptr< SpriteBatch > &batch, const Mat4 &transform, Color4 tint) override
 
- Public Member Functions inherited from cugl::scene2::TexturedNode
 TexturedNode ()
 
 ~TexturedNode ()
 
virtual void dispose () override
 
virtual bool init () override
 
bool init (const std::vector< Vec2 > &vertices)
 
bool init (const Poly2 &poly)
 
bool init (const Rect rect)
 
bool initWithFile (const std::string &filename)
 
bool initWithFile (const std::string &filename, const std::vector< Vec2 > &vertices)
 
bool initWithFile (const std::string &filename, const Poly2 &poly)
 
bool initWithFile (const std::string &filename, const Rect rect)
 
bool initWithTexture (const std::shared_ptr< Texture > &texture)
 
bool initWithTexture (const std::shared_ptr< Texture > &texture, const std::vector< Vec2 > &vertices)
 
bool initWithTexture (const std::shared_ptr< Texture > &texture, const Poly2 &poly)
 
bool initWithTexture (const std::shared_ptr< Texture > &texture, const Rect rect)
 
virtual bool initWithData (const Scene2Loader *loader, const std::shared_ptr< JsonValue > &data) 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 Poly2getPolygon () const
 
virtual void shiftPolygon (float dx, float dy)
 
const Rect getBoundingRect () const
 
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 setContentSize (const Size size) override
 
virtual void setContentSize (float width, float height) override
 
void refresh ()
 
const std::shared_ptr< Gradient > & getGradient () const
 
void setGradient (const std::shared_ptr< Gradient > &gradient)
 
- 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)
 
bool initWithBounds (float width, float height)
 
virtual bool initWithBounds (const Rect rect)
 
bool initWithBounds (float x, float y, float width, float height)
 
virtual SceneNodecopy (SceneNode *dst)
 
unsigned int getTag () const
 
void setTag (unsigned int tag)
 
const std::string & getName () const
 
void setName (const std::string &name)
 
 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)
 
Size getSize () const
 
float getWidth () const
 
float getHeight () const
 
Rect getBoundingBox () const
 
void setAnchor (float x, float y)
 
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 ()
 
void setRelativeColor (bool flag)
 
std::shared_ptr< ScissorgetScissor () 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 Mat4getAlternateTransform ()
 
void setAlternateTransform (const Mat4 &transform)
 
bool withAlternateTransform ()
 
void chooseAlternateTransform (bool active)
 
const Mat4getNodeToParentTransform () const
 
Mat4 getParentToNodeTransform () const
 
Mat4 getNodeToWorldTransform () const
 
Mat4 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
 
void setZOrder (int z)
 
int getZOrder () const
 
bool isZDirty () const
 
void sortZOrder ()
 
size_t getChildCount () const
 
std::shared_ptr< SceneNodegetChild (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< SceneNodegetChildByTag (unsigned int tag) const
 
template<typename T >
std::shared_ptr< T > getChildByTag (unsigned int tag) const
 
std::shared_ptr< SceneNodegetChildByName (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 (std::shared_ptr< SceneNode > child)
 
virtual void addChild (const std::shared_ptr< SceneNode > &child, int zval)
 
void addChildWithTag (const std::shared_ptr< SceneNode > &child, unsigned int tag)
 
void addChildWithTag (const std::shared_ptr< SceneNode > &child, unsigned int tag, int zval)
 
void addChildWithName (const std::shared_ptr< SceneNode > &child, const std::string &name)
 
void addChildWithName (const std::shared_ptr< SceneNode > &child, const std::string &name, int zval)
 
void swapChild (const std::shared_ptr< SceneNode > &child1, const std::shared_ptr< SceneNode > &child2, bool inherit=false)
 
SceneNodegetParent ()
 
const SceneNodegetParent () const
 
Scene2getScene ()
 
const Scene2getScene () 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 ()
 
virtual void render (const std::shared_ptr< SpriteBatch > &batch, const Mat4 &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< PolygonNodealloc ()
 
static std::shared_ptr< PolygonNodealloc (const std::vector< Vec2 > &vertices)
 
static std::shared_ptr< PolygonNodealloc (const Poly2 &poly)
 
static std::shared_ptr< PolygonNodealloc (const Rect rect)
 
static std::shared_ptr< PolygonNodeallocWithFile (const std::string &filename)
 
static std::shared_ptr< PolygonNodeallocWithFile (const std::string &filename, const std::vector< Vec2 > &vertices)
 
static std::shared_ptr< PolygonNodeallocWithFile (const std::string &filename, const Poly2 &poly)
 
static std::shared_ptr< PolygonNodeallocWithFile (const std::string &filename, const Rect rect)
 
static std::shared_ptr< PolygonNodeallocWithTexture (const std::shared_ptr< Texture > &texture)
 
static std::shared_ptr< PolygonNodeallocWithTexture (const std::shared_ptr< Texture > &texture, const std::vector< Vec2 > &vertices)
 
static std::shared_ptr< PolygonNodeallocWithTexture (const std::shared_ptr< Texture > &texture, const Poly2 &poly)
 
static std::shared_ptr< PolygonNodeallocWithTexture (const std::shared_ptr< Texture > &texture, const Rect rect)
 
static std::shared_ptr< SceneNodeallocWithData (const Scene2Loader *loader, const std::shared_ptr< JsonValue > &data)
 
- Static Public Member Functions inherited from cugl::scene2::SceneNode
static std::shared_ptr< SceneNodealloc ()
 
static std::shared_ptr< SceneNodeallocWithPosition (const Vec2 pos)
 
static std::shared_ptr< SceneNodeallocWithPosition (float x, float y)
 
static std::shared_ptr< SceneNodeallocWithBounds (const Size size)
 
static std::shared_ptr< SceneNodeallocWithBounds (float width, float height)
 
static std::shared_ptr< SceneNodeallocWithBounds (const Rect rect)
 
static std::shared_ptr< SceneNodeallocWithBounds (float x, float y, float width, float height)
 
static std::shared_ptr< SceneNodeallocWithData (const Scene2Loader *loader, const std::shared_ptr< JsonValue > &data)
 

Static Protected Attributes

static SimpleTriangulator _triangulator
 

Additional Inherited Members

- Protected Member Functions inherited from cugl::scene2::TexturedNode
virtual void generateRenderData ()
 
void clearRenderData ()
 
void updateTextureCoords ()
 
 CU_DISALLOW_COPY_AND_ASSIGN (TexturedNode)
 
- Protected Attributes inherited from cugl::scene2::TexturedNode
std::string _classname
 
std::shared_ptr< Texture_texture
 
Poly2 _polygon
 
bool _absolute
 
bool _stretch
 
bool _rendered
 
Mesh< SpriteVertex2_mesh
 
GLenum _blendEquation
 
GLenum _srcFactor
 
GLenum _dstFactor
 
bool _flipHorizontal
 
bool _flipVertical
 
std::shared_ptr< Gradient_gradient
 
std::shared_ptr< Gradient_spriteGrad
 
- 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
 
Mat4 _transform
 
bool _useTransform
 
Mat4 _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
 
int _zOrder
 
bool _zDirty
 
std::shared_ptr< JsonValue_json
 

Detailed Description

This is a scene graph node representing a solid 2D polygon textured by a sprite.

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 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.

Constructor & Destructor Documentation

◆ PolygonNode()

cugl::scene2::PolygonNode::PolygonNode ( )
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.

◆ ~PolygonNode()

cugl::scene2::PolygonNode::~PolygonNode ( )
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.

Member Function Documentation

◆ alloc() [1/4]

static std::shared_ptr<PolygonNode> cugl::scene2::PolygonNode::alloc ( )
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.

Returns
an empty polygon with the degenerate texture.

◆ alloc() [2/4]

static std::shared_ptr<PolygonNode> cugl::scene2::PolygonNode::alloc ( const Poly2 poly)
inlinestatic

Returns a solid polygon 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.

Parameters
polyThe polygon to texture
Returns
a solid polygon given polygon shape.

◆ alloc() [3/4]

static std::shared_ptr<PolygonNode> cugl::scene2::PolygonNode::alloc ( const Rect  rect)
inlinestatic

Returns a solid polygon 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 converted into a Poly2, using the standard (solid) triangulation. This is the same as passing Poly2(rect,true).

Parameters
rectThe rectangle to texture
Returns
a solid polygon with the given rect.

◆ alloc() [4/4]

static std::shared_ptr<PolygonNode> cugl::scene2::PolygonNode::alloc ( const std::vector< Vec2 > &  vertices)
inlinestatic

Returns a solid polygon 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 polygon will be triangulated using the rules of SimpleTriangulator. All PolygonNode objects share a single triangulator, so this allocator is not thread safe.

Parameters
verticesThe vertices to texture (expressed in image space)
Returns
a solid polygon with the given vertices.

◆ allocWithData()

static std::shared_ptr<SceneNode> cugl::scene2::PolygonNode::allocWithData ( const Scene2Loader loader,
const std::shared_ptr< JsonValue > &  data 
)
inlinestatic

Returns a newly allocated 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:

 "texture":  The name of a previously loaded texture asset
 "polygon":  An even array of polygon vertices (numbers)
 "indices":  An array of unsigned ints defining triangles from the
             the vertices. The array size should be a multiple of 3.

All attributes are optional. However, it is generally a good idea to specify EITHER the texture or the polygon

Parameters
loaderThe scene loader passing this JSON file
dataThe JSON object specifying the node
Returns
a newly allocated node with the given JSON specificaton.

◆ allocWithFile() [1/4]

static std::shared_ptr<PolygonNode> cugl::scene2::PolygonNode::allocWithFile ( const std::string &  filename)
inlinestatic

Returns a textured polygon from the image filename.

After creation, the polygon will be a rectangle. The vertices of this polygon will be the corners of the image.

Parameters
filenameA path to image file, e.g., "scene1/earthtile.png"
Returns
a textured polygon from the image filename.

◆ allocWithFile() [2/4]

static std::shared_ptr<PolygonNode> cugl::scene2::PolygonNode::allocWithFile ( const std::string &  filename,
const Poly2 poly 
)
inlinestatic

Returns a textured polygon from the image filename and the given polygon.

Parameters
filenameA path to image file, e.g., "scene1/earthtile.png"
polyThe polygon to texture
Returns
a textured polygon from the image filename and the given polygon.

◆ allocWithFile() [3/4]

static std::shared_ptr<PolygonNode> cugl::scene2::PolygonNode::allocWithFile ( const std::string &  filename,
const Rect  rect 
)
inlinestatic

Returns a textured polygon from the image filename and the given rect.

The rectangle will be converted into a Poly2, using the standard (solid) triangulation. This is the same as passing Poly2(rect,true).

Parameters
filenameA path to image file, e.g., "scene1/earthtile.png"
rectThe rectangle to texture
Returns
a textured polygon from the image filename and the given rect.

◆ allocWithFile() [4/4]

static std::shared_ptr<PolygonNode> cugl::scene2::PolygonNode::allocWithFile ( const std::string &  filename,
const std::vector< Vec2 > &  vertices 
)
inlinestatic

Returns a textured polygon from the image filename and the given vertices.

The polygon will be triangulated using the rules of SimpleTriangulator. All PolygonNode objects share a single triangulator, so this allocator is not thread safe.

Parameters
filenameA path to image file, e.g., "scene1/earthtile.png"
verticesThe vertices to texture (expressed in image space)
Returns
a textured polygon from the image filename and the given vertices.

◆ allocWithTexture() [1/4]

static std::shared_ptr<PolygonNode> cugl::scene2::PolygonNode::allocWithTexture ( const std::shared_ptr< Texture > &  texture)
inlinestatic

Returns a textured polygon from a Texture object.

After creation, the polygon will be a rectangle. The vertices of this polygon will be the corners of the texture.

Parameters
textureA shared pointer to a Texture object.
Returns
a textured polygon from a Texture object.

◆ allocWithTexture() [2/4]

static std::shared_ptr<PolygonNode> cugl::scene2::PolygonNode::allocWithTexture ( const std::shared_ptr< Texture > &  texture,
const Poly2 poly 
)
inlinestatic

Returns a textured polygon from a Texture object and the given polygon.

Parameters
textureA shared pointer to a Texture object.
polyThe polygon to texture
Returns
a textured polygon from a Texture object and the given polygon.

◆ allocWithTexture() [3/4]

static std::shared_ptr<PolygonNode> cugl::scene2::PolygonNode::allocWithTexture ( const std::shared_ptr< Texture > &  texture,
const Rect  rect 
)
inlinestatic

Returns a textured polygon from a Texture object and the given rect.

The rectangle will be converted into a Poly2, using the standard (solid) triangulation. This is the same as passing Poly2(rect,true).

Parameters
textureA shared pointer to a Texture object.
rectThe rectangle to texture
Returns
a textured polygon from a Texture object and the given rect.

◆ allocWithTexture() [4/4]

static std::shared_ptr<PolygonNode> cugl::scene2::PolygonNode::allocWithTexture ( const std::shared_ptr< Texture > &  texture,
const std::vector< Vec2 > &  vertices 
)
inlinestatic

Returns a textured polygon from a Texture object and the given vertices.

The polygon will be triangulated using the rules of SimpleTriangulator. All PolygonNode objects share a single triangulator, so this method is not thread safe.

Parameters
textureA shared pointer to a Texture object.
verticesThe vertices to texture (expressed in image space)
Returns
a textured polygon from a Texture object and the given vertices.

◆ draw()

virtual void cugl::scene2::PolygonNode::draw ( const std::shared_ptr< SpriteBatch > &  batch,
const Mat4 transform,
Color4  tint 
)
overridevirtual

Draws this Node via the given SpriteBatch.

This method only worries about drawing the current node. It does not attempt to render the children.

This is the method that you should override to implement your custom drawing code. You are welcome to use any OpenGL commands that you wish. You can even skip use of the SpriteBatch. However, if you do so, you must flush the SpriteBatch by calling end() at the start of the method. in addition, you should remember to call begin() at the start of the method.

This method provides the correct transformation matrix and tint color. You do not need to worry about whether the node uses relative color. This method is called by render() and these values are guaranteed to be correct. In addition, this method does not need to check for visibility, as it is guaranteed to only be called when the node is visible.

Parameters
batchThe SpriteBatch to draw with.
transformThe global transformation matrix.
tintThe tint to blend with the Node color.

Implements cugl::scene2::TexturedNode.

◆ setPolygon() [1/3]

virtual void cugl::scene2::PolygonNode::setPolygon ( const Poly2 poly)
overridevirtual

Sets the polygon to the given one in texture space.

This method confirms that the polygon is SOLID.

Parameters
polyThe polygon to texture

Reimplemented from cugl::scene2::TexturedNode.

◆ setPolygon() [2/3]

virtual void cugl::scene2::PolygonNode::setPolygon ( const Rect  rect)
overridevirtual

Sets the texture polygon to one equivalent to the given rect.

The rectangle will be converted into a Poly2, using the standard (solid) triangulation. This is the same as passing Poly2(rect,true). This will not size the image to fit the rectangle. Instead, it uses the rectangle to define the portion of the image that will be displayed.

Parameters
rectThe rectangle to texture

Implements cugl::scene2::TexturedNode.

◆ setPolygon() [3/3]

virtual void cugl::scene2::PolygonNode::setPolygon ( const std::vector< Vec2 > &  vertices)
overridevirtual

Sets the polgon to the vertices expressed in texture space.

The polygon will be triangulated using the rules of SimpleTriangulator. All PolygonNode objects share a single triangulator, so this method is not thread safe.

Parameters
verticesThe vertices to texture

Implements cugl::scene2::TexturedNode.

Member Data Documentation

◆ _triangulator

SimpleTriangulator cugl::scene2::PolygonNode::_triangulator
staticprotected

A triangulator for those incomplete polygons


The documentation for this class was generated from the following file: