rayzor
diff src/scene.cc @ 12:d94a69933a71
lots of stuff, can't remember
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sat, 12 Apr 2014 23:28:24 +0300 |
parents | a68dbf80d547 |
children | a9a948809c6f |
line diff
1.1 --- a/src/scene.cc Thu Apr 10 08:42:33 2014 +0300 1.2 +++ b/src/scene.cc Sat Apr 12 23:28:24 2014 +0300 1.3 @@ -1,5 +1,6 @@ 1.4 #include <string.h> 1.5 #include "scene.h" 1.6 +#include "min3d.h" 1.7 1.8 Scene::Scene() 1.9 { 1.10 @@ -40,22 +41,35 @@ 1.11 return name ? name : "<unknown>"; 1.12 } 1.13 1.14 -void Scene::add_object(Object *obj) 1.15 +void Scene::add(SceneNode *node) 1.16 { 1.17 - objects.push_back(obj); 1.18 + nodes.push_back(node); 1.19 + 1.20 + switch(node->get_type()) { 1.21 + case NODE_OBJECT: 1.22 + objects.push_back((Object*)node); 1.23 + break; 1.24 + 1.25 + case NODE_LIGHT: 1.26 + lights.push_back((Light*)node); 1.27 + break; 1.28 + 1.29 + case NODE_CAMERA: 1.30 + cameras.push_back((Camera*)node); 1.31 + break; 1.32 + 1.33 + default: 1.34 + break; 1.35 + } 1.36 + 1.37 + sel.clear(); 1.38 } 1.39 1.40 -void Scene::add_light(Light *lt) 1.41 +int Scene::get_node_count() const 1.42 { 1.43 - lights.push_back(lt); 1.44 + return (int)nodes.size(); 1.45 } 1.46 1.47 -void Scene::add_camera(Camera *cam) 1.48 -{ 1.49 - cameras.push_back(cam); 1.50 -} 1.51 - 1.52 - 1.53 int Scene::get_object_count() const 1.54 { 1.55 return (int)objects.size(); 1.56 @@ -71,6 +85,15 @@ 1.57 return (int)cameras.size(); 1.58 } 1.59 1.60 +SceneNode *Scene::get_node(int idx) 1.61 +{ 1.62 + return nodes[idx]; 1.63 +} 1.64 + 1.65 +const SceneNode *Scene::get_node(int idx) const 1.66 +{ 1.67 + return nodes[idx]; 1.68 +} 1.69 1.70 Object *Scene::get_object(int idx) 1.71 { 1.72 @@ -108,8 +131,43 @@ 1.73 // TODO 1.74 } 1.75 1.76 - int nobj = get_object_count(); 1.77 - for(int i=0; i<nobj; i++) { 1.78 - objects[i]->draw(); 1.79 + int num_nodes = get_node_count(); 1.80 + for(int i=0; i<num_nodes; i++) { 1.81 + bool selected = false; 1.82 + 1.83 + for(size_t j=0; j<sel.size(); j++) { 1.84 + if(sel[j] == i) { 1.85 + selected = true; 1.86 + break; 1.87 + } 1.88 + } 1.89 + 1.90 + m3d_color(1, 1, selected ? 0.25 : 1); 1.91 + nodes[i]->draw(); 1.92 } 1.93 } 1.94 + 1.95 +void Scene::select(int s) 1.96 +{ 1.97 + for(size_t i=0; i<sel.size(); i++) { 1.98 + if(sel[i] == s) { 1.99 + return; 1.100 + } 1.101 + } 1.102 + sel.push_back(s); 1.103 +} 1.104 + 1.105 +void Scene::clear_selection() 1.106 +{ 1.107 + sel.clear(); 1.108 +} 1.109 + 1.110 +int Scene::get_selection_count() const 1.111 +{ 1.112 + return (int)sel.size(); 1.113 +} 1.114 + 1.115 +int Scene::get_selection(int idx) const 1.116 +{ 1.117 + return idx >= 0 && idx < (int)sel.size() ? sel[idx] : -1; 1.118 +}