• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Pawn] Vehicle collision with object
#1
Hello everyone! I'm having difficulty finding a solution to detect collisions for a script to launch rockets from cars. Initially, I chose to check for collisions using IsPlayerInRangeOfPoint, but it's very imprecise. Currently, I'm looking for a solution to determine if the missile object can be intercepted as a collision with a vehicle. I was thinking of an invisible collision box around the vehicle. Do you have any advice on detecting collisions between an object and a vehicle? Thank you.
  Reply
#2
Maybe raycast of ColAndreas can help you.
  Reply
#3
Here's a basic outline of how you can implement this:

Create the rocket object when fired from a vehicle.
Track the movement of the rocket using OnPlayerObjectMoved.
Check for collisions between the rocket and nearby vehicles in the callback.
Here's an example code to demonstrate this:

PHP Code:
forward OnPlayerObjectMoved(playerid, objectid);

public 
OnPlayerObjectMoved(playerid, objectid)
{
    new Float:x, Float:y, Float:z;
    GetObjectPos(objectid, x, y, z); // Get the current position of the object

    new Float:minX, Float:maxX, Float:minY, Float:maxY, Float:minZ, Float:maxZ;
    GetObjectBoundingBox(objectid, minX, minY, minZ, maxX, maxY, maxZ); // Get the bounding box of the object

    new Float:vX, Float:vY, Float:vZ;
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
        if (IsPlayerConnected(i) && i != playerid)
        {
            GetPlayerPos(i, vX, vY, vZ); // Get the position of each player

            // Check if the player's position is within the bounding box of the rocket object
            if (vX >= minX && vX <= maxX && vY >= minY && vY <= maxY && vZ >= minZ && vZ <= maxZ)
            {
                // Player i collided with the rocket object
                // You can perform actions here, such as damaging the vehicle or player
                SendClientMessage(playerid, COLOR_RED, "Rocket collided with a vehicle!");
                // Destroy the rocket object
                DestroyObject(objectid);
                return 1;
            }
        }
    }
    return 0;
} 
  Reply