assimp
[laserbrain_demo] / src / scene.cc
1 #include "scene.h"
2
3 static void destroy_node_tree(SceneNode *n);
4
5 Scene::Scene()
6 {
7         nodes = 0;
8 }
9
10 Scene::~Scene()
11 {
12         destroy();
13 }
14
15 void Scene::destroy()
16 {
17         destroy_node_tree(nodes);
18         nodes = 0;
19 }
20
21 // Scene::load defined in sceneload.cc
22
23 void Scene::update(float dt)
24 {
25         if(nodes) {
26                 nodes->update(dt);
27         }
28
29         int nobj = objects.size();
30         for(int i=0; i<nobj; i++) {
31                 if(!objects[i]->node) {
32                         // only update objects which don't belong to a scenegraph node
33                         // to avoid updating objects twice
34                         objects[i]->update(dt);
35                 }
36         }
37 }
38
39 void Scene::draw() const
40 {
41         if(!objects.empty()) {
42                 int nobj = objects.size();
43                 for(int i=0; i<nobj; i++) {
44                         objects[i]->draw();
45                 }
46         } else {
47                 int nmesh = meshes.size();
48                 for(int i=0; i<nmesh; i++) {
49                         meshes[i]->draw();
50                 }
51         }
52 }
53
54 static void destroy_node_tree(SceneNode *n)
55 {
56         if(!n) return;
57
58         int nsub = n->get_num_children();
59         for(int i=0; i<nsub; i++) {
60                 destroy_node_tree(n->get_child(i));
61         }
62         delete n;
63 }