public void REACH(object[] args)
{
GameObject agent = GameObject.FindGameObjectWithTag ("Agent");
if (agent != null) {
Animator anim = agent.GetComponentInChildren<Animator> ();
GameObject leftGrasper = anim.GetBoneTransform (HumanBodyBones.LeftHand).transform.gameObject;
GameObject rightGrasper = anim.GetBoneTransform (HumanBodyBones.RightHand).transform.gameObject;
GameObject grasper;
GraspScript graspController = agent.GetComponent<GraspScript> ();
Transform leftGrasperCoord = graspController.leftGrasperCoord;
Transform rightGrasperCoord = graspController.rightGrasperCoord;
Vector3 offset = graspController.graspTrackerOffset;
if (args [args.Length - 1] is bool) {
if ((bool)args [args.Length - 1] == true) {
foreach (object arg in args) {
if (arg is GameObject) {
// find bounds corner closest to grasper
Bounds bounds = Helper.GetObjectWorldSize((arg as GameObject));
// which hand is closer?
float leftToGoalDist = (leftGrasper.transform.position-bounds.ClosestPoint(leftGrasper.transform.position)).magnitude;
float rightToGoalDist = (rightGrasper.transform.position-bounds.ClosestPoint(rightGrasper.transform.position)).magnitude;
if (leftToGoalDist < rightToGoalDist) {
grasper = leftGrasper;
}
else {
grasper = rightGrasper;
}
IKControl ikControl = agent.GetComponent<IKControl> ();
if (ikControl != null) {
Vector3 target;
if (grasper == leftGrasper) {
agent.GetComponent<GraspScript>().grasper = (int)Gestures.HandPose.LeftClaw;
if ((grasper.GetComponent<BoxCollider> ().bounds.size.x > bounds.size.x) &&
(grasper.GetComponent<BoxCollider> ().bounds.size.z > bounds.size.z)) {
target = new Vector3 (bounds.center.x, bounds.center.y, bounds.center.z);
}
else {
target = new Vector3 (bounds.min.x, bounds.center.y, bounds.center.z);
}
ikControl.leftHandObj.transform.position = target+offset;
}
else {
agent.GetComponent<GraspScript>().grasper = (int)Gestures.HandPose.RightClaw;
if ((grasper.GetComponent<BoxCollider> ().bounds.size.x > bounds.size.x) &&
(grasper.GetComponent<BoxCollider> ().bounds.size.z > bounds.size.z)) {
target = new Vector3 (bounds.center.x, bounds.center.y, bounds.center.z);
}
else {
target = new Vector3 (bounds.max.x, bounds.center.y, bounds.center.z);
}
ikControl.rightHandObj.transform.position = target+offset;
}
}
}
}
}
}
}
}