GetClosestTire
#9

pawn Код:
// Tire IDs: -1 (Not near a tire), 0 (Front-left), 1 (Back-left), 2 (Back-right), 3 (Front-right)

GetClosestTire(playerid)
{
    if(IsPlayerInAnyVehicle(playerid))
        return -1;

    new
        car;
       
    if((car = GetClosestVehicle(playerid)) == INVALID_VEHICLE_ID)
        return -1;
       
    new
        Float:p[3],
        Float:c[3],
        Float:ang,
        Float:dist[2],
        tire;
       
    GetPlayerPos(playerid, p[0], p[1], p[2]);
    GetVehiclePos(car, c[0], c[1], c[2]);
   
    GetVehicleZAngle(car, ang);
   
    tire = 0;
    dist[0] = Float:0xFFFFFFFF;
    ang += 45.0;
   
    for(new t = 0; t < 4; t++, ang += 90.0)
    {
        dist[1] = floatsqroot(
            ((p[0] - (c[0] + floatsin(-ang, degrees))) * (p[0] - (c[0] + floatsin(-ang, degrees)))) +
            ((p[1] - (c[1] + floatcos(-ang, degrees))) * (p[1] - (c[1] + floatcos(-ang, degrees)))));
           
        if(dist[1] < dist[0])
        {
            dist[0] = dist[1];
            tire = t;
        }
    }
   
    return tire;
}

GetClosestVehicle(playerid)
{
    if(IsPlayerInAnyVehicle(playerid))
        return INVALID_VEHICLE_ID;

    new
        Float:p[3],
        Float:c[3],
        Float:dist[2],
        car;

    GetPlayerPos(playerid, p[0], p[1], p[2]);

    car = INVALID_VEHICLE_ID;
    dist[0] = Float:0xFFFFFFFF;

    for(new vehicleid = 0; vehicleid < MAX_VEHICLES; vehicleid++)
    {
        GetVehiclePos(vehicleid, c[0], c[1], c[2]);
       
        dist[1] = floatsqroot(((p[0] - c[0]) * (p[0] - c[0])) + ((p[1] - c[1]) * (p[1] - c[1])) + ((p[2] - c[2]) * (p[2] - c[2])));
       
        if(dist[1] < dist[0] && dist[1] <= 4.0)
        {
            dist[0] = dist[1];
            car = vehicleid;
        }
    }
   
    return car;
}
Currently doesn't account for what type of vehicle you're near and the distance check in GetClosestVehicle doesn't account for how large the vehicle is (the player must be within 4 meters of the vehicle in order for it to return the vehicle id).

I'd expect you'd know what to do with it to rid of those potential bugs, but enjoy anyways!
Reply


Messages In This Thread
GetClosestTire - by MisterTickle - 02.11.2010, 20:32
Re: GetClosestTire - by (SF)Noobanatior - 02.11.2010, 20:43
Re: GetClosestTire - by Bessensap - 02.11.2010, 21:08
Re: GetClosestTire - by boelie - 02.11.2010, 21:13
Respuesta: GetClosestTire - by MrDeath537 - 02.11.2010, 21:17
Re: GetClosestTire - by boelie - 02.11.2010, 21:20
Re: GetClosestTire - by Miguel - 02.11.2010, 21:48
Re: GetClosestTire - by Bessensap - 02.11.2010, 22:24
Re: GetClosestTire - by Tannz0rz - 02.11.2010, 22:45
Re: GetClosestTire - by MisterTickle - 04.11.2010, 07:03

Forum Jump:


Users browsing this thread: 1 Guest(s)