Как определить, находится ли машина перед игроком?
#1

Есть ID машины. Как мне проверить, находится ли она перед игроком, а не сзади его?
По координатам можно, но не соображу как. Возможно есть еще способы.
Помогите пожалуйста.
Reply
#2

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;
}
Reply
#3

ZiGGi, спасибо!

Ох, да тут еще и с углом обзора. Класс!
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)