public void GRASP(object[] args)
{
GameObject agent = GameObject.FindGameObjectWithTag ("Agent");
if (agent != null) {
Bounds bounds = Helper.GetObjectWorldSize((args[0] as GameObject));
Animator anim = agent.GetComponentInChildren<Animator> ();
GameObject leftGrasper = anim.GetBoneTransform (HumanBodyBones.LeftHand).transform.gameObject;
GameObject rightGrasper = anim.GetBoneTransform (HumanBodyBones.RightHand).transform.gameObject;
GameObject grasper;
Transform leftGraspTracker = agent.GetComponent<IKControl> ().leftHandObj;
Transform rightGraspTracker = agent.GetComponent<IKControl> ().rightHandObj;
Vector3 offset = agent.GetComponent<GraspScript> ().graspTrackerOffset;
// make sure we're reaching toward the object first
if (!bounds.Contains(leftGraspTracker.position-offset) &&
!bounds.Contains(rightGraspTracker.position-offset)) {
eventManager.InsertEvent (string.Format ("reach({0})", (args[0] as GameObject).name), 0);
//eventManager.RemoveEvent (eventManager.events.Count - 1);
return;
}
if (args [args.Length - 1] is bool) {
if ((bool)args [args.Length - 1] == true) {
foreach (object arg in args) {
if (arg is GameObject) {
//Debug.Log (rightGrasper.GetComponent<BoxCollider> ().bounds);
//Debug.Log (bounds);
if (leftGrasper.GetComponent<BoxCollider>().bounds.Intersects(bounds)) {
(arg as GameObject).GetComponent<Rigging> ().ActivatePhysics (false);
RiggingHelper.RigTo ((arg as GameObject), leftGrasper);
Voxeme voxeme = (arg as GameObject).GetComponent<Voxeme> ();
voxeme.enabled = true;
voxeme.isGrasped = true;
voxeme.graspTracker = agent.GetComponent<IKControl>().leftHandObj;
voxeme.grasperCoord = agent.GetComponent<GraspScript>().leftGrasperCoord;
}
else if (rightGrasper.GetComponent<BoxCollider>().bounds.Intersects(bounds)) {
(arg as GameObject).GetComponent<Rigging> ().ActivatePhysics (false);
RiggingHelper.RigTo ((arg as GameObject), rightGrasper);
Voxeme voxeme = (arg as GameObject).GetComponent<Voxeme> ();
voxeme.enabled = true;
voxeme.isGrasped = true;
voxeme.graspTracker = agent.GetComponent<IKControl>().rightHandObj;
voxeme.grasperCoord = agent.GetComponent<GraspScript>().rightGrasperCoord;
}
else {
OutputHelper.PrintOutput(OutputController.Role.Affector,"I can't grasp the " + (arg as GameObject).name + ". I'm not touching it.");
}
}
}
}
}
}
}