diff --git a/parser/nodes.h b/parser/nodes.h index 7e76233..e8ebe75 100644 --- a/parser/nodes.h +++ b/parser/nodes.h @@ -325,6 +325,22 @@ class ScaleBlockNode : public ScaleNode bool isTransformBlock() { return true; } }; +class ScaleScalarNode : public Node +{ + public: + ScaleScalarNode(refptr expr) + : m_expr(expr) + { + } + refptr getVector() + { + double x = m_expr->getNumber(); + return new Vector(x, x, x); + } + protected: + refptr m_expr; +}; + class SceneNode : public Node { }; diff --git a/parser/parser.yy b/parser/parser.yy index 2372e9a..0ab8b37 100644 --- a/parser/parser.yy +++ b/parser/parser.yy @@ -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); } ;