diff --git a/parser/nodes.h b/parser/nodes.h index 0abcfce..fe3b634 100644 --- a/parser/nodes.h +++ b/parser/nodes.h @@ -84,35 +84,24 @@ class VectorNode : public Node { public: VectorNode(refptr a, refptr b, refptr c) + : m_a(a), m_b(b), m_c(c), m_direct(true) { - addChild(a); - addChild(b); - addChild(c); } VectorNode(refptr node) + : m_a(node), m_direct(false) { - addChild(node); } refptr getVector() { - if (m_children.size() == 1) - { - return m_children[0]->getVector(); - } - else if (m_children.size() == 3) - { - return new Vector( - m_children[0]->getNumber(), - m_children[1]->getNumber(), - m_children[2]->getNumber()); - } - else - { - std::cerr << "Warning: VectorNode::getVector() returning NULL!" - << std::endl; - return NULL; - } + return m_direct + ? new Vector(m_a->getNumber(), + m_b->getNumber(), + m_c->getNumber()) + : m_a->getVector(); } + protected: + refptr m_a, m_b, m_c; + bool m_direct; }; class AmbientNode : public VectorNode @@ -199,6 +188,7 @@ class JitterNode : public NumberNode { public: JitterNode(refptr e) : NumberNode(e) {} + int getInteger() { return getNumber(); } }; class LightNode : public Node