nCine  2025.04.r498-9d36345
A cross-platform 2D game engine
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | List of all members
ncine::SceneNode Class Reference

The base class for the transformation nodes hierarchy. More...

#include <SceneNode.h>

Inheritance diagram for ncine::SceneNode:
Inheritance graph
[legend]
Collaboration diagram for ncine::SceneNode:
Collaboration graph
[legend]

Public Types

enum class  VisitOrderState { ENABLED , DISABLED , SAME_AS_PARENT }
 
- Public Types inherited from ncine::Object
enum class  ObjectType {
  BASE = 0 , TEXTURE , SHADER , SCENENODE ,
  SPRITE , MESH_SPRITE , ANIMATED_SPRITE , PARTICLE ,
  PARTICLE_SYSTEM , FONT , TEXTNODE , AUDIOBUFFER ,
  AUDIOBUFFER_PLAYER , AUDIOSTREAM_PLAYER
}
 Object types.
 

Public Member Functions

 SceneNode (SceneNode *parent, float x, float y)
 Constructor for a node with a parent and a specified relative position. More...
 
 SceneNode (SceneNode *parent, const Vector2f &position)
 Constructor for a node with a parent and a specified relative position as a vector. More...
 
 SceneNode (SceneNode *parent)
 Constructor for a node with a parent and positioned in the relative origin. More...
 
 SceneNode ()
 Constructor for a node with no parent and positioned in the origin.
 
 ~SceneNode () override
 The destructor will delete every child node.
 
 SceneNode (SceneNode &&other)
 Move constructor.
 
SceneNodeoperator= (SceneNode &&other)
 Move assignment operator.
 
SceneNode clone () const
 Returns a copy of this object.
 
const SceneNodeparent () const
 Returns the parent as a constant node, if there is any.
 
SceneNodeparent ()
 Returns the parent node, if there is any.
 
bool setParent (SceneNode *parentNode)
 Sets the parent node. More...
 
const nctl::Array< SceneNode * > & children ()
 Returns the array of child nodes.
 
const nctl::Array< const SceneNode * > & children () const
 Returns an array of constant child nodes.
 
bool addChildNode (SceneNode *childNode)
 Adds a node as a child of this one. More...
 
bool removeChildNode (SceneNode *childNode)
 Removes a child of this node, without reparenting nephews. More...
 
bool removeChildNodeAt (unsigned int index)
 Removes the child at the specified index, without reparenting nephews. More...
 
bool removeAllChildrenNodes ()
 Removes all children, without reparenting nephews. More...
 
bool unlinkChildNode (SceneNode *childNode)
 Removes a child of this node reparenting nephews as children. More...
 
unsigned int childOrderIndex () const
 Returns the child order index of this node or zero if it does not have a parent. More...
 
bool swapChildrenNodes (unsigned int firstIndex, unsigned int secondIndex)
 Swaps two children at the specified indices. More...
 
bool swapNodeForward ()
 Brings this node one node forward in the parent's list of children. More...
 
bool swapNodeBack ()
 Brings this node one node back in the parent's list of children. More...
 
enum VisitOrderState visitOrderState () const
 Returns true if the node visit order is used together with the layer.
 
void setVisitOrderState (enum VisitOrderState visitOrderState)
 Enables the use of the node visit order together with the layer.
 
uint16_t visitOrderIndex () const
 Returns the visit drawing order of the node.
 
virtual void update (float frameTime)
 Called once every frame to update the node. More...
 
virtual void visit (RenderQueue &renderQueue, unsigned int &visitOrderIndex)
 Draws the node and visits its children.
 
virtual bool draw (RenderQueue &renderQueue)
 Renders the node.
 
bool isUpdateEnabled () const
 Returns true if the node is updating.
 
void setUpdateEnabled (bool updateEnabled)
 Enables or disables node updating.
 
bool isDrawEnabled () const
 Returns true if the node is drawing.
 
void setDrawEnabled (bool drawEnabled)
 Enables or disables node drawing.
 
bool isEnabled () const
 Returns true if the node is both updating and drawing.
 
