public override bool Calculate()
{
if (!allInputsReady ()) {
return false;
}
if (Inputs [0].connection != null) {
Input1Val = Inputs [0].connection.GetValue<GameObject> ();
CSGObject csg = Input1Val.GetComponent<CSGObject>();
if(csg == null)
csg = Input1Val.AddComponent<CSGObject>();
csg.GenerateSolid();
}
if (Inputs [1].connection != null) {
Input2Val = Inputs [1].connection.GetValue<GameObject> ();
CSGObject csg = Input2Val.GetComponent<CSGObject> ();
if (csg == null)
csg = Input2Val.AddComponent<CSGObject> ();
csg.GenerateSolid ();
}
if ((Input1Val != null) && (Input2Val != null)) {
solid1 = Input1Val.GetComponent<CSGObject> ().GetSolid ();
solid2 = Input2Val.GetComponent<CSGObject> ().GetSolid ();
modeller = new BooleanModeller (solid1, solid2);
output = null;
switch (type) {
case CalcType.Union:
output = modeller.getUnion ();
break;
case CalcType.Intersection:
output = modeller.getIntersection ();
break;
case CalcType.Difference:
output = modeller.getDifference ();
break;
}
if (output != null) {
string goname = string.Format ("CSGOut_{0}", (int)this.GetHashCode ());
GameObject gout = GameObject.Find (goname);
if (gout == null)
gout = new GameObject (goname);
CSGObject csg = gout.GetComponent<CSGObject>();
if(csg == null) csg = gout.AddComponent<CSGObject>();
csg.AssignSolid(output);
CSGGameObject.GenerateMesh (gout, objectMaterial, output);
Outputs [0].SetValue<GameObject> (gout);
}
} else
return false;
return true;
}