[HELP] How to find the angle to set player's front for a certain position?
#1

I need a function as SetPlayerLookAt...

This function is not SetPlayerCameraLookAt that change the position of the player's camera while SetPlayerLookAt should change the player's angle, in other words, the function should turn the player's front for a certain position.

Thanks and sorry bad english...
Reply
#2

SetPlayerFacingAngle ?
Reply
#3

SetPlayerFacingAngle(playerid,angle) change the angle of player based on angle informed

I need this a function as:

SetPlayerFacingAngleEx(playerid,x,y) that change the angle of player based on position where the player should be turned
Reply
#4

pawn Код:
stock SetPlayerLookAt(playerid, Float:X, Float:Y)
{
    new
      Float:pX,
      Float:pY,
      Float:pZ;
    GetPlayerPos(playerid, pX, pY, pZ);
    return SetPlayerFacingAngle(playerid, -acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);
}
Reply
#5

Thanks for reply, but something is wrong...
Look this image /imageshack/img215/9972/imagemso.jpg
I tried to turn the player for the vehicle position

Reply
#6

Somebody can verify that, I really don't understand this function type...
Reply
#7

Oh, acos and SetPlayerFacingAngle tick the angle from different axes, so we need a little push it.
I've edited that function above and tested, should work.
Reply
#8

I found that by Webflashing on http://forum.sa-mp.com/index.php?top...9696#msg479696

I think that will help if the rotation Z of the objects is the same thing of the ANGLE for the players

pawn Код:
stock SetObjectToFaceCords(objectid, Float:x1, Float:y1, Float:z1)
{

    new Float:x2,Float:y2,Float:z2;
    GetObjectPos(objectid, x2,y2,z2);

    new Float:DX = floatabs(x2-x1);
    new Float:DY = floatabs(y2-y1);
    new Float:DZ = floatabs(z2-z1);

  new Float:yaw = 0;
  new Float:pitch = 0;

    if(DY == 0 || DX == 0)
    {
      if(DY == 0 && DX > 0) {
            yaw = 00;
            pitch = 0; }
        else if(DY == 0 && DX < 0) {
            yaw = 180;
            pitch = 180; }
        else if(DY > 0 && DX == 0) {
            yaw = 90;
            pitch = 90; }
        else if(DY < 0 && DX == 0) {
            yaw = 270;
            pitch = 270; }
        else if(DY == 0 && DX == 0) {
            yaw = 0;
            pitch = 0; }
    }
    else
    {
        yaw = atan(DX/DY);
        pitch = atan(floatsqroot(DX*DX + DZ*DZ) / DY);
        if(x1 > x2 && y1 <= y2) {
          yaw = yaw + 90;
            pitch = pitch - 45; }
    else if(x1 <= x2 && y1 < y2) {
          yaw = 90 - yaw;
            pitch = pitch - 45; }
    else if(x1 < x2 && y1 >= y2) {
          yaw = yaw - 90;
            pitch = pitch - 45; }
    else if(x1 >= x2 && y1 > y2) {
          yaw = 270 - yaw;
            pitch = pitch + 315; }
    if(z1 < z2)
          pitch = 360-pitch;
    }
    SetObjectRot(objectid, 0, 0, yaw);
    SetObjectRot(objectid, 0, pitch, yaw+90);
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)