moved computation of numbers and vectors from parser.yy to Scene-load.cc
git-svn-id: svn://anubis/fart/branches/scene-file-scripting@318 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
parent
20017370f0
commit
2f825f29f9
118
parser/nodes.h
118
parser/nodes.h
@ -46,28 +46,60 @@ class IntegerNode : public Node
|
|||||||
class NumberNode : public Node
|
class NumberNode : public Node
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
NumberNode(double number) { m_number = number; }
|
NumberNode(double number)
|
||||||
double getNumber() { return m_number; }
|
{
|
||||||
|
m_number = number;
|
||||||
|
m_direct = true;
|
||||||
|
}
|
||||||
|
NumberNode(refptr<Node> expr)
|
||||||
|
{
|
||||||
|
addChild(expr);
|
||||||
|
m_direct = false;
|
||||||
|
}
|
||||||
|
double getNumber()
|
||||||
|
{
|
||||||
|
return m_direct ? m_number : m_children[0]->getNumber();
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
double m_number;
|
double m_number;
|
||||||
|
bool m_direct;
|
||||||
};
|
};
|
||||||
|
|
||||||
class VectorNode : public Node
|
class VectorNode : public Node
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
VectorNode(refptr<Vector> vector) { m_vector = vector; }
|
VectorNode(refptr<Node> a, refptr<Node> b, refptr<Node> c)
|
||||||
refptr<Vector> getVector() { return m_vector; }
|
{
|
||||||
|
addChild(a);
|
||||||
protected:
|
addChild(b);
|
||||||
refptr<Vector> m_vector;
|
addChild(c);
|
||||||
|
}
|
||||||
|
VectorNode(refptr<Node> node)
|
||||||
|
{
|
||||||
|
addChild(node);
|
||||||
|
}
|
||||||
|
refptr<Vector> 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());
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class AmbientNode : public VectorNode
|
class AmbientNode : public VectorNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AmbientNode(refptr<Vector> vector) : VectorNode(vector) {}
|
AmbientNode(refptr<Node> vector) : VectorNode(vector) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class AmbientOcclusionNode : public IntegerNode
|
class AmbientOcclusionNode : public IntegerNode
|
||||||
@ -89,7 +121,7 @@ class CameraNode : public Node
|
|||||||
class ColorNode : public VectorNode
|
class ColorNode : public VectorNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ColorNode(refptr<Vector> vector) : VectorNode(vector) {}
|
ColorNode(refptr<Node> vector) : VectorNode(vector) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class CylNode : public Node
|
class CylNode : public Node
|
||||||
@ -101,13 +133,13 @@ class CylNode : public Node
|
|||||||
class DiffuseNode : public VectorNode
|
class DiffuseNode : public VectorNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DiffuseNode(refptr<Vector> vector) : VectorNode(vector) {}
|
DiffuseNode(refptr<Node> vector) : VectorNode(vector) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ExposureNode : public NumberNode
|
class ExposureNode : public NumberNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ExposureNode(double d) : NumberNode(d) {}
|
ExposureNode(refptr<Node> e) : NumberNode(e) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ExtrudeNode : public Node
|
class ExtrudeNode : public Node
|
||||||
@ -144,10 +176,10 @@ class ItemsNode : public Node
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
class JitterNode : public IntegerNode
|
class JitterNode : public NumberNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
JitterNode(int i) : IntegerNode(i) {}
|
JitterNode(refptr<Node> e) : NumberNode(e) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class LightNode : public Node
|
class LightNode : public Node
|
||||||
@ -157,7 +189,7 @@ class LightNode : public Node
|
|||||||
class LookAtNode : public VectorNode
|
class LookAtNode : public VectorNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LookAtNode(refptr<Vector> vector) : VectorNode(vector) {}
|
LookAtNode(refptr<Node> vector) : VectorNode(vector) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class MaterialNode : public Node
|
class MaterialNode : public Node
|
||||||
@ -191,16 +223,16 @@ class MultisampleNode : public IntegerNode
|
|||||||
MultisampleNode(int i) : IntegerNode(i) {}
|
MultisampleNode(int i) : IntegerNode(i) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class NGonNode : public IntegerNode
|
class NGonNode : public NumberNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
NGonNode(int i) : IntegerNode(i) {}
|
NGonNode(refptr<Node> e) : NumberNode(e) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class OffsetNode : public NumberNode
|
class OffsetNode : public NumberNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
OffsetNode(double d) : NumberNode(d) {}
|
OffsetNode(refptr<Node> e) : NumberNode(e) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class OptionsNode : public Node
|
class OptionsNode : public Node
|
||||||
@ -213,20 +245,18 @@ class PlaneNode : public Node
|
|||||||
bool isShape() { return true; }
|
bool isShape() { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class PlanePositionNode : public Node
|
class PlanePositionNode : public VectorNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PlanePositionNode(refptr<Vector> vec, double dist)
|
PlanePositionNode(refptr<Node> vec_node, refptr<Node> dist)
|
||||||
|
: VectorNode(vec_node)
|
||||||
{
|
{
|
||||||
m_vector = vec;
|
|
||||||
m_dist = dist;
|
m_dist = dist;
|
||||||
}
|
}
|
||||||
refptr<Vector> getVector() { return m_vector; }
|
double getNumber() { return m_dist->getNumber(); }
|
||||||
double getNumber() { return m_dist; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
refptr<Vector> m_vector;
|
refptr<Node> m_dist;
|
||||||
double m_dist;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class PolygonNode : public Node
|
class PolygonNode : public Node
|
||||||
@ -236,53 +266,53 @@ class PolygonNode : public Node
|
|||||||
class PositionNode : public VectorNode
|
class PositionNode : public VectorNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PositionNode(refptr<Vector> vector) : VectorNode(vector) {}
|
PositionNode(refptr<Node> vector) : VectorNode(vector) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class RadiusNode : public NumberNode
|
class RadiusNode : public NumberNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RadiusNode(double d) : NumberNode(d) {}
|
RadiusNode(refptr<Node> e) : NumberNode(e) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ReflectanceNode : public NumberNode
|
class ReflectanceNode : public NumberNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ReflectanceNode(double d) : NumberNode(d) {}
|
ReflectanceNode(refptr<Node> e) : NumberNode(e) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class RotateNode : public VectorNode
|
class RotateNode : public VectorNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RotateNode(double angle, refptr<Vector> vector)
|
RotateNode(refptr<Node> angle, refptr<Node> vec_node)
|
||||||
: VectorNode(vector)
|
: VectorNode(vec_node)
|
||||||
{
|
{
|
||||||
m_angle = angle;
|
m_angle = angle;
|
||||||
}
|
}
|
||||||
double getNumber() { return m_angle; }
|
double getNumber() { return m_angle->getNumber(); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
double m_angle;
|
refptr<Node> m_angle;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RotateBlockNode : public RotateNode
|
class RotateBlockNode : public RotateNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RotateBlockNode(double angle, refptr<Vector> vector)
|
RotateBlockNode(refptr<Node> angle, refptr<Node> vec_node)
|
||||||
: RotateNode(angle, vector) {}
|
: RotateNode(angle, vec_node) {}
|
||||||
bool isTransformBlock() { return true; }
|
bool isTransformBlock() { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class ScaleNode : public VectorNode
|
class ScaleNode : public VectorNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ScaleNode(refptr<Vector> vector) : VectorNode(vector) {}
|
ScaleNode(refptr<Node> vector) : VectorNode(vector) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ScaleBlockNode : public ScaleNode
|
class ScaleBlockNode : public ScaleNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ScaleBlockNode(refptr<Vector> vector) : ScaleNode(vector) {}
|
ScaleBlockNode(refptr<Node> vector) : ScaleNode(vector) {}
|
||||||
bool isTransformBlock() { return true; }
|
bool isTransformBlock() { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -306,19 +336,19 @@ class ShapeRefNode : public IdentifierNode
|
|||||||
class ShininessNode : public NumberNode
|
class ShininessNode : public NumberNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ShininessNode(double d) : NumberNode(d) {}
|
ShininessNode(refptr<Node> e) : NumberNode(e) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class SizeNode : public VectorNode
|
class SizeNode : public VectorNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SizeNode(refptr<Vector> vector) : VectorNode(vector) {}
|
SizeNode(refptr<Node> vector) : VectorNode(vector) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class SpecularNode : public VectorNode
|
class SpecularNode : public VectorNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SpecularNode(refptr<Vector> vector) : VectorNode(vector) {}
|
SpecularNode(refptr<Node> vector) : VectorNode(vector) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class SphereNode : public Node
|
class SphereNode : public Node
|
||||||
@ -336,20 +366,20 @@ class SubtractNode : public Node
|
|||||||
class TranslateNode : public VectorNode
|
class TranslateNode : public VectorNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TranslateNode(refptr<Vector> vector) : VectorNode(vector) {}
|
TranslateNode(refptr<Node> vector) : VectorNode(vector) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class TranslateBlockNode : public TranslateNode
|
class TranslateBlockNode : public TranslateNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TranslateBlockNode(refptr<Vector> vector) : TranslateNode(vector) {}
|
TranslateBlockNode(refptr<Node> vector) : TranslateNode(vector) {}
|
||||||
bool isTransformBlock() { return true; }
|
bool isTransformBlock() { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class TransparencyNode : public NumberNode
|
class TransparencyNode : public NumberNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TransparencyNode(double d) : NumberNode(d) {}
|
TransparencyNode(refptr<Node> e) : NumberNode(e) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class UnionNode : public Node
|
class UnionNode : public Node
|
||||||
@ -361,13 +391,13 @@ class UnionNode : public Node
|
|||||||
class UpNode : public VectorNode
|
class UpNode : public VectorNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
UpNode(refptr<Vector> vector) : VectorNode(vector) {}
|
UpNode(refptr<Node> vector) : VectorNode(vector) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class VFOVNode : public NumberNode
|
class VFOVNode : public NumberNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
VFOVNode(double d) : NumberNode(d) {}
|
VFOVNode(refptr<Node> e) : NumberNode(e) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class WidthNode : public IntegerNode
|
class WidthNode : public IntegerNode
|
||||||
|
@ -144,7 +144,7 @@ box_items: /* empty */
|
|||||||
;
|
;
|
||||||
|
|
||||||
box_item: SIZE vector3 {
|
box_item: SIZE vector3 {
|
||||||
$$ = new SizeNode($2->getVector());
|
$$ = new SizeNode($2);
|
||||||
}
|
}
|
||||||
| shape_item { $$ = $1; }
|
| shape_item { $$ = $1; }
|
||||||
;
|
;
|
||||||
@ -164,16 +164,16 @@ camera_items: /* empty */
|
|||||||
;
|
;
|
||||||
|
|
||||||
camera_item: POSITION vector3 {
|
camera_item: POSITION vector3 {
|
||||||
$$ = new PositionNode($2->getVector());
|
$$ = new PositionNode($2);
|
||||||
}
|
}
|
||||||
| LOOKAT vector3 {
|
| LOOKAT vector3 {
|
||||||
$$ = new LookAtNode($2->getVector());
|
$$ = new LookAtNode($2);
|
||||||
}
|
}
|
||||||
| UP vector3 {
|
| UP vector3 {
|
||||||
$$ = new UpNode($2->getVector());
|
$$ = new UpNode($2);
|
||||||
}
|
}
|
||||||
| VFOV expression {
|
| VFOV expression {
|
||||||
$$ = new VFOVNode($2->getNumber());
|
$$ = new VFOVNode($2);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -192,7 +192,7 @@ cyl_items: /* empty */
|
|||||||
;
|
;
|
||||||
|
|
||||||
cyl_item: SIZE vector3 {
|
cyl_item: SIZE vector3 {
|
||||||
$$ = new SizeNode($2->getVector());
|
$$ = new SizeNode($2);
|
||||||
}
|
}
|
||||||
| shape_item { $$ = $1; }
|
| shape_item { $$ = $1; }
|
||||||
;
|
;
|
||||||
@ -224,7 +224,7 @@ intersect: INTERSECT LCURLY bool_items RCURLY {
|
|||||||
;
|
;
|
||||||
|
|
||||||
jitter: JITTER expression {
|
jitter: JITTER expression {
|
||||||
$$ = new JitterNode($2->getInteger());
|
$$ = new JitterNode($2);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -243,16 +243,16 @@ light_items: /* empty */
|
|||||||
;
|
;
|
||||||
|
|
||||||
light_item: POSITION vector3 {
|
light_item: POSITION vector3 {
|
||||||
$$ = new PositionNode($2->getVector());
|
$$ = new PositionNode($2);
|
||||||
}
|
}
|
||||||
| DIFFUSE vector3 {
|
| DIFFUSE vector3 {
|
||||||
$$ = new DiffuseNode($2->getVector());
|
$$ = new DiffuseNode($2);
|
||||||
}
|
}
|
||||||
| SPECULAR vector3 {
|
| SPECULAR vector3 {
|
||||||
$$ = new SpecularNode($2->getVector());
|
$$ = new SpecularNode($2);
|
||||||
}
|
}
|
||||||
| COLOR vector3 {
|
| COLOR vector3 {
|
||||||
$$ = new ColorNode($2->getVector());
|
$$ = new ColorNode($2);
|
||||||
}
|
}
|
||||||
| radius {
|
| radius {
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
@ -277,25 +277,25 @@ material_items: /* empty */
|
|||||||
;
|
;
|
||||||
|
|
||||||
material_item: COLOR vector3 {
|
material_item: COLOR vector3 {
|
||||||
$$ = new ColorNode($2->getVector());
|
$$ = new ColorNode($2);
|
||||||
}
|
}
|
||||||
| AMBIENT vector3 {
|
| AMBIENT vector3 {
|
||||||
$$ = new AmbientNode($2->getVector());
|
$$ = new AmbientNode($2);
|
||||||
}
|
}
|
||||||
| DIFFUSE vector3 {
|
| DIFFUSE vector3 {
|
||||||
$$ = new DiffuseNode($2->getVector());
|
$$ = new DiffuseNode($2);
|
||||||
}
|
}
|
||||||
| SPECULAR vector3 {
|
| SPECULAR vector3 {
|
||||||
$$ = new SpecularNode($2->getVector());
|
$$ = new SpecularNode($2);
|
||||||
}
|
}
|
||||||
| REFLECTANCE expression {
|
| REFLECTANCE expression {
|
||||||
$$ = new ReflectanceNode($2->getNumber());
|
$$ = new ReflectanceNode($2);
|
||||||
}
|
}
|
||||||
| SHININESS expression {
|
| SHININESS expression {
|
||||||
$$ = new ShininessNode($2->getNumber());
|
$$ = new ShininessNode($2);
|
||||||
}
|
}
|
||||||
| TRANSPARENCY expression {
|
| TRANSPARENCY expression {
|
||||||
$$ = new TransparencyNode($2->getNumber());
|
$$ = new TransparencyNode($2);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -315,16 +315,16 @@ number: DEC_NUMBER { $$ = $1; }
|
|||||||
;
|
;
|
||||||
|
|
||||||
ngon: NGON DEC_NUMBER COMMA expression {
|
ngon: NGON DEC_NUMBER COMMA expression {
|
||||||
$$ = new NGonNode($2->getInteger());
|
$$ = new NGonNode($2);
|
||||||
$$->addChild(new RadiusNode($4->getNumber()));
|
$$->addChild(new RadiusNode($4));
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
offset: OFFSET expression {
|
offset: OFFSET expression {
|
||||||
$$ = new OffsetNode($2->getNumber());
|
$$ = new OffsetNode($2);
|
||||||
}
|
}
|
||||||
| OFFSET expression LCURLY offset_items RCURLY {
|
| OFFSET expression LCURLY offset_items RCURLY {
|
||||||
$$ = new OffsetNode($2->getNumber());
|
$$ = new OffsetNode($2);
|
||||||
$$->addChildren($4);
|
$$->addChildren($4);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
@ -338,14 +338,13 @@ offset_items: /* empty */
|
|||||||
;
|
;
|
||||||
|
|
||||||
offset_item: SCALE expression {
|
offset_item: SCALE expression {
|
||||||
$$ = new ScaleNode(new Vector($2->getNumber(), $2->getNumber(),
|
$$ = new ScaleNode(new VectorNode($2, $2, $2));
|
||||||
$2->getNumber()));
|
|
||||||
}
|
}
|
||||||
| SCALE vector2 {
|
| SCALE vector2 {
|
||||||
$$ = new ScaleNode($2->getVector());
|
$$ = new ScaleNode($2);
|
||||||
}
|
}
|
||||||
| POSITION vector2 {
|
| POSITION vector2 {
|
||||||
$$ = new PositionNode($2->getVector());
|
$$ = new PositionNode($2);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -376,10 +375,10 @@ options_item: WIDTH DEC_NUMBER {
|
|||||||
$$ = new MaxDepthNode($2->getInteger());
|
$$ = new MaxDepthNode($2->getInteger());
|
||||||
}
|
}
|
||||||
| EXPOSURE expression {
|
| EXPOSURE expression {
|
||||||
$$ = new ExposureNode($2->getNumber());
|
$$ = new ExposureNode($2);
|
||||||
}
|
}
|
||||||
| AMBIENT vector3 {
|
| AMBIENT vector3 {
|
||||||
$$ = new AmbientNode($2->getVector());
|
$$ = new AmbientNode($2);
|
||||||
}
|
}
|
||||||
| AMBIENT_OCCLUSION DEC_NUMBER {
|
| AMBIENT_OCCLUSION DEC_NUMBER {
|
||||||
$$ = new AmbientOcclusionNode($2->getInteger());
|
$$ = new AmbientOcclusionNode($2->getInteger());
|
||||||
@ -401,7 +400,7 @@ plane_items: /* empty */
|
|||||||
;
|
;
|
||||||
|
|
||||||
plane_item: POSITION vector3 COMMA expression {
|
plane_item: POSITION vector3 COMMA expression {
|
||||||
$$ = new PlanePositionNode($2->getVector(), $4->getNumber());
|
$$ = new PlanePositionNode($2, $4);
|
||||||
}
|
}
|
||||||
| shape_item { $$ = $1; }
|
| shape_item { $$ = $1; }
|
||||||
;
|
;
|
||||||
@ -424,7 +423,7 @@ polygon_item: vector2 { $$ = $1; }
|
|||||||
;
|
;
|
||||||
|
|
||||||
radius: RADIUS expression {
|
radius: RADIUS expression {
|
||||||
$$ = new RadiusNode($2->getNumber());
|
$$ = new RadiusNode($2);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -510,36 +509,33 @@ subtract: SUBTRACT LCURLY bool_items RCURLY {
|
|||||||
;
|
;
|
||||||
|
|
||||||
transform: TRANSLATE vector3 {
|
transform: TRANSLATE vector3 {
|
||||||
$$ = new TranslateNode($2->getVector());
|
$$ = new TranslateNode($2);
|
||||||
}
|
}
|
||||||
| ROTATE expression COMMA vector3 {
|
| ROTATE expression COMMA vector3 {
|
||||||
$$ = new RotateNode($2->getNumber(), $4->getVector());
|
$$ = new RotateNode($2, $4);
|
||||||
}
|
}
|
||||||
| SCALE vector3 {
|
| SCALE vector3 {
|
||||||
$$ = new ScaleNode($2->getVector());
|
$$ = new ScaleNode($2);
|
||||||
}
|
}
|
||||||
| SCALE expression {
|
| SCALE expression {
|
||||||
$$ = new ScaleNode(new Vector($2->getNumber(),
|
$$ = new ScaleNode(new VectorNode($2, $2, $2));
|
||||||
$2->getNumber(), $2->getNumber()));
|
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
transform_block: TRANSLATE vector3 LCURLY transform_block_items RCURLY {
|
transform_block: TRANSLATE vector3 LCURLY transform_block_items RCURLY {
|
||||||
$$ = new TranslateBlockNode($2->getVector());
|
$$ = new TranslateBlockNode($2);
|
||||||
$$->addChildren($4);
|
$$->addChildren($4);
|
||||||
}
|
}
|
||||||
| ROTATE expression COMMA vector3 LCURLY transform_block_items RCURLY {
|
| ROTATE expression COMMA vector3 LCURLY transform_block_items RCURLY {
|
||||||
$$ = new RotateBlockNode($2->getNumber(), $4->getVector());
|
$$ = new RotateBlockNode($2, $4);
|
||||||
$$->addChildren($6);
|
$$->addChildren($6);
|
||||||
}
|
}
|
||||||
| SCALE vector3 LCURLY transform_block_items RCURLY {
|
| SCALE vector3 LCURLY transform_block_items RCURLY {
|
||||||
$$ = new ScaleBlockNode($2->getVector());
|
$$ = new ScaleBlockNode($2);
|
||||||
$$->addChildren($4);
|
$$->addChildren($4);
|
||||||
}
|
}
|
||||||
| SCALE expression LCURLY transform_block_items RCURLY {
|
| SCALE expression LCURLY transform_block_items RCURLY {
|
||||||
$$ = new ScaleBlockNode(
|
$$ = new ScaleBlockNode(new VectorNode($2, $2, $2));
|
||||||
new Vector($2->getNumber(), $2->getNumber(),
|
|
||||||
$2->getNumber()));
|
|
||||||
$$->addChildren($4);
|
$$->addChildren($4);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
@ -564,16 +560,12 @@ union: UNION LCURLY bool_items RCURLY {
|
|||||||
;
|
;
|
||||||
|
|
||||||
vector2: LESS expression COMMA expression GREATER {
|
vector2: LESS expression COMMA expression GREATER {
|
||||||
refptr<Vector> vec =
|
$$ = new VectorNode($2, $4, new NumberNode(0.0));
|
||||||
new Vector($2->getNumber(), $4->getNumber(), 0.0);
|
|
||||||
$$ = new VectorNode(vec);
|
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
vector3: LESS expression COMMA expression COMMA expression GREATER {
|
vector3: LESS expression COMMA expression COMMA expression GREATER {
|
||||||
refptr<Vector> vec =
|
$$ = new VectorNode($2, $4, $6);
|
||||||
new Vector($2->getNumber(), $4->getNumber(), $6->getNumber());
|
|
||||||
$$ = new VectorNode(vec);
|
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user