NodeLayer Class
Inherits from: | Node |
A layer node is a zero-sized node that has no visual representation and enables to save all its child nodes into a separate .node file. Layer nodes should be used to split the world into several logical parts and save each of them in a .node file so that each layer and its child nodes can be edited without affecting the source .world file.
Creating a Layer#
Create an instance of the NodeLayer class. You can also specify such settings as a name, transformation and so on.
#include <core/unigine.h>
int init() {
// create a layer node
NodeLayer layer = new NodeLayer();
// set a name
layer.setName("LayerNode");
}
Editing a Layer#
Editing a layer node includes adding, deleting, modifying its child nodes. For example, you can add new nodes as follows:
#include <core/unigine.h>
int init() {
// create a layer node
NodeLayer layer = new NodeLayer();
// set a name for the node
layer.setName("layer_0");
// create a mesh
Mesh mesh = new Mesh();
mesh.addBoxSurface("box_0", vec3(1.0f));
// create a node (e.g. an instance of the ObjectMeshDynamic class)
ObjectMeshDynamic node = new ObjectMeshDynamic(mesh);
// set node transformation
node.setWorldTransform(translate(Vec3(x * 2, y * 2, 0.0f)));
// set a name for the node
node.setName(format("mesh_%d_%d", x + 10, y + 10));
// add the node as a child to the layer node
layer.addWorldChild(node);
return 1;
}
Saving a Layer#
#include <core/unigine.h>
int init() {
// create a layer node
NodeLayer layer = new NodeLayer("unigine_project/nodes/layer_0.node");
// set a name for the node
layer.setName("layer_0");
// create child nodes
for (int y = -4; y <= 4; y++)
{
for (int x = -4; x <= 4; x++)
{
// create a mesh
Mesh mesh = new Mesh();
mesh.addBoxSurface("box_0", vec3(1.0f));
// create a node (e.g. an instance of the ObjectMeshDynamic class)
ObjectMeshDynamic node = new ObjectMeshDynamic(mesh);
// set node transformation
node.setWorldTransform(translate(Vec3(x * 2, y * 2, 0.0f)));
// set a name for the node
node.setName(format("mesh_%d_%d", x + 4, y + 4));
// add the node as a child to the layer node
layer.addWorldChild(node);
}
}
// save the world
engine.console.run("world_save unigine_project");
return 1;
}
Instead of saving the world, you can manually save child nodes of the layer into the .node file by using the engine.world.saveNodes() function:
// declare an array of nodes
Node nodes[0] = ();
// add child nodes of the layer to the declared array
for (int i = 0; i < layer.getNumChildren(); i++) {
nodes.append(layer.getChild(i));
}
// save nodes to the .node file
if (engine.world.saveNodes(layer.getNodePath(), nodes) == 0) {
log.error("Layer hasn't been saved\n");
}
See Also#
- Article on Layer
NodeLayer Class
Members
static NodeLayer ( string name ) #
Constructor. Creates a node layer with specified file name to store it.Arguments
- string name - Name of the layer.
void setNodePath ( string name ) #
Updates the name of the node layer: a path to a .node file where child nodes of the layer are stored.Arguments
- string name - Path to a .node file.
string getNodePath ( ) #
Returns the name of the node layer: a path to a .node file where child nodes of the layer are stored.Return value
Path to the .node file.static int type ( ) #
Returns the type of the node.Return value
NodeLayer type identifier.The information on this page is valid for UNIGINE 2.20 SDK.