SA-MP Forums Archive
Making an actor face the player - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Making an actor face the player (/showthread.php?tid=573806)



Making an actor face the player - Sellize - 10.05.2015

How can I make an actor face the player's direction?


Re: Making an actor face the player - MicroD - 10.05.2015

http://forum.sa-mp.com/showpost.php?...62&postcount=9
https://sampwiki.blast.hk/wiki/SetActorFacingAngle


Re: Making an actor face the player - MP2 - 10.05.2015

pawn Код:
stock Float:SetPlayerFacePlayer(playerid, faceplayerid)
{
    new Float:Px, Float:Py, Float: Pa;
    GetPlayerPos(playerid, Px, Py, Pa);
    new Float:fpX, Float:fpY, Float: fpZ;
    GetPlayerPos(faceplayerid, fpX, fpY, fpZ);
    Pa = floatabs(atan((fpY-Py)/(fpX-Px)));
    if(fpX <= Px && fpY >= Py) Pa = floatsub(180, Pa);
    else if(fpX < Px && fpY < Py) Pa = floatadd(Pa, 180);
    else if(fpX >= Px && fpY <= Py) Pa = floatsub(360.0, Pa);
    Pa = floatsub(Pa, 90.0);
    if(Pa >= 360.0) Pa = floatsub(Pa, 360.0);
    if(!IsPlayerInAnyVehicle(playerid)) SetPlayerFacingAngle(playerid, Pa);
    else SetVehicleZAngle(GetPlayerVehicleID(playerid), Pa);
    return Pa;
}
Not made by me.

Alter it to work with actors.


Re: Making an actor face the player - Sellize - 10.05.2015

Quote:
Originally Posted by MP2
Посмотреть сообщение
pawn Код:
stock Float:SetPlayerFacePlayer(playerid, faceplayerid)
{
    new Float:Px, Float:Py, Float: Pa;
    GetPlayerPos(playerid, Px, Py, Pa);
    new Float:fpX, Float:fpY, Float: fpZ;
    GetPlayerPos(faceplayerid, fpX, fpY, fpZ);
    Pa = floatabs(atan((fpY-Py)/(fpX-Px)));
    if(fpX <= Px && fpY >= Py) Pa = floatsub(180, Pa);
    else if(fpX < Px && fpY < Py) Pa = floatadd(Pa, 180);
    else if(fpX >= Px && fpY <= Py) Pa = floatsub(360.0, Pa);
    Pa = floatsub(Pa, 90.0);
    if(Pa >= 360.0) Pa = floatsub(Pa, 360.0);
    if(!IsPlayerInAnyVehicle(playerid)) SetPlayerFacingAngle(playerid, Pa);
    else SetVehicleZAngle(GetPlayerVehicleID(playerid), Pa);
    return Pa;
}
Not made by me.

Alter it to work with actors.
Done, thanks.

If anyone needs it

Код:
stock SetActorFacePlayer(actorid, faceplayerid)
{
	new Float:Px, Float:Py, Float: Pa;
	GetActorPos(actorid, Px, Py, Pa);
	new Float:fpX, Float:fpY, Float: fpZ;
	GetPlayerPos(faceplayerid, fpX, fpY, fpZ);
	Pa = floatabs(atan((fpY-Py)/(fpX-Px)));
	if(fpX <= Px && fpY >= Py) Pa = floatsub(180, Pa);
	else if(fpX < Px && fpY < Py) Pa = floatadd(Pa, 180);
	else if(fpX >= Px && fpY <= Py) Pa = floatsub(360.0, Pa);
	Pa = floatsub(Pa, 90.0);
	if(Pa >= 360.0) Pa = floatsub(Pa, 360.0);
	SetActorFacingAngle(actorid, Pa);
}



Re: Making an actor face the player - MicroD - 10.05.2015

Код:
SetActorToFacePlayer(actorid, targetid) {
    new
        Float: pX,
        Float: pY,
        Float: tX,
        Float: tY
    ;
    return
        GetPlayerPos(targetid, tX, tY, Float: targetid) &&
        GetActorPos(actorid, pX, pY, Float: targetid) &&
        SetActorFacingAngle(actorid, -atan2(tX - pX, tY - pY))
    ;
}
By Nero_3D