diff --git a/main/Scene-load.cc b/main/Scene-load.cc index b85dd12..53e2584 100644 --- a/main/Scene-load.cc +++ b/main/Scene-load.cc @@ -21,7 +21,12 @@ void Scene::load(const char * filename) refptr node = parse(filename, scope); if ( ! node.isNull() ) { - processScene(node); + refptr dummy = new Node(); + /* evaluate any scripting nodes in the node tree */ + node->evaluate(dummy); + + /* now we have a new node tree under 'dummy' with no scripting nodes */ + processScene(dummy->getChildren()[0]); } } @@ -233,14 +238,6 @@ vector Scene::processGeneralItems(refptr node) { shapes.push_back(processShape(*it)); } - else if ( typeid(**it) == typeid(ForNode) ) - { - incoming = processForNode(*it); - } - else if ( (*it)->isExpression() ) - { - (*it)->getNumber(); /* evaluate the expression */ - } while (incoming.size() > 0) { shapes.push_back(incoming[0]); diff --git a/parser/nodes.h b/parser/nodes.h index 62fe405..4dffee1 100644 --- a/parser/nodes.h +++ b/parser/nodes.h @@ -47,6 +47,19 @@ class Node std::cerr << "Warning: Node::getNode() called!" << std::endl; return NULL; } + virtual void evaluate(refptr parent) + { + std::cerr << "Warning: Node::evaluate() called!" << std::endl; + } + virtual void evaluateChildren(refptr parent) + { + for (std::vector< refptr >::iterator it = m_children.begin(); + it != m_children.end(); + it++) + { + (*it)->evaluate(parent); + } + } virtual bool isShape() { return false; } virtual bool isMaterial() { return false; }