Posts: 6
Threads: 1
Joined: Aug 2011
Reputation:
0
Есть ID машины. Как мне проверить, находится ли она перед игроком, а не сзади его?
По координатам можно, но не соображу как. Возможно есть еще способы.
Помогите пожалуйста.
Posts: 1,659
Threads: 17
Joined: Sep 2008
Quote:
Originally Posted by Agrofyl
Есть ID машины. Как мне проверить, находится ли она перед игроком, а не сзади его?
По координатам можно, но не соображу как. Возможно есть еще способы.
Помогите пожалуйста.
|
pawn Код:
stock GetPlayerToFaceVehicleID(playerid,Float:radius)
{
#define range 60
new Float:X,Float:Y,Float:Z,Float:pA;
GetPlayerPos(playerid, X, Y, Z);
GetPlayerFacingAngle(playerid, pA);
for(new veh_id=0,Float:vX,Float:vY,Float:vZ,Float:ang;
veh_id<2000;
veh_id++
)
{
if(!IsVehicleStreamedIn(veh_id,playerid)) continue;
GetVehiclePos(veh_id, vX, vY, vZ);
if(!IsPlayerInRangeOfPoint(playerid,radius,vX,vY,vZ)) continue;
if( Y > vY ) ang = (-acos((X - vX) / floatsqroot((X - vX)*(X - vX) + (Y - vY)*(Y - vY))) - 90.0);
else if( Y < vY && X < vX ) ang = (acos((X - vX) / floatsqroot((X - vX)*(X - vX) + (Y - vY)*(Y - vY))) - 450.0);
else if( Y < vY ) ang = (acos((X - vX) / floatsqroot((X - vX)*(X - vX) + (Y - vY)*(Y - vY))) - 90.0);
if(AngleInRangeOfAngle(-ang, pA, range)) return veh_id;
}
#undef range
return -1;
}
stock AngleInRangeOfAngle(Float:a1, Float:a2, Float:range)
{
a1 -= a2;
if((a1 < range) && (a1 > -range)) return 1;
return 0;
}
pawn Код:
if (GetPlayerToFaceVehicleID(playerid, 5) == vehicleid)
{
return 1;
}
Posts: 6
Threads: 1
Joined: Aug 2011
Reputation:
0
ZiGGi, спасибо!
Ох, да тут еще и с углом обзора. Класс!