1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
#include "RadiantInterface.h"
#include <pybind11/pybind11.h>
#include "iscenegraph.h"
#include "entitylib.h"
namespace script
{
ScriptEntityNode RadiantInterface::findEntityByClassname(const std::string& name)
{
EntityNodeFindByClassnameWalker walker(name);
GlobalSceneGraph().root()->traverse(walker);
// Note: manage_new_object return value policy will take care of that raw pointer
return ScriptEntityNode(walker.getEntityNode());
}
ScriptEntityNode RadiantInterface::findEntityByName(const std::string& name)
{
scene::INodePtr found;
GlobalSceneGraph().root()->foreachNode([&] (const scene::INodePtr& node)
{
if (Node_isEntity(node) && Node_getEntity(node)->getKeyValue("name") == name)
{
found = node;
}
return true;
});
// Note: manage_new_object return value policy will take care of that raw pointer
return ScriptEntityNode(found);
}
void RadiantInterface::registerInterface(py::module& scope, py::dict& globals)
{
py::class_<RadiantInterface> radiant(scope, "RadiantInterface");
radiant.def("findEntityByClassname", &RadiantInterface::findEntityByClassname);
radiant.def("findEntityByName", &RadiantInterface::findEntityByName);
// Point the radiant variable to this
globals["Radiant"] = this;
}
} // namespace script
|