X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=blobdiff_plain;f=src%2Fsnode.cc;h=bce8c0a4c42cbd995c91f8ee578d5702354fbf8e;hp=ffb1d085a33a490e72a0a313a302e56e678ecfe3;hb=82a1d96d9a18e94ccdc13b4bda0c470e81e70768;hpb=dbcb9345c23c5c027d808915962843e7db2d14aa diff --git a/src/snode.cc b/src/snode.cc index ffb1d08..bce8c0a 100644 --- a/src/snode.cc +++ b/src/snode.cc @@ -3,6 +3,7 @@ #include #include "snode.h" #include "objmesh.h" +#include "dbg_gui.h" SceneNode::SceneNode() : scale(1, 1, 1) @@ -10,6 +11,7 @@ SceneNode::SceneNode() scene = 0; parent = 0; name = 0; + bvol_valid = false; } SceneNode::SceneNode(Object *obj) @@ -18,6 +20,7 @@ SceneNode::SceneNode(Object *obj) scene = 0; parent = 0; name = 0; + bvol_valid = false; add_object(obj); } @@ -52,6 +55,8 @@ void SceneNode::add_child(SceneNode *node) children.push_back(node); node->parent = this; node->scene = scene; + + bvol_valid = false; } bool SceneNode::remove_child(SceneNode *node) @@ -64,6 +69,8 @@ bool SceneNode::remove_child(SceneNode *node) node->parent = 0; node->scene = 0; children.erase(it); + + bvol_valid = false; return true; } return false; @@ -94,6 +101,8 @@ void SceneNode::add_object(Object *obj) this->obj.push_back(obj); obj->node = this; + + bvol_valid = false; } bool SceneNode::remove_object(Object *o) @@ -108,6 +117,8 @@ bool SceneNode::remove_object(Object *o) return false; } obj.erase(it); + + bvol_valid = false; return true; } @@ -194,12 +205,26 @@ void SceneNode::update_node(float dt) void SceneNode::update(float dt) { + bool expanded = false; + + if(debug_gui) { + if(parent_expanded) { + int flags = children.empty() ? ImGuiTreeNodeFlags_Leaf : 0; + expanded = ImGui::TreeNodeEx(name ? name : "", flags); + } + } + update_node(dt); int num = children.size(); for(int i=0; iupdate(dt); } + + if(debug_gui && expanded) { + ImGui::TreePop(); + } } void SceneNode::apply_xform() @@ -261,3 +286,16 @@ bool SceneNode::intersect(const Ray &ray, HitPoint *hit) const } return false; } + +const Box &SceneNode::calc_bounds() +{ + // TODO +} + +const Box &SceneNode::get_bounds() const +{ + if(!bvol_valid) { + return ((SceneNode*)this)->calc_bounds(); + } + return bvol; +}