Game Development Community

Object direction in respect to another

by Ronald J Nelson · in Torque Game Engine Advanced · 05/17/2008 (5:41 pm) · 2 replies

I am working on another aspect of a collision damage application and find I need some help with this.

How can I determine the percentage that one object is facing another? In script preferred.

#1
05/17/2008 (6:28 pm)
Try this code:

function GetAngle(%sourceObj,%targetObj)
{
	return check2DAngletoTarget(%sourceObj,%targetObj);
	%eyeVec =VectorNormalize(%sourceObj.getEyeVector());
	%toObjVec =VectorSub(%targetObj.getPosition(),%sourceObj.getPosition());
	%dot =VectorDot(%eyeVec,VectorNormalize(%toObjVec));
	%rad =mAcos(%dot);
	return mRadToDeg(%rad);
}

function getAngleofVector(%vec)
{
	%vector = VectorNormalize(%vec);
	%vecx = getWord(%vector,0);
	%vecy = getWord(%vector,1);
	if(%vecx >= 0 && %vecy >= 0)
		%quad = 1;
	else
		if(%vecx >= 0 && %vecy < 0)
	  	%quad = 2;
	  else
	  	if(%vecx < 0 && %vecy < 0)
	    	%quad = 3;
	    else 
	    	%quad = 4;
	%angle = mATan(%vecy/%vecx, -1);
	%degangle = mRadToDeg(%angle);
	switch(%quad)
	{
		case 1:
	  	%angle = %degangle-90;
	  case 2:
	  	%angle = %degangle+270;
	  case 3:
	  	%angle = %degangle+90;
	  case 4:
	  	%angle = %degangle+450;
	}
  if (%angle < 0)  %angle = %angle + 360;
  return %angle;
}
                  
                  
function check2DAngletoTarget(%obj, %tgt)
{
	%eyeVec = VectorNormalize(%obj.getEyeVector());
	%eyeangle = getAngleofVector(%eyeVec);
	%posVec = VectorSub(%tgt.getPosition(), %obj.getPosition());
	%posangle = getAngleofVector(%posVec);
	%angle = %posangle - %eyeAngle;
	%angle = %angle ? %angle : %angle * -1;
     if (%angle < 0)  %angle = %angle + 360;
     
     if(%angle > 180)
          %angle = 360 - %angle;

	//echo("ANGLE:" SPC %angle);
	
	return %angle;
}

%angle = GetAngle(%player1, %player2);
#2
05/17/2008 (7:05 pm)
Thankyou very much Peter.

Ironically, I had these functions in my AI script and never even thought about them.