public Vector3 IN(object[] args)
{
Vector3 outValue = Vector3.zero;
if (args [0] is GameObject) { // on an object
GameObject obj = ((GameObject)args [0]);
Bounds bounds = new Bounds ();
// check if object is concave
bool isConcave = false;
Voxeme voxeme = obj.GetComponent<Voxeme> ();
if (voxeme != null) {
isConcave = (voxeme.voxml.Type.Concavity == "Concave");
isConcave = (isConcave && Vector3.Dot(obj.transform.up,Vector3.up) > 0.5f);
}
//Debug.Log (isConcave);
if (isConcave) { // concavity activated
// get surface with concavity
// which side is concavity on? - assume +Y for now
bounds = Helper.GetObjectWorldSize (obj);
float concavityMinY = bounds.min.y;
foreach (Renderer renderer in obj.GetComponentsInChildren<Renderer>()) {
Debug.Log (renderer.gameObject.name + " " + Helper.GetObjectWorldSize (renderer.gameObject).min.y);
if (Helper.GetObjectWorldSize (renderer.gameObject).min.y > concavityMinY) {
concavityMinY = Helper.GetObjectWorldSize (renderer.gameObject).min.y;
}
}
outValue = new Vector3 (obj.transform.position.x,
concavityMinY,
obj.transform.position.z);
}
else { // concavity deactivated
outValue = new Vector3(float.NaN,float.NaN,float.NaN);
}
Debug.Log ("in: " + Helper.VectorToParsable (outValue));
}
else if (args [0] is Vector3) { // on a location
outValue = (Vector3)args[0];
}
return outValue;
}