feat: added SceneNodeGetChildByTypeclass
This commit is contained in:
parent
94e00bf0fd
commit
d44f10c87b
|
@ -165,6 +165,16 @@ SceneNodeEntity SceneNodeDetachEntity(SceneNode *self) {
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SceneNode *SceneNodeGetChildByTypeclass(SceneNode *self, char const *typeclass, bool recurse) {
|
||||||
|
list_foreach(SceneNode **,child, &self->children) {
|
||||||
|
SceneNodeEntity entity = (*child)->entity;
|
||||||
|
if(mirror_get_function(entity.data, entity.mirror, typeclass))
|
||||||
|
return *child;
|
||||||
|
if(recurse)
|
||||||
|
SceneNodeGetChildByTypeclass(*child, typeclass, recurse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Scene *CreateScene(SceneNode *root) {
|
Scene *CreateScene(SceneNode *root) {
|
||||||
Scene *scene = new(Scene);
|
Scene *scene = new(Scene);
|
||||||
ASSERT_RETURN(scene != NULL, NULL, "CreateScene: Failed to allocate scene");
|
ASSERT_RETURN(scene != NULL, NULL, "CreateScene: Failed to allocate scene");
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define SCENE_H
|
#define SCENE_H
|
||||||
|
|
||||||
#include "stddef.h"
|
#include "stddef.h"
|
||||||
|
#include "stdbool.h"
|
||||||
#include "scene_node_entity.h"
|
#include "scene_node_entity.h"
|
||||||
#include "utils/list.h"
|
#include "utils/list.h"
|
||||||
#include "utils/typeclass_helpers.h"
|
#include "utils/typeclass_helpers.h"
|
||||||
|
@ -40,6 +41,9 @@ 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.
|
||||||
|
//! Optionally recurses through the entire branch
|
||||||
|
extern SceneNode *SceneNodeGetChildByTypeclass(SceneNode *self, char const *typeclass, 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);
|
||||||
|
|
Loading…
Reference in a new issue