CUGL 2.0
Cornell University Game Library
|
#include <CUWireNode.h>
Public Member Functions | |
WireNode () | |
~WireNode () | |
bool | initWithTraversal (const Poly2 &poly, poly2::Traversal traversal) |
bool | initWithTraversal (const std::vector< Vec2 > &vertices, poly2::Traversal traversal) |
bool | initWithData (const Scene2Loader *loader, const std::shared_ptr< JsonValue > &data) override |
void | setTraversal (poly2::Traversal traversal) |
poly2::Traversal | getTraversal () const |
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) |
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 Poly2 & | getPolygon () 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 SceneNode * | copy (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< 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 Mat4 & | getAlternateTransform () |
void | setAlternateTransform (const Mat4 &transform) |
bool | withAlternateTransform () |
void | chooseAlternateTransform (bool active) |
const Mat4 & | getNodeToParentTransform () 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< 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 (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) |
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 () |
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< WireNode > | alloc () |
static std::shared_ptr< WireNode > | alloc (const std::vector< Vec2 > &vertices) |
static std::shared_ptr< WireNode > | alloc (const Poly2 &poly) |
static std::shared_ptr< WireNode > | alloc (const Rect rect) |
static std::shared_ptr< WireNode > | allocWithTraversal (const Poly2 &poly, poly2::Traversal traversal) |
static std::shared_ptr< WireNode > | allocWithTraversal (const std::vector< Vec2 > &vertices, poly2::Traversal traversal) |
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 | _source |
poly2::Traversal | _traversal |
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 |
Additional Inherited Members | |
Protected Member Functions inherited from cugl::scene2::TexturedNode | |
virtual void | generateRenderData () |
void | clearRenderData () |
void | updateTextureCoords () |
CU_DISALLOW_COPY_AND_ASSIGN (TexturedNode) | |
This is a scene graph node to represent a wireframe
The wireframes are lines, but they can still be textured. However, generally you will only want to create a wireframe with the degenerate texture (to draw a solid, colored line). Hence, none of the static constructors take a texture. You are free to update the texture after creation, if you wish.
The node shape is stored as polygon. The wireframe shape is determined by the polygon traversal. There are three options, defined in poly2::Traversal.
OPEN: The traversal is in order, but does not close the ends. CLOSED: The traversal is in order, and closes the ends. INTERIOR: The traverse will outline the default triangulation.
The default is traversal is CLOSED.
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 to 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.
You can disable these features at any time by setting the attribute absolute to true. Do 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 wireframe with the degenerate texture.
You must initialize this WireNode 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 wireframe node.
The underlying polygon is empty, and must be set via setPolygon.
Returns a wireframe with the given polygon.
The wireframe is a sequence of lines that is determined by the polygon indices (e.g. the traverals is None). To create a different traversal, use the alternate allocWithTraversal() constructor.
poly | The polygon for the wireframe path |
Creates a wireframe with the given rect.
The rectangle will be converted into a Poly2, and the traversal is CLOSED
.
rect | The rectangle for the wireframe path |
|
inlinestatic |
Returns a (closed) wireframe with the given vertices.
The polygon will be outlined using a CLOSED
traversal. To create a different traversal, use the alternate allocWithTraversal() constructor.
vertices | The vertices forming the wireframe path |
|
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) "traveral": One of 'open', 'closed', or 'interior' "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. If you specify the indices, then the traversal will be ignored.
loader | The scene loader passing this JSON file |
data | The JSON object specifying the node |
|
inlinestatic |
Returns a wireframe with the given source and traversal
The provided polygon will be used as the source for the traversal. The traversal will be defined exactly as the one provided by PolyFactory#makeTraversal. This constructor will fail on an interior traversal if the provided polygon is not SOLID
(e.g. does not have a triangulation).
poly | The triangulated polygon |
traversal | The path traversal for index generation |
|
inlinestatic |
Returns a (closed) wireframe with the given vertices.
The polygon will be defined as if it were a traversal on the implicit polygon with these vertices. An interior traversal will first cause the vertices to be triangulated using SimpleTriangulator.
vertices | The vertices forming the wireframe path |
traversal | The path traversal for index generation |
|
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.
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 current traversal of this path.
If the traversal is unknown (e.g. it is user-defined), this method returns NONE.
|
overridevirtual |
Initializes a 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) "traveral": One of 'open', 'closed', or 'interior' "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. If you specify the indices, then the traversal will be ignored.
loader | The scene loader passing this JSON file |
data | The JSON object specifying the node |
Reimplemented from cugl::scene2::TexturedNode.
bool cugl::scene2::WireNode::initWithTraversal | ( | const Poly2 & | poly, |
poly2::Traversal | traversal | ||
) |
Intializes a node with the given triangulation and traversal
The provided polygon will be used as the source for the traversal. The traversal will be defined exactly as the one provided by PolyFactory#makeTraversal. This constructor will fail on an interior traversal if the provided polygon is not SOLID
(e.g. does not have a triangulation).
You do not need to set the texture; rendering this into a SpriteBatch will simply use the blank texture. Hence the wireframe will have a solid color.
poly | The triangulated polygon |
traversal | The path traversal for index generation |
bool cugl::scene2::WireNode::initWithTraversal | ( | const std::vector< Vec2 > & | vertices, |
poly2::Traversal | traversal | ||
) |
Intializes a node with the given vertices and traversal
The polygon will be defined as if it were a traversal on the implicit polygon with these vertices. An interior traversal will first cause the vertices to be triangulated using SimpleTriangulator.
You do not need to set the texture; rendering this into a SpriteBatch will simply use the blank texture. Hence the wireframe will have a solid color.
vertices | The vertices to texture (expressed in image space) |
traversal | The path traversal for index generation |
|
overridevirtual |
Sets the wireframe polygon to the given one in texture space.
The provided polygon will be used as the source for the traversal. The traversal will be defined exactly as the one provided by PolyFactory#makeTraversal. This constructor will fail on an interior traversal if the provided polygon is not SOLID
(e.g. does not have a triangulation).
poly | The polygon to draw |
Reimplemented from cugl::scene2::TexturedNode.
|
overridevirtual |
Sets the wireframe polygon to one equivalent to the given rect.
The rectangle will be converted into a Poly2, using the current traversal method.
rect | The rectangle to draw |
Implements cugl::scene2::TexturedNode.
|
overridevirtual |
Sets the wireframe polgon to the vertices expressed in texture space.
The polygon will be defined as if it were a traversal on the implicit polygon with these vertices. An interior traversal will first cause the vertices to be triangulated using SimpleTriangulator.
vertices | The vertices to draw |
Implements cugl::scene2::TexturedNode.
void cugl::scene2::WireNode::setTraversal | ( | poly2::Traversal | traversal | ) |
Sets the traversal of this path.
If the traversal is different from the current known traversal, it will recompute the traveral using the PathOutliner. All WireNode objects share a single path outliner, so this method is not thread safe.
traversal | The new wireframe traversal |
|
protected |
The source polygon of this wire frame
|
protected |
The current (known) traversal of this wireframe