introduced ScaleScalarNode() node type to avoid evaluating expression multiple times

git-svn-id: svn://anubis/fart/branches/scene-file-scripting@327 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
Josh Holtrop 2010-10-01 15:01:51 +00:00
parent 741ca57e11
commit cd2f565df3
2 changed files with 19 additions and 3 deletions

View File

@ -325,6 +325,22 @@ class ScaleBlockNode : public ScaleNode
bool isTransformBlock() { return true; }
};
class ScaleScalarNode : public Node
{
public:
ScaleScalarNode(refptr<Node> expr)
: m_expr(expr)
{
}
refptr<Vector> getVector()
{
double x = m_expr->getNumber();
return new Vector(x, x, x);
}
protected:
refptr<Node> m_expr;
};
class SceneNode : public Node
{
};

View File

@ -365,7 +365,7 @@ offset_items: /* empty */
;
offset_item: SCALE expression {
$$ = new ScaleNode(new VectorNode($2, $2, $2));
$$ = new ScaleNode(new ScaleScalarNode($2));
}
| SCALE vector2 {
$$ = new ScaleNode($2);
@ -542,7 +542,7 @@ transform: TRANSLATE vector3 {
$$ = new ScaleNode($2);
}
| SCALE expression {
$$ = new ScaleNode(new VectorNode($2, $2, $2));
$$ = new ScaleNode(new ScaleScalarNode($2));
}
;
@ -559,7 +559,7 @@ transform_block: TRANSLATE vector3 LCURLY general_items RCURLY {
$$->addChildren($4);
}
| SCALE expression LCURLY general_items RCURLY {
$$ = new ScaleBlockNode(new VectorNode($2, $2, $2));
$$ = new ScaleBlockNode(new ScaleScalarNode($2));
$$->addChildren($4);
}
;