X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fscene.cc;fp=src%2Fscene.cc;h=27be807f47069b1602964c2679d3635e9f89905d;hb=b7c92831285013b2a0783bccaf3d900545ebb5ba;hp=0000000000000000000000000000000000000000;hpb=a58455a92c7ecab980cbe1b7e282aeb6bfe7e889;p=laserbrain_demo diff --git a/src/scene.cc b/src/scene.cc new file mode 100644 index 0000000..27be807 --- /dev/null +++ b/src/scene.cc @@ -0,0 +1,63 @@ +#include "scene.h" + +static void destroy_node_tree(SceneNode *n); + +Scene::Scene() +{ + nodes = 0; +} + +Scene::~Scene() +{ + destroy(); +} + +void Scene::destroy() +{ + destroy_node_tree(nodes); + nodes = 0; +} + +// Scene::load defined in sceneload.cc + +void Scene::update(float dt) +{ + if(nodes) { + nodes->update(dt); + } + + int nobj = objects.size(); + for(int i=0; inode) { + // only update objects which don't belong to a scenegraph node + // to avoid updating objects twice + objects[i]->update(dt); + } + } +} + +void Scene::draw() const +{ + if(!objects.empty()) { + int nobj = objects.size(); + for(int i=0; idraw(); + } + } else { + int nmesh = meshes.size(); + for(int i=0; idraw(); + } + } +} + +static void destroy_node_tree(SceneNode *n) +{ + if(!n) return; + + int nsub = n->get_num_children(); + for(int i=0; iget_child(i)); + } + delete n; +}