Unigine::Node Class
Header: | #include <UnigineNode.h> |
In terms of Unigine, all of the objects added into the scene are called nodes. Nodes can be of different types, determining their visual representation and behavior.
The node is created and stored in the world. All changes are saved into the .world file.
The node can be also saved into an external .node file and then imported into the world when necessary. Also it is possible to create a reference to the exported node.
You can associate any string data (written directly into a *.node or a *.world file) or an arbitrary user variable with a node.
See Also
- How to handle ownership
- How to work with the node's matrix transformations
Creating a Node
The Node class doesn't provide creating of a node. You can create an instance of any class inherited from the Node class and then obtain the node via the getNode() method.
For example:
- Create a box mesh by using the Mesh class.
- Use the box mesh to create an instance of the ObjectMeshStatic class. This class is inherited from the Node class.
- Get the node from the ObjectMeshStatic instance via the getNode() method.
// AppWorldLogic.cpp
#include "AppWorldLogic.h"
#include <UnigineNode.h>
#include <UnigineObjects.h>
using namespace Unigine;
using namespace Math;
int AppWorldLogic::init() {
// create a mesh
MeshPtr mesh = Mesh::create();
mesh->addBoxSurface("box_0",vec3(1.0f));
// declare a smart pointer for any type of the node inherited from the Node class (e.g. ObjectMeshStatic)
// and call a constructor of the corresponding class
ObjectMeshStaticPtr object_mesh = ObjectMeshStatic::create(mesh);
// declare a smart pointer for the node
// and obtain the node pointer from the created ObjectMeshStatic
NodePtr node = object_mesh->getNode();
return 1;
}
Now you can operate the ObjectMeshStatic instance as a node.
Editing a Node and Saving Changes
The Node class contains common settings of the node. Also each node has special settings, which vary depending on the type of the node.
Editing the node also includes editing materials and properties assigned to the node.
For the edited node to be saved in the .world file, it should be added to UnigineEditor first: you should pass node ownership to the editor by releasing script ownership and call the addNode() method of the Editor class.
For example:
- Create a box mesh by using the Mesh class.
- Save the mesh on the disk. It is required as the node we are going to save to the .world file need to reference to a mesh stored on the disk.
- Use the saved .mesh file to create an instance of the ObjectMeshStatic class. This class is inherited from the Node class.
- Release script ownership of the ObjectMeshStatic instance.
- Get the node from the ObjectMeshStatic instance via the getNode() method.
- Add the node to UnigineEditor.
- Edit the node and save the world by calling the world_save console command.
#include "AppWorldLogic.h"
#include <UnigineNode.h>
#include <UnigineObjects.h>
#include <UnigineEditor.h>
#include <UnigineConsole.h>
using namespace Unigine;
using namespace Math;
int AppWorldLogic::init() {
// create a mesh
MeshPtr mesh = Mesh::create();
mesh->addBoxSurface("box_0",vec3(1.0f));
// save a mesh into a file on the disk
mesh->save("unigine_project/meshes/my_mesh.mesh");
// declare a smart pointer for any type of the node inherited from the Node class (e.g. ObjectMeshStatic)
// and call a constructor of the corresponding class create an instance of any class inherited from the Node class (e.g. ObjectMeshStatic)
ObjectMeshStaticPtr object_mesh = ObjectMeshStatic::create("unigine_project/meshes/my_mesh.mesh");
// assign a material to the mesh
object_mesh->setMaterial("mesh_base","*");
// release script ownership
object_mesh->release();
// declare a smart pointer for the node
// and obtain the node pointer from the created NodeDummy
NodePtr node = object_mesh->getNode();
// pass node ownership to the editor by adding the node to it
Editor::get()->addNode(node);
// change the node name
node->setName("my_node");
// change node transformation
node->setWorldTransform(translate(Vec3(0.0f, 0.0f, 2.0f)));
// save node changes in the .world file
Console::get()->run("world_save");
return 1;
}
Exporting and Importing a Node
To export a node stored in the world into the external .node file, you should pass it to the saveNode() method of the World class.
To import the existing node stored in the .node file to the world, you should call the loadNode() method of the World class.
For example:
- Create a box mesh by using the Mesh class.
- Save the mesh on the disk. It is required as the node we are going to export need to reference to a mesh stored on the disk.
- Use the saved .mesh file to create an instance of the ObjectMeshStatic class. This class is inherited from the Node class.
- Release script ownership of the ObjectMeshStatic instance.
- Get the node from the ObjectMeshStatic instance via the getNode() method and Pass node ownership to the editor by adding it the node to it.
- Export the node to an external .node file.
- Import the prevoiusly exported node and add it to the editor to check the result.
The node imported via loadNode() is orphan, so you don't need to release script ownership.
#include "AppWorldLogic.h"
#include <UnigineNode.h>
#include <UnigineObjects.h>
#include <UnigineWorld.h>
#include <UnigineEditor.h>
#include <UnigineConsole.h>
using namespace Unigine;
using namespace Math;
int AppWorldLogic::init() {
// create a mesh
MeshPtr mesh = Mesh::create();
mesh->addBoxSurface("box_0", vec3(1.0f));
// save a mesh into a file on the disk
mesh->save("unigine_project/meshes/my_mesh.mesh");
// create an instance of any class inherited from the Node class (e.g. ObjectMeshStatic)
ObjectMeshStaticPtr object_mesh = ObjectMeshStatic::create("unigine_project/meshes/my_mesh.mesh");
// assign a material to the mesh
object_mesh->setMaterial("mesh_base", "*");
// release script ownership
object_mesh->release();
// declare a smart pointer for the node
// and obtain the node pointer from the created NodeDummy
NodePtr node = object_mesh->getNode();
// pass node ownership to the editor by adding the node to it
Editor::get()->addNode(node);
// export the node into a .node file
World::get()->saveNode("unigine_project/nodes/my_node.node", node);
// import the exported node to check the result
NodePtr imported_node = World::get()->loadNode("unigine_project/nodes/my_node.node");
// add the imported node to the editor
//note: an imported node is orphan so you don't need to release script ownership
Editor::get()->addNode(imported_node);
// set a position of the node
imported_node->setPosition(Vec3(4.0f, 0.0f, 1.0f));
return 1;
}
Deleting a Node
To delete a node owned by UnigineEditor, pass it to the removeNode() method of the Editor class.
// AppWorldLogic.cpp
#include <UnigineNode.h>
#include <UnigineObjects.h>
#include <UnigineWorld.h>
#include <UnigineEditor.h>
#include <UnigineConsole.h>
using namespace Unigine;
using namespace Math;
int AppWorldLogic::init() {
// create a mesh
MeshPtr mesh = Mesh::create();
mesh->addBoxSurface("box_0", vec3(1.0f));
// create an instance of any class inherited from the Node class (e.g. ObjectMeshStatic)
ObjectMeshStaticPtr object_mesh = ObjectMeshStatic::create(mesh);
// assign a material to the mesh
object_mesh->setMaterial("mesh_base", "*");
// release script ownership
object_mesh->release();
// declare a smart pointer for the node
// and obtain the node pointer from the created NodeDummy
NodePtr node = object_mesh->getNode();
// pass node ownership to the editor by adding the node to it
Editor::get()->addNode(node);
// do something with the node
// ...
// delete the node from the editor
Editor::get()->removeNode(node);
// clear the mesh
mesh->clear();
return 1;
}
Node Class
Members
Ptr<Node> getAncestor(int num)
Returns a node ancestor by its number.Arguments
- int num - Ancestor ID.
Return value
Ancestor node.Math::vec3 getAngularVelocity()
Returns the angular velocity of the node's physical body in the local space.Return value
Angular velocity in the local space.BoundBox getBoundBox()
Returns the bounding box of the node.Return value
The bounding box.BoundSphere getBoundSphere()
Returns the bounding sphere of the node.Return value
Bounding sphere of the node.Ptr<Node> getChild(int num)
Returns a node child by its number.Arguments
- int num - Child ID.
Return value
Child node.int isChild(const Ptr<Node> & n)
Checks if a given node is a child of the node.Arguments
- const Ptr<Node> & n - Node to check.
Return value
1 if the given node is a child; otherwise, 0.void setChildIndex(const Ptr<Node> & n, int index)
Sets the index for a given child node of the node.Arguments
- const Ptr<Node> & n - Child node.
- int index - Node index.
int getChildIndex(const Ptr<Node> & n)
Returns the index of a given child node of the node.Arguments
- const Ptr<Node> & n - Child node.
Return value
Node index.void setClutter(int clutter)
Sets a value indicating if the node represents a clutter object.Arguments
- int clutter - Positive number to mark the node as a clutter object; otherwise, 0.
int isClutter()
Returns a value indicating if the node is a clutter object.Return value
1 if the node is a clutter object; otherwise, 0.void setCollider(int collider)
Updates a value indicating if collision detection is enabled for the node (i.e. the node is a collider object). If it is disabled, the node is removed from the physical scene and does not participate in physical interactions.Arguments
- int collider - Positive number to enable collision detection, 0 to disable.
int isCollider()
Returns a value indicating if collision detection is enabled for the node.Return value
1 if collision detection is enabled for the node; otherwise, 0.void setData(const char * data)
Sets user data associated with the node.- If the node was loaded from the *.node file, data is saved directly into the data tag of this file.
- If the node is loaded from the *.world file, data is saved into the Node data tag of the *.world file.
- If the node is loaded from the *.world file as a NodeReference, data will be saved to the NodeReference data tag of the *.world file.
Arguments
- const char * data - New user data. Data can contain an XML formatted string.
const char * getData()
Returns user data associated with the node.- If the node was loaded from the *.node file, data from the data tag of this file is returned.
- If the node is loaded from the *.world file, data from the Node data tag of the *.world file is returned.
- If the node is loaded from the *.world file as a NodeReference, data from the NodeReference data tag of the *.world file is returned.
Return value
User string data. Data can be an xml formatted string.int isDecal()
Returns a value indicating if the node is a decal node (its type is DECAL_*).Return value
1 if the node is a decal node; otherwise, 0.void setDirection(const Math::vec3 & dir, const Math::vec3 & up)
Updates the direction vector of the node. By default, a direction vector points along -Z axis. This function changes its direction and reorients the node.Arguments
- const Math::vec3 & dir - New direction vector in the local space. The direction vector always has unit length.
- const Math::vec3 & up - New "up" vector in the local space.
Math::vec3 getDirection()
Returns the normalized direction vector of the node. By default, a direction vector points along the mesh local -Z axis. It always has an unit length.Return value
Normalized direction vector in the local space.void setEnabled(int enabled)
Enables or disables the node.Arguments
- int enabled - 1 to enable the node, 0 to disable it.
int isEnabled()
Returns a value indicating if the node and its parent nodes are enabled.Return value
1 if the node and its parent nodes are enabled; otherwise, 0.int isEnabledSelf()
Returns a value indicating if the node is enabled.Return value
1 if the node is enabled; otherwise, 0.int isExtern()
Returns a value indicating if the node is an extern node (its type is one of the following: NODE_EXTERN, OBJECT_EXTERN, WORLD_EXTERN).Return value
1 if the node is an extern node; otherwise, 0.int isField()
Returns a value indicating if the node is a field node (its type is one of the FIELD_*).Return value
1 if the node is a field node; otherwise, 0.void setFolded(int folded)
Shows or minimizes node children in the node tree hierarchy.Arguments
- int folded - Positive number to minimize node children; 0 to expand node hierarchy.
int isFolded()
Returns a value indicating if node children are displayed or minimized in the node tree hierarchy.Return value
Positive number if node children are hidden in the node tree; otherwise, 0.int isGeodetic()
Returns a value indicating if the node is a geodetic-related node.Return value
1 if the node is a geodetic-related node; otherwise, 0.Ptr<GeodeticPivot> getGeodeticPivot()
Returns a pointer to geodetic pivot of the node.Return value
Geodetic pivot smart pointer, or NULL if the node is not a child of a geodetic pivot node.void setHandled(int handled)
Disables or shows the node handle. This option is valid only for invisible nodes, such as light and sound sources, particle systems and world-managing nodes (WorldSector, WorldPortal, WorldOccluder, triggers, expressions, etc.)Arguments
- int handled - Positive value to show the handle, 0 to hide it.
int isHandled()
Returns a value indicating if the node handle is displayed. This option is valid only for invisible nodes, such as light and sound sources, particle systems and world-managing nodes (WorldSector, WorldPortal, WorldOccluder, triggers, expressions, etc.)Return value
1 if the handle is shown; otherwise, 0.void getHierarchy(Vector< Ptr<Node> > & hierarchy)
Retrieves the whole hierarchy of the node and puts it to the hierarchy buffer.Arguments
- Vector< Ptr<Node> > & hierarchy - Hierarchy buffer.
int setID(int id)
Sets a unique ID for the node.Arguments
- int id - Node ID.
Return value
1 if the ID is set successfully; otherwise, 0.int getID()
Returns the ID of the node.Return value
Node ID.Math::Mat4 getIWorldTransform()
Returns the inverse transformation matrix of the node for transformations in the world coordinates.Return value
Inverse transformation matrix.void setLatest(int latest)
Sets a flag that forces a node to be updated the last of all, after states of all other nodes were updated. For example, a post update flag is useful to draw nodes strictly in front of the camera (after a Player has updated its transformations). By default, this flag is set to 0.Arguments
- int latest - Positive value to update a node last of all; otherwise, 0.
int isLatest()
Checks if a node is forced to be updated the last of all, after states of all other nodes were updated. For example, a post update flag is useful to draw nodes strictly in front of the camera (after a Player has updated its transformations). By default, this flag is set to 0.Return value
1 if the node is updated last of all; otherwise, 0int isLight()
Returns a value indicating if the node is a light source (its type is LIGHT_*).Return value
1 if the node is a light source; otherwise, 0.Math::vec3 getLinearVelocity()
Returns the linear velocity of the node's physical body in the local space.Return value
Linear velocity in the local space.void getLinkedHierarchy(Vector< Ptr<Node> > & ret)
Retrieves the whole hierarchy of a given linked node and puts it to the hierarchy buffer.Arguments
- Vector< Ptr<Node> > & ret - Hierarchy buffer.
Ptr<Node> getLinkedRoot()
Returns a parent node linked to the root prefab.Return value
Parent node linked to the root prefab if it exists; otherwise, NULL.void setName(const char * name)
Sets a name for the node.Arguments
- const char * name - New name of the node.
const char * getName()
Returns the name of the node.Return value
Name of the node.int isNavigation()
Returns a value indicating if a given node is a navigation node.Return value
Returns 1 if the given node is a navigation node; otherwise, 0.Ptr<Node> getNode()
Returns a node pointer.Return value
Node pointer.Ptr<Node> getNode(int id)
Returns a node pointer.Arguments
- int id - Node identifier.
Return value
Node pointer.int isNode(const Ptr<Node> & node)
Check the node pointer.Arguments
- const Ptr<Node> & node - Node pointer.
Return value
Returns 1 if the node is valid; otherwise, 0.int isNode(int id)
Check the node pointer.Arguments
- int id - Node pointer.
Return value
Returns 1 if the node is valid; otherwise, 0.int getNumAncestors()
Returns the number of ancestors of the node.Return value
Number of ancestors.int getNumChildren()
Returns the number of children of the node.Return value
Number of child nodes.int isObject()
Returns a value indicating if the node is an object node (its type is OBJECT_*).Return value
1 if the node is an object node; otherwise, 0.Ptr<Body> getObjectBody()
Returns a physical body assigned to the node if it is an object node.Return value
Body assigned to the object node; otherwise, NULL (0).Ptr<BodyRigid> getObjectBodyRigid()
Returns a rigid body assigned to the node if it is an object node.Return value
Rigid body assigned to the object node; otherwise, NULL (0).int isObstacle()
Returns a value indicating if the node is an obstacle node (its type is OBSTACLE_*).Return value
Returns 1 if the given node is an obstacle node; otherwise, 0.void setOldWorldTransform(const Math::Mat4 & transform)
Sets old transformation matrix for the node in the world coordinates.Arguments
- const Math::Mat4 & transform - Old transformation matrix to be set.
Math::Mat4 getOldWorldTransform()
Returns old transformation matrix for the node in the world coordinates.Return value
Old transformation matrix.int isOwner()
Returns the owner flag. If the pointer is the owner, on its deletion the node also will be deleted. Use grab() and release() functions to change ownershipReturn value
Owner flag.void setParent(const Ptr<Node> & parent)
Sets the new parent for the node. Transformations of the current node will be done in the coordinates of the parent.Arguments
- const Ptr<Node> & parent - New parent node.
Ptr<Node> getParent()
Returns the parent of the node.Return value
Parent node or NULL (0), if the node has no parent.int isPhysical()
Returns a value indicating if the node is a physical node (its type is PHYSICAL_*).Return value
1 if the node is a physical node; otherwise, 0.int isPlayer()
Returns a value indicating if the node is a player node (its type is PLAYER_*).Return value
1 if the node is a player node; otherwise, 0.void setPosition(const Math::Vec3 & pos)
Sets the node position.Arguments
- const Math::Vec3 & pos - Node position in the local space
Math::Vec3 getPosition()
Returns the node position.Return value
Node position in the local spacePtr<Node> getPossessor()
Returns a possessor of the node. The following nodes can be possessors:- NodeReference
- WorldCluster
- WorldClutter
- WorldLayer
Return value
Node posessor, if it exists; otherwise, NULL.int isPrefabInstance()
Returns a value indicating if the node is a prefab instance.Return value
1 if the node is a prefab instance; otherwise, 0.int isPrefabInstanceChanged()
Returns a value indicating if the prefab instance of the node is changed.Return value
1 if the node is a part of a prefab instance, that has nodes with overriden parameters or children that are not linked to prefab; otherwise, 0.int isPrefabMissing()
Returns a value indicating if the prefab is not found or was deleted.Return value
1 if the prefab is not found or was deleted; otherwise, 0.int setPrefabName(const char * name)
Sets the prefab name for the node. The prefab name can be set only for nodes linked to a root prefab. Links of all linked child nodes are updated automatically.Arguments
- const char * name - New prefab name for the node. If an empty string is passed, the current prefab link is removed (links of all linked child nodes are also removed).
Return value
1 if the prefab name is successfully set; otherwise, 0.const char * getPrefabName()
Returns the prefab name for the node. Only the nodes that are linked to a root prefab have the prefab name.Return value
Prefab name for the node.void getPrefabPropertyNames(Vector< String > & property_names)
Returns the list of property names of a prefab of the node and puts it to a given vector of strings.Arguments
- Vector< String > & property_names - A vector of strings to fill with prefab property names.
int isPrefabPropertyOverridden(const char * property_name)
Returns a value indicating if a given prefab property is overridden.Arguments
- const char * property_name - Prefab property name.
Return value
1 if a given prefab property is overridden; otherwise, 0.int setProperty(const char * name)
Associates a given property with the whole node.Arguments
- const char * name - Property name.
Return value
1 if the property is set successfully; otherwise, 0.Ptr<Property> getProperty()
Returns a property associated with the node.Return value
Node property smart pointer, if exists; otherwise, NULL.const char * getPropertyName()
Returns the name of a property associated with the node.Return value
Property name, if exists; otherwise, NULL.void setQuery(int query)
Updates a value indicating if occlusion query is used for the node.Arguments
- int query - Positive number to use occlusion query, 0 not to use.
int isQuery()
Returns a value indicating if occlusion query is used for the node. The default is 0 (not used).Return value
1 if occlusion query is used; otherwise, 0.Ptr<Node> getRootNode()
Returns the root node for the node.Return value
Root node the root node for the node.void setRotation(const Math::quat & rot, int identity = 0)
Sets the node rotation.Arguments
- const Math::quat & rot - Node rotation in the local space.
- int identity - 1 to enable scaling of the node, 0 to disable it.
Math::quat getRotation()
Returns the node rotation.Return value
Node rotation in the local space.void setScale(const Math::vec3 & s)
Sets the scale of the node.Arguments
- const Math::vec3 & s - Node scale in the local space.
Math::vec3 getScale()
Returns the scale of the node.Return value
Node scale in the local space.int isShadow()
Returns a value indicating if the node was a shadow caster in the previous frame and, therefore, is updated.Return value
1 if the node was a shadow caster; otherwise, 0.int isSound()
Returns a value indicating if the node is a sound node (its type is SOUND_*).Return value
1 if the node is a sound node; otherwise, 0.void setSpatial(int spatial)
Updates a value indicating if sectors and portals are used for node visibility determination.Arguments
- int spatial - Positive value to consider sectors and portals; otherwise, 0.
int isSpatial()
Returns a value indicating if sectors and portals are used for node visibility determination.Return value
Returns 1 if sectors and portals are considered; otherwise, 0.void setTransform(const Math::Mat4 & transform)
Sets the transformation matrix for the node in its parent coordinates.Arguments
- const Math::Mat4 & transform - New transformation matrix.
Math::Mat4 getTransform()
Returns the transformation matrix of the node in its parent coordinates.Return value
Transformation matrix.int getType()
Returns a type of the node.Return value
Node type identifier.int getTypeId(const char * type)
Returns the ID of a node type with a given name.Arguments
- const char * type - Node type name.
Return value
Node type ID, if such type exists; otherwise, -1.const char * getTypeName()
Returns a name of the node type.Return value
Node type name.const char * getTypeName(int type)
Returns the name of a node type with a given ID.Arguments
- int type - Node type ID.
Return value
Node type name.int isVisible()
Returns a value indicating if the node was shown in the viewport in the previous frame and, therefore, is updated.Return value
1 if the node was visible; otherwise, 0.int isWorld()
Returns a value indicating if the node is a world node (its type is WORLD_*).Return value
1 if the node is a world node; otherwise, 0.Math::vec3 getWorldBack()
Returns the normalized "back" vector of the node. This vector always has a unit length.Return value
Normalized "back" vector in the world space.UNIGINE_BOUND_BOX getWorldBoundBox()
Returns the world bounding box of the node.Return value
World bounding box.UNIGINE_BOUND_SPHERE getWorldBoundSphere()
Returns the world bounding sphere of the node.Return value
World bounding sphere.void setWorldDirection(const Math::vec3 & dir, const Math::vec3 & up)
Sets the direction vector of the node. By default, a direction vector points along -Z axis. This function changes its direction and reorients the node.Arguments
- const Math::vec3 & dir - New direction vector in the world space. The direction vector always has a unit length.
- const Math::vec3 & up - New up vector in the world space.
Math::vec3 getWorldDirection()
Returns the normalized direction vector of the node. By default, a direction vector points along the mesh local -Z axis and is returned in world space coordinates. It always has a unit length.Return value
Normalized direction vector in the world space.Math::vec3 getWorldDown()
Returns the normalized "down" vector of the node. This vector always has a unit length.Return value
Normalized "down" vector in the world space.Math::vec3 getWorldForward()
Returns the normalized "forward" vector of the node. This vector always has a unit length.Return value
Normalized "forward" vector in the world space.Math::vec3 getWorldLeft()
Returns the normalized "left" vector of the node. This vector always has a unit length.Return value
Normalized "left" vector in the world space.void setWorldParent(const Ptr<Node> & n)
Sets the new parent of the node. Transformations of the current node will be done in the world coordinates.Arguments
- const Ptr<Node> & n - New parent node.
void setWorldPosition(const Math::Vec3 & pos)
Sets the node position in the world coordinates.Arguments
- const Math::Vec3 & pos
Math::Vec3 getWorldPosition()
Returns the node position in the world coordinates.Return value
Node position in the world space.Math::vec3 getWorldRight()
Returns the normalized "right" vector of the node. This vector always has a unit length.Return value
Normalized "right" vector in the world space.void setWorldRotation(const Math::quat & rot, int identity = 0)
Sets the node rotation in the world space.Arguments
- const Math::quat & rot - Node rotation in the world space.
- int identity - 1 to enable scaling of the node, 0 to disable it.
Math::quat getWorldRotation()
Returns the node rotation in the world space.Return value
Node rotation in the world space.void setWorldScale(const Math::vec3 & s)
Sets the node scale in the world space.Arguments
- const Math::vec3 & s - Node scale in the world space.
Math::vec3 getWorldScale()
Returns the node scale in the world space.Return value
Node scale in the world space.Ptr<WorldSector> getWorldSector()
Returns a sector, in which the node is located.Return value
World sector.void setWorldTransform(const Math::Mat4 & transform)
Sets the transformation matrix for the node in the world coordinates.Arguments
- const Math::Mat4 & transform - Transformation matrix.
Math::Mat4 getWorldTransform()
Returns the transformation matrix of the node in the world coordinates.Return value
Transformation matrix.Math::vec3 getWorldUp()
Returns the normalized "up" vector of the node. This vector always has a unit length.Return value
Normalized "up" vector in the world space.Math::vec3 getWorldVelocity(const Math::Vec3 & point)
Returns linear velocity of a point of the node's physical body in the world space.Arguments
- const Math::Vec3 & point
Return value
Linear velocity in the world space.void addChild(const Ptr<Node> & n)
Adds a child to the node. Transformations of the new child will be done in the coordinates of the parent.Arguments
- const Ptr<Node> & n - New child node.
void addWorldChild(const Ptr<Node> & n)
Adds a child to the node. Transformations of the new child will be done in the world coordinates.Arguments
- const Ptr<Node> & n - New child node.
int canAddChild(const Ptr<Node> & n)
Returns a value indicating if a given node can be added to the node as a child. This method is used to prevent nested prefab recursion.Arguments
- const Ptr<Node> & n - Node to add as a child.
Return value
1 if a node can be added as a child; otherwise, 0.Ptr<Node> clone()
Clones the current node.Return value
Cloned node.int findAncestor(int type)
Returns the ID of node's ancestor of a given type.Arguments
- int type - Ancestor type identifier. One of the NODE_* pre-defined variables.
Return value
Ancestor ID if it exists; otherwise -1.int findAncestor(const char * name)
Returns the ID of node's ancestor with a given name.Arguments
- const char * name - Ancestor name.
Return value
Ancestor ID if it exists; otherwise -1.int findChild(const char * name)
Searches for a child node with a given name among the children of the node.Arguments
- const char * name - Name of the child node.
Return value
Child node number, if it is found; otherwise, -1.Ptr<Node> findNode(const char * name, int recursive = 0)
Searches for a node with a given name among the children of the node.Arguments
- const char * name - Name of the child node.
- int recursive - 1 if the search is recursive (i.e. performed for children of child nodes); otherwise, 0.
Return value
Child node, if it is found; otherwise, NULL.void freezePrefabLink()
Freezes current prefab link of the node. All changes made to the prefab will not affect the node.void grab()
Grabs the node (sets the owner flag to 1). The node should not be handled by the engine after this function is called.int hasOverridenPrefabProperties()
Returns a value indicating if the node has overriden prefab properties.Return value
1 if the node has overriden prefab properties; otherwise, 0.int hasPrefabLink()
Returns a value indicating if the node has a prefab link.Return value
1 if the node has a prefab link; otherwise, 0.int hasPrefabName()
Returns a value indicating if the node has a prefab name.Return value
1 if the node has a prefab name; otherwise, 0.int loadWorld(const Ptr<Xml> & xml)
Loads a node state from the Xml.Arguments
- const Ptr<Xml> & xml - Xml smart pointer.
Return value
1 if the node state is loaded successfully; otherwise, 0.void release()
Releases the node (sets the owner flag to 0). The node should be handled by the engine after this function is called.void removeChild(const Ptr<Node> & n)
Removes a child node (added by the addChild() method) from the list of children.Arguments
- const Ptr<Node> & n - Child node to remove.
void removeWorldChild(const Ptr<Node> & n)
Removes a child node (added by the addWorldChild() method) from the list of children.Arguments
- const Ptr<Node> & n - Child node to remove.
void renderVisualizer()
Renders a bounding box / sphere of the object.int restoreState(const Ptr<Stream> & stream)
Restores a node state from the stream.Arguments
- const Ptr<Stream> & stream - Stream smart pointer.
Return value
1 if node state is successfully restored; otherwise, 0.int revertPrefabProperty(const char * property_name)
Reverts node's property with a given name from a prefab. This method also sets the overridden flag of the property to 0.Arguments
- const char * property_name - Property name.
Return value
1 if node's property with a given name was successfully reverted from a prefab; otherwise, 0.void rotate(const Math::quat & r)
Rotates the node. Rotation is determined by the specified quaternion.Arguments
- const Math::quat & r - Rotation quaternion.
int saveState(const Ptr<Stream> & stream)
Saves a node state into the stream.Arguments
- const Ptr<Stream> & stream - Stream smart pointer.
Return value
1 if node state is successfully saved; otherwise, 0.int saveWorld(const Ptr<Xml> & xml)
Saves a node state into the Xml.Arguments
- const Ptr<Xml> & xml - Xml smart pointer.
Return value
1 if the node state is saved successfully; otherwise, 0.void scale(const Math::vec3 & s)
Scales the node.Arguments
- const Math::vec3 & s - Scale vector.
void swap(const Ptr<Node> & n)
Swaps two nodes.Arguments
- const Ptr<Node> & n - Node to swap.
Math::vec3 toLocal(const Math::Vec3 & p)
Converts a given vector in the world space to the node's local space.Arguments
- const Math::Vec3 & p - Vector in the world space.
Return value
Vector in the local space.Math::Vec3 toWorld(const Math::vec3 & p)
Converts a given vector in the local space to the world space.Arguments
- const Math::vec3 & p - Vector in the local space.
Return value
Vector in the world space.void translate(const Math::Vec3 & t)
Translates the node.Arguments
- const Math::Vec3 & t - Translation vector.
void worldLookAt(const Math::Vec3 & target, const Math::vec3 & up)
Sets viewing matrix of the node.Arguments
- const Math::Vec3 & target - Coordinates of the target point in the world space.
- const Math::vec3 & up - Coordinates of the "up" vector in the world space.
void worldLookAt(const Math::Vec3 & target)
Reorients the node to "look" at the target point of the node. Direction vector of the node will point to the target point.Arguments
- const Math::Vec3 & target - Coordinates of the target point in the world space.
void worldRotate(const Math::quat & r)
Rotates the node in the world space. Rotation is determined by the specified quaternion.Arguments
- const Math::quat & r - Rotation quaternion.
void worldScale(const Math::vec3 & s)
Scales the node in the world space.Arguments
- const Math::vec3 & s - Scale vector.
void worldTranslate(const Math::Vec3 & t)
Translates the node in the world space.Arguments
- const Math::Vec3 & t - Translation vector.