feat: added get child by typeid function with option to recurse
This commit is contained in:
parent
b3f9d7222e
commit
30d8182f4d
|
@ -170,8 +170,23 @@ SceneNode *SceneNodeGetChildByTypeclass(SceneNode *self, char const *typeclass,
|
||||||
SceneNodeEntity entity = (*child)->entity;
|
SceneNodeEntity entity = (*child)->entity;
|
||||||
if(mirror_get_function(entity.data, entity.mirror, typeclass))
|
if(mirror_get_function(entity.data, entity.mirror, typeclass))
|
||||||
return *child;
|
return *child;
|
||||||
if(recurse)
|
if(recurse) {
|
||||||
SceneNodeGetChildByTypeclass(*child, typeclass, recurse);
|
SceneNode *recursed = SceneNodeGetChildByTypeclass(*child, typeclass, recurse);
|
||||||
|
if(recursed != NULL) return recursed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
SceneNode *SceneNodeGetChildByTypeid(SceneNode *self, typeid id, bool recurse) {
|
||||||
|
list_foreach(SceneNode **,child, &self->children) {
|
||||||
|
SceneNodeEntity entity = (*child)->entity;
|
||||||
|
if(entity.mirror->get_typeid() == id)
|
||||||
|
return *child;
|
||||||
|
if(recurse) {
|
||||||
|
SceneNode *recursed = SceneNodeGetChildByTypeid(*child, id, recurse);
|
||||||
|
if(recursed != NULL) return recursed;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,10 +41,12 @@ extern void SceneNodeRemoveChild(SceneNode *self, SceneNode *child);
|
||||||
extern void SceneNodeAttachEntity(SceneNode *self, SceneNodeEntity entity);
|
extern void SceneNodeAttachEntity(SceneNode *self, SceneNodeEntity entity);
|
||||||
//! Detach an entity from a scene node
|
//! Detach an entity from a scene node
|
||||||
extern SceneNodeEntity SceneNodeDetachEntity(SceneNode *self);
|
extern SceneNodeEntity SceneNodeDetachEntity(SceneNode *self);
|
||||||
//! Returns the first child node that implements a specific typeclass.
|
//! Returns the first child node with an entity that implements a specific typeclass.
|
||||||
//! Optionally recurses through the entire branch
|
//! Optionally recurses through the entire branch
|
||||||
extern SceneNode *SceneNodeGetChildByTypeclass(SceneNode *self, char const *typeclass, bool recurse);
|
extern SceneNode *SceneNodeGetChildByTypeclass(SceneNode *self, char const *typeclass, bool recurse);
|
||||||
|
//! Returns the first child node with an entity that matches the given typeid.
|
||||||
|
//! Optionally recurses through the entire branch.
|
||||||
|
extern SceneNode *SceneNodeGetChildByTypeid(SceneNode *self, typeid id, bool recurse);
|
||||||
//! Instantiate a new scene with a root node.
|
//! Instantiate a new scene with a root node.
|
||||||
extern Scene *CreateScene(SceneNode *root);
|
extern Scene *CreateScene(SceneNode *root);
|
||||||
//! Destroy a node and it's scene tree.
|
//! Destroy a node and it's scene tree.
|
||||||
|
|
Loading…
Reference in a new issue