void setEnabled (bool isEnabled)
 Enables or disables both node updating and drawing.
 
Vector2f position () const
 Returns node position relative to its parent.
 
Vector2f absPosition () const
 Returns absolute node position.
 
void setPosition (float x, float y)
 Sets the node position through two coordinates.
 
void setPosition (const Vector2f &position)
 Sets the node position through a vector.
 
void setPositionX (float x)
 Sets the X coordinate of the node position.
 
void setPositionY (float y)
 Sets the Y coordinate of the node position.
 
void move (float x, float y)
 Moves the node based on two offsets.
 
void move (const Vector2f &position)
 Adds a move vector to the node current position.
 
void moveX (float x)
 Moves the node by an offset on the X axis.
 
void moveY (float y)
 Moves the node by an offset on the Y axis.
 
Vector2f absAnchorPoint () const
 Gets the absolute transformation anchor point in pixels.
 
void setAbsAnchorPoint (float x, float y)
 Sets the absolute transformation anchor point in pixels.
 
void setAbsAnchorPoint (const Vector2f &point)
 Sets the absolute transformation anchor point in pixels with a Vector2f
 
const Vector2fscale () const
 Gets the node scale factors.
 
const Vector2fabsScale () const
 Gets the node absolute scale factors.
 
void setScale (float scaleFactor)
 Scales the node size both horizontally and vertically.
 
void setScale (float scaleFactorX, float scaleFactorY)
 Scales the node size both horizontally and vertically.
 
void setScale (const Vector2f &scaleFactor)
 Scales the node size both horizontally and vertically with a Vector2f
 
float rotation () const
 Gets the node rotation in degrees.
 
float absRotation () const
 Gets the node absolute rotation in degrees.
 
void setRotation (float rotation)
 Sets the node rotation in degrees.
 
Color color () const
 Gets the node color.
 
Color absColor () const
 Gets the node absolute color.
 
void setColor (Color color)
 Sets the node color through a Color object.
 
void setColorF (Colorf color)
 Sets the node color through a Colorf object.
 
void setColor (unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha)
 Sets the node color through unsigned char components.
 
void setColorF (float red, float green, float blue, float alpha)
 Sets the node color through float components.
 
unsigned char alpha () const
 Gets the node alpha.
 
unsigned char absAlpha () const
 Gets the node absolute alpha.
 
void setAlpha (unsigned char alpha)
 Sets the node alpha through an unsigned char component.
 
void setAlphaF (float alpha)
 Sets the node alpha through a float component.
 
uint16_t layer () const
 Gets the node rendering layer.
 
uint16_t absLayer () const
 Gets the node absolute rendering layer. More...
 
void setLayer (uint16_t layer)
 Sets the node rendering layer. More...
 
const Matrix4x4fworldMatrix () const
 Gets the node world matrix.
 
void setWorldMatrix (const Matrix4x4f &worldMatrix)
 Sets the node world matrix (only useful when called inside onPostUpdate())
 
const Matrix4x4flocalMatrix () const
 Gets the node local matrix.
 
void setLocalMatrix (const Matrix4x4f &localMatrix)
 Sets the node local matrix.
 
bool deleteChildrenOnDestruction () const
 Gets the delete children on destruction flag. More...
 
void setDeleteChildrenOnDestruction (bool shouldDeleteChildrenOnDestruction)
 Sets the delete children on destruction flag.
 
unsigned long int lastFrameUpdated () const
 Returns the last frame in which any of the viewports have updated this node.
 
- Public Member Functions inherited from ncine::Object
 Object (ObjectType type)
 Constructs an object with a specified type and adds it to the index.
 
 Object (ObjectType type, const char *name)
 Constructs an object with a specified type and name and adds it to the index.
 
virtual ~Object ()
 Removes an object from the index and then destroys it.
 
 Object (Object &&other)
 Move constructor.
 
Objectoperator= (Object &&other)
 Move assignment operator.
 
unsigned int id () const
 Returns the object identification number.
 
ObjectType type () const
 Returns the object type (RTTI)
 
const char * name () const
 Returns the object name.
 
