package com.pixelmaid.dresscode.antlr.types.tree.functions;
import java.util.List;
import com.pixelmaid.dresscode.antlr.types.VarType;
import com.pixelmaid.dresscode.antlr.types.tree.DCNode;
import com.pixelmaid.dresscode.antlr.types.tree.NodeEvent;
import com.pixelmaid.dresscode.drawing.math.Geom;
import com.pixelmaid.dresscode.drawing.primitive2d.Drawable;
public class DistanceNode extends NodeEvent implements DCNode{
protected List<DCNode> params;
public DistanceNode(List<DCNode> ps) {
params = ps;
}
@Override
public VarType evaluate() {
if(params.size()!=2){
throw new RuntimeException("Incorrect number of parameters for distance");
}
else{
VarType v1 = params.get(0).evaluate();
VarType v2 = params.get(1).evaluate();
if(!(v1.isDrawable())||!(v2.isDrawable())){
throw new RuntimeException("distance can only be done between two drawables: " + this);
}
Drawable d1 = v1.asDrawable();
Drawable d2 = v2.asDrawable();
Double d = Geom.distance(d1.getOrigin(),d2.getOrigin());
return new VarType(d);
}
}
}