|
| | Scene () |
| |
| | ~Scene () |
| |
| void | dispose () |
| |
| bool | init (const Size &size) |
| |
| bool | init (float width, float height) |
| |
| bool | init (const Rect &rect) |
| |
| bool | init (const Vec2 &origin, const Size &size) |
| |
| bool | init (float x, float y, float width, float height) |
| |
| const std::string & | getName () const |
| |
| void | setName (const std::string &name) |
| |
| std::shared_ptr< Camera > | getCamera () |
| |
| const std::shared_ptr< Camera > | getCamera () const |
| |
| Color4 | getColor () |
| |
| void | setColor (Color4 color) |
| |
| virtual std::string | toString (bool verbose=false) const |
| |
| | operator std::string () const |
| |
| void | setSize (const Size &size) |
| |
| void | setSize (float width, float height) |
| |
| void | setWidth (float width) |
| |
| void | setHeight (float height) |
| |
| void | setBounds (const Rect &rect) |
| |
| void | setBounds (const Vec2 &origin, const Size &size) |
| |
| void | setBounds (float x, float y, float width, float height) |
| |
| void | setOffset (const Vec2 &origin) |
| |
| Vec3 | screenToWorldCoords (const Vec2 &screenCoords) const |
| |
| Vec2 | worldToScreenCoords (const Vec3 &worldCoords) const |
| |
| size_t | getChildCount () const |
| |
| std::shared_ptr< Node > | getChild (unsigned int pos) |
| |
| const std::shared_ptr< Node > & | getChild (unsigned int pos) const |
| |
| template<typename T > |
| std::shared_ptr< T > | getChild (unsigned int pos) const |
| |
| std::shared_ptr< Node > | getChildByTag (unsigned int tag) const |
| |
| template<typename T > |
| std::shared_ptr< T > | getChildByTag (unsigned int tag) const |
| |
| std::shared_ptr< Node > | getChildByName (const std::string &name) const |
| |
| template<typename T > |
| std::shared_ptr< T > | getChildByName (const std::string &name) const |
| |
| std::vector< std::shared_ptr< Node > > | getChildren () |
| |
| const std::vector< std::shared_ptr< Node > > & | getChildren () const |
| |
| void | addChild (std::shared_ptr< Node > child) |
| |
| virtual void | addChild (const std::shared_ptr< Node > &child, int zval) |
| |
| void | addChildWithTag (const std::shared_ptr< Node > &child, unsigned int tag) |
| |
| void | addChildWithTag (const std::shared_ptr< Node > &child, unsigned int tag, int zval) |
| |
| void | addChildWithName (const std::shared_ptr< Node > &child, const std::string &name) |
| |
| void | addChildWithName (const std::shared_ptr< Node > &child, const std::string &name, int zval) |
| |
| void | swapChild (const std::shared_ptr< Node > &child1, const std::shared_ptr< Node > &child2, bool inherit=false) |
| |
| virtual void | removeChild (unsigned int pos) |
| |
| void | removeChild (const std::shared_ptr< Node > &child) |
| |
| void | removeChildByTag (unsigned int tag) |
| |
| void | removeChildByName (const std::string &name) |
| |
| virtual void | removeAllChildren () |
| |
| bool | isZAutoSort () |
| |
| void | setZAutoSort (bool value) |
| |
| bool | isZDirty () const |
| |
| void | sortZOrder () |
| |
| void | render (const std::shared_ptr< SpriteBatch > &batch) |
| |
This class provides the root node of a scene graph.
The Scene class is very similar to Node and shares many methods in common. The major differences are that it has no parent and it has no position (so it cannot be transformed). Instead, the Scene is defined by an attached OrthographicCamera.
Rendering happens by traversing the the scene graph using an "Pre-Order" tree traversal algorithm ( https://en.wikipedia.org/wiki/Tree_traversal#Pre-order ). That means that parents are always draw before (and behind children). The children of each sub tree are ordered by z-value (or by the order added).
| virtual void cugl::Scene::addChild |
( |
const std::shared_ptr< Node > & |
child, |
|
|
int |
zval |
|
) |
| |
|
virtual |
Adds a child to this scene with the given z-order.
Children are not necessarily enumerated in the order that they are added. For example, they may be resorted by their z-order. Hence you should generally attempt to retrieve a child by tag or by name instead.
The z-order overrides what z-value was previously in the child node.
- Parameters
-
| child | A child node. |
| zval | The (new) child z-order. |
| void cugl::Scene::addChildWithName |
( |
const std::shared_ptr< Node > & |
child, |
|
|
const std::string & |
name, |
|
|
int |
zval |
|
) |
| |
|
inline |
Adds a child to this scene with the given name and z-order
Children are not necessarily enumerated in the order that they are added. For example, they may be resorted by their z-order. Hence you should generally attempt to retrieve a child by tag or by name instead.
The z-order overrides what z-value was previously in the child node.
- Parameters
-
| child | A child node. |
| name | A string to identify the node. |
| zval | The (new) child z-order. |
| void cugl::Scene::addChildWithTag |
( |
const std::shared_ptr< Node > & |
child, |
|
|
unsigned int |
tag, |
|
|
int |
zval |
|
) |
| |
|
inline |
Adds a child to this scene with the given tag and z-order
Children are not necessarily enumerated in the order that they are added. For example, they may be resorted by their z-order. Hence you should generally attempt to retrieve a child by tag or by name instead.
The z-order overrides what z-value was previously in the child node.
- Parameters
-
| child | A child node. |
| tag | An integer to identify the node easily. |
| zval | The (new) child z-order. |
template<typename T >
| std::shared_ptr<T> cugl::Scene::getChild |
( |
unsigned int |
pos | ) |
const |
|
inline |
Returns the child at the given position, typecast to a shared T pointer.
This method is provided to simplify the polymorphism of a scene graph. While all children are a subclass of type Node, you may want to access them by their specific subclass. If the child is not an instance of type T (or a subclass), this method returns nullptr.
Children are not necessarily enumerated in the order that they are added. For example, they may be resorted by their z-order. Hence you should generally attempt to retrieve a child by tag or by name instead.
- Parameters
-
- Returns
- the child at the given position, typecast to a shared T pointer.
template<typename T >
| std::shared_ptr<T> cugl::Scene::getChildByName |
( |
const std::string & |
name | ) |
const |
|
inline |
Returns the (first) child with the given name, typecast to a shared T pointer.
This method is provided to simplify the polymorphism of a scene graph. While all children are a subclass of type Node, you may want to access them by their specific subclass. If the child is not an instance of type T (or a subclass), this method returns nullptr.
If there is more than one child of the given name, it returns the first one that is found. Children are not necessarily enumerated in the order that they are added. For example, they may be resorted by their z-order. Hence it is very important that names be unique.
- Parameters
-
| name | An identifier to find the child node. |
- Returns
- the (first) child with the given name, typecast to a shared T pointer.
template<typename T >
| std::shared_ptr<T> cugl::Scene::getChildByTag |
( |
unsigned int |
tag | ) |
const |
|
inline |
Returns the (first) child with the given tag, typecast to a shared T pointer.
This method is provided to simplify the polymorphism of a scene graph. While all children are a subclass of type Node, you may want to access them by their specific subclass. If the child is not an instance of type T (or a subclass), this method returns nullptr.
If there is more than one child of the given tag, it returns the first one that is found. Children are not necessarily enumerated in the order that they are added. For example, they may be resorted by their z-order. Hence it is very important that tags be unique.
- Parameters
-
| tag | An identifier to find the child node. |
- Returns
- the (first) child with the given tag, typecast to a shared T pointer.
| bool cugl::Scene::isZAutoSort |
( |
| ) |
|
|
inline |
Returns true if this scene automatically sorts children by z-value.
If this value is true, the scene graph will be resorted every time that render() is called. Because of our invariant with dirty nodes, sorting will be avoided if it is not necessary.
Sorting only happens automatically is this value it true. Otherwise, you will need to call sortZOrder() if you wish to guarantee that the sceen graph is in z-order.
- Returns
- true if this scene automatically sorts children by z-value.
| bool cugl::Scene::isZDirty |
( |
| ) |
const |
|
inline |
Returns whether the children of this Scene needs resorting.
The children of a scene may need to be resorted whenever a child is added, or whenever the z-value of a child is changed.
This value satisfies the following invariant: if a Node is dirty and needs resorting, then so are all of its ancestors (including this associated Scene). Our methods guarantee this invariant, so that the method isZDirty() always returns the correct value.
Sorting only happens automatically is isZAutoSort() it true. Otherwise, you will need to call sortZOrder() if you wish to guarantee that the sceen graph is in z-order.
- Returns
- whether the children of this node needs resorting.
| Vec3 cugl::Scene::screenToWorldCoords |
( |
const Vec2 & |
screenCoords | ) |
const |
|
inline |
Returns the world space equivalent of a point in screen coordinates.
Ideally, window space and screen space would be the same space. They are both defined by the viewport and have the same offset and dimension. However, screen coordinates have the origin in the top left while window coordinates have the origin in the bottom left.
In computing the world space coordinates, this method assumes that the z-value of the original vector is the same as near, which is the closest it can be the screen.
This method is important for converting event coordinates (such as a mouse click) to world coordinates.
- Parameters
-
| screenCoords | The point in screen coordinates |
- Returns
- the world space equivalent of a point in screen coordinates.
| void cugl::Scene::setZAutoSort |
( |
bool |
value | ) |
|
|
inline |
Sets whether this scene automatically sorts children by z-value.
If this value is true, the scene graph will be resorted every time that render() is called. Because of our invariant with dirty nodes, sorting will be avoided if it is not necessary.
Sorting only happens automatically is this value it true. Otherwise, you will need to call sortZOrder() if you wish to guarantee that the sceen graph is in z-order.
value Whether this scene automatically sorts children by z-value.
| void cugl::Scene::sortZOrder |
( |
| ) |
|
Resorts the children of this Scene according to z-value.
If two children have the same z-value, their relative order is preserved to what it was before the sort. This method should be called before rendering.
Resorting is done recursively down a tree for each child that is dirty and needs resorting. We guarantee that Nodes will not be resorted unless necessary, because of the following invariant: if a Node is dirty and needs resorting, then so are all of its ancestors (including this associated Scene).
Sorting only happens automatically is isZAutoSort() it true. Otherwise, you will need to call sortZOrder() if you wish to guarantee that the sceen graph is in z-order.
| Vec2 cugl::Scene::worldToScreenCoords |
( |
const Vec3 & |
worldCoords | ) |
const |
|
inline |
Returns the screen space equivalent of a point in world coordinates.
Ideally, window space and screen space would be the same space. They are both defined by the viewport and have the same offset and dimension. However, screen coordinates have the origin in the top left while window coordinates have the origin in the bottom left.
This method is important for converting world coordinates to event coordinates (such as a mouse click).
- Parameters
-
| worldCoords | The point in wprld coordinates |
- Returns
- the screen space equivalent of a point in world coordinates.