void setName (const char *name)
 Sets the object name.
 

Static Public Member Functions

static ObjectType sType ()
 
- Static Public Member Functions inherited from ncine::Object
static ObjectType sType ()
 Static method to return class type.
 
template<class T >
static T * fromId (unsigned int id)
 Returns a casted pointer to the object with the specified id, if any exists.
 

Static Public Attributes

static const float MinRotation = 0.5f
 The minimum amount of rotation to trigger a sine and cosine calculation.
 
- Static Public Attributes inherited from ncine::Object
static const unsigned int MaxNameLength = 128
 Maximum length for an object name.
 

Protected Types

enum  DirtyBitPositions {
  TransformationBit = 0 , ColorBit = 1 , SizeBit = 2 , TextureBit = 3 ,
  AabbBit = 4 , TransformationUploadBit = 5 , ColorUploadBit = 6
}
 Bit positions inside the dirty bitset.
 

Protected Member Functions

SceneNodeoperator= (const SceneNode &)=delete
 Deleted assignment operator.
 
 SceneNode (const SceneNode &other)
 Protected copy constructor used to clone objects.
 
void swapChildPointer (SceneNode *first, SceneNode *second)
 Swaps the child pointer of a parent when moving an object. More...
 
virtual void transform ()
 
- Protected Member Functions inherited from ncine::Object
 Object (const Object &other)
 Protected copy constructor used to clone objects.
 

Protected Attributes

bool updateEnabled_
 
bool drawEnabled_
 
SceneNodeparent_
 A pointer to the parent node.
 
nctl::Array< SceneNode * > children_
 The array of child nodes.
 
unsigned int childOrderIndex_
 The order index of this node among its siblings. More...
 
bool withVisitOrder_
 When enabled the visit order is used to resolve the drawing order of same layer nodes. More...
 
enum VisitOrderState visitOrderState_
 The visit order state of this node.
 
uint16_t visitOrderIndex_
 The visit order index of this node.
 
Vector2f position_
 The node relative position.
 
Vector2f anchorPoint_
 
Vector2f scaleFactor_
 Horizontal and vertical scale factors for node size.
 
float rotation_
 Degrees for clock-wise node rotation in degrees.
 
Color color_
 Node color for transparency and translucency. More...
 
uint16_t layer_
 The node rendering layer. More...
 
Vector2f absPosition_
 Absolute position as calculated by the transform() function.
 
Vector2f absScaleFactor_
 Absolute horizontal and vertical scale factors as calculated by the transform() function.
 
float absRotation_
 Absolute node rotation as calculated by the transform() function.
 
Color absColor_
 Absolute node color as calculated by the transform() function.
 
uint16_t absLayer_
 Absolute node rendering layer as calculated by the transform() function.
 
Matrix4x4f worldMatrix_
 World transformation matrix (calculated from local and parent's world)
 
Matrix4x4f localMatrix_
 Local transformation matrix.
 
bool shouldDeleteChildrenOnDestruction_
 A flag indicating whether the destructor should also delete all children.
 
nctl::BitSet< uint8_t > dirtyBits_
 Bitset that stores the various dirty states bits.
 
unsigned long int lastFrameUpdated_
 The last frame any viewport updated this node.
 
- Protected Attributes inherited from ncine::Object
ObjectType type_
 Object type.
 

Detailed Description

The base class for the transformation nodes hierarchy.

Constructor & Destructor Documentation

◆ SceneNode() [1/3]

ncine::SceneNode::SceneNode ( SceneNode parent,
float  x,
float  y 
)

Constructor for a node with a parent and a specified relative position.

Parameters
parentThe parent can be nullptr

◆ SceneNode() [2/3]

ncine::SceneNode::SceneNode ( SceneNode parent,
const Vector2f position 
)

Constructor for a node with a parent and a specified relative position as a vector.

Parameters
parentThe parent can be nullptr

◆ SceneNode() [3/3]

ncine::SceneNode::SceneNode ( SceneNode parent)
explicit

Constructor for a node with a parent and positioned in the relative origin.

Parameters
parentThe parent can be nullptr

Member Function Documentation

◆ absLayer()

uint16_t ncine::SceneNode::absLayer ( ) const
inline

Gets the node absolute rendering layer.

Note
The final layer value is inherited from the parent if the node layer is 0.

◆ addChildNode()

bool ncine::SceneNode::addChildNode ( SceneNode childNode)

Adds a node as a child of this one.

Returns
True if the node has been added

◆ childOrderIndex()

unsigned int ncine::SceneNode::childOrderIndex ( ) const

Returns the child order index of this node or zero if it does not have a parent.

Returns
If the node has no parent then 0 is returned

◆ deleteChildrenOnDestruction()

bool ncine::SceneNode::deleteChildrenOnDestruction ( ) const
inline

Gets the delete children on destruction flag.

If the flag is true the children are deleted upon node destruction.

◆ removeAllChildrenNodes()

bool ncine::SceneNode::removeAllChildrenNodes ( )

Removes all children, without reparenting nephews.

Returns
True if there were at least one node to remove

◆ removeChildNode()

bool ncine::SceneNode::removeChildNode ( SceneNode childNode)

Removes a child of this node, without reparenting nephews.

Returns
True if the node has been removed

◆ removeChildNodeAt()

bool ncine::SceneNode::removeChildNodeAt ( unsigned int  index)

Removes the child at the specified index, without reparenting nephews.

Returns
True if the node has been removed

◆ setLayer()

void ncine::SceneNode::setLayer ( uint16_t  layer)
inline

Sets the node rendering layer.

Note
The lowest value (bottom) is 0 and the highest one (top) is 65535. When the value is 0, the final layer value is inherited from the parent.

◆ setParent()

bool ncine::SceneNode::setParent ( SceneNode parentNode)

Sets the parent node.

Returns
True if the parent has been set

◆ swapChildPointer()

void ncine::SceneNode::swapChildPointer ( SceneNode first,
SceneNode second 
)
protected

Swaps the child pointer of a parent when moving an object.

Note
It is faster than calling setParent() on the first child and removeChildNode() on the second one

◆ swapChildrenNodes()

bool ncine::SceneNode::swapChildrenNodes ( unsigned int  firstIndex,
unsigned int  secondIndex 
)

Swaps two children at the specified indices.

Returns
True if the two nodes have been swapped

◆ swapNodeBack()

bool ncine::SceneNode::swapNodeBack ( )

Brings this node one node back in the parent's list of children.

Returns
True if the node has been brought one position back

◆ swapNodeForward()

bool ncine::SceneNode::swapNodeForward ( )

Brings this node one node forward in the parent's list of children.

Returns
True if the node has been brought one position forward

◆ unlinkChildNode()

bool ncine::SceneNode::unlinkChildNode ( SceneNode childNode)

Removes a child of this node reparenting nephews as children.

Returns
True if the node has been unlinked

◆ update()

void ncine::SceneNode::update ( float  frameTime)
virtual

Called once every frame to update the node.

Note
The frame time is expressed in seconds.

Reimplemented in ncine::ParticleSystem, and ncine::AnimatedSprite.

Member Data Documentation

◆ anchorPoint_

Vector2f ncine::SceneNode::anchorPoint_
protected

The anchor point for transformations, in pixels

Note
The default point is the center

◆ childOrderIndex_

unsigned int ncine::SceneNode::childOrderIndex_
protected

The order index of this node among its siblings.

Note
The index is cached here to make siblings reordering methods faster

◆ color_

Color ncine::SceneNode::color_
protected

Node color for transparency and translucency.

Even if the base scene node is not always drawable, it carries color information to easily pass that information to its children.

◆ layer_

uint16_t ncine::SceneNode::layer_
protected

The node rendering layer.

Even if the base scene node is not always drawable, it carries layer information to easily pass that information to its children.

◆ withVisitOrder_

bool ncine::SceneNode::withVisitOrder_
protected

When enabled the visit order is used to resolve the drawing order of same layer nodes.

Note
This flag cannot be changed by the user, it is derived from the parent and this node states

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