#include <assert.h>
#include <algorithm>
#include "snode.h"
+#include "objmesh.h"
SceneNode::SceneNode()
: scale(1, 1, 1)
{
+ scene = 0;
parent = 0;
name = 0;
}
SceneNode::SceneNode(Object *obj)
: scale(1, 1, 1)
{
+ scene = 0;
parent = 0;
name = 0;
add_object(obj);
children.push_back(node);
node->parent = this;
+ node->scene = scene;
}
bool SceneNode::remove_child(SceneNode *node)
if(it != children.end()) {
assert(node->parent == this);
node->parent = 0;
+ node->scene = 0;
+ children.erase(it);
return true;
}
return false;
{
update_node(dt);
- for(size_t i=0; i<children.size(); i++) {
+ int num = children.size();
+ for(int i=0; i<num; i++) {
children[i]->update(dt);
}
}
+void SceneNode::apply_xform()
+{
+ update_node();
+
+ // apply post-order to make sure we don't affect the children xform by our reset
+
+ int nchild = children.size();
+ for(int i=0; i<nchild; i++) {
+ children[i]->apply_xform();
+ }
+
+ int nobj = obj.size();
+ for(int i=0; i<nobj; i++) {
+ if(obj[i]->get_type() == OBJ_MESH) {
+ ObjMesh *om = (ObjMesh*)obj[i];
+ if(om->mesh) {
+ om->mesh->apply_xform(xform);
+ }
+ }
+ }
+
+ pos = Vec3(0, 0, 0);
+ rot = Quat::identity;
+ scale = Vec3(1, 1, 1);
+}
bool SceneNode::intersect(const Ray &ray, HitPoint *hit) const
{