[Tutorial] VectorSize
#1

Yo !

Je vois beaucoup de gens qui utilisent encore la faзon toute pйtйe qui combine des floatsqroot + floatasin + floatcos.

Sachez que ce code est vraiment mal foutu, зa fait faire des tas d'opйrations compliquйes au compilateur le pauvre

Heureusement, la 0.3z nous a gentillement apportй une nouvelle fonction : VectorSize !

Concrиtement, cette fonction sert а quoi ? Elle retourne la taille (qu'on appelle norme en mathйmatiques) du vecteur de coordonnйes passйes en paramиtres (c'est un vecteur 3D, donc les opйrations sont assez complexes, mais heureusement plus rapides qu'avec la faзon "old shcool").

Je prends un exemple simple :

pawn Code:
stock Float:Distance(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
{
      // Calculer la distance entre les deux points 3D (x1, y1, z1) et (x2, y2, z2) et la retourner en tant que flottant
}
Utiliser зa avec VectorSize est assez simple :

pawn Code:
stock Float:Distance(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
{
      return VectorSize(x1-x2, y1-y2, z1-z2);
}
Et voilа ! Rien de plus simple !



Sйrieusement а quoi зa sert ce bordel ?

Sans trop me casser la tкte pour trouver une utilitй concrиte, vous avez jamais voulu des fonctions du genre ?

"IsVehicleInRangeOfPoint", "IsObjectInRangeOfPoint", "IsObjectInRangeOfVehicle", etc. ?
Bah VectorSize (ou plutфt l'utilitй "Distance" ci-dessus) vous permettent de les faire.

Petit exemple avec IsVehicleInRangeOfPoint :

pawn Code:
stock IsVehicleInRangeOfPoint(vehicleid, Float:radius, Float:x, Float:y, Float:z)
{
      // Calculer la distance entre la position du vйhicule et vйrifier si elle est infйrieure ou йgale au radius
}
Ce qui donnerait, en implйmentation

pawn Code:
stock IsVehicleInRangeOfPoint(vehicleid, Float:radius, Float:x, Float:y, Float:z)
{
      new Float:pos[3];
      GetVehiclePos(vehicleid, pos[0], pos[1], pos[2]);
      return VectorSize(x-pos[0], y-pos[1], z-pos[2]) <= radius;
}
La "condition bizarre" que j'ai utilisй au return s'appelle "ternaire". Il y a assez de documentation а ce sujet sur Internet, donc comme dirait jujuv, GIYF.



Pour vous entraоner, codez moi les deux autres fonctions donnйes ci-dessus ("IsObjectInRangeOfPoint" et "IsObjectInRangeOfVehicle") sur le mкme modиle !
Correction plus bas, don't scroll down bilay.
Au fait, les header seront :

"IsObjectInRangeOfPoint(objectid, Float:radius, Float, Float:y, Float:z, bool:dynamic_object);"
"IsObjectInRangeOfVehicle(objectid, vehicleid, Float:radius, bool:dynamic_object);"

Essayez de faire du plus optimisй que vous pouvez !

























pawn Code:
stock IsObjectInRangeOfPoint(objectid, Float:radius, Float:x, Float:y, Float:z, bool:dynamic_object)
{
      new Float:obj[3];
      if(dynamic_object) GetDynamicObjectPos(obectid, obj[0], obj[1], obj[2]);
      else GetObjectPos(objectid, obj[0], obj[1], obj[2]);
      return VectorSize(x-obj[0], y-obj[1], z-obj[2]) <= radius;
}


stock IsObjectInRangeOfVehicle(objectid, vehicleid, Float:radius, bool:dynamic_object)
{
      new Float:pos[3];
      GetVehiclePos(vehicleid, pos[0], pos[1], pos[2]);
      return IsObjectInRangeOfPoint(objectid, radius, pos[0], pos[1], pos[2], dynamic_object);
}

Facile comme exercice hein ? (lol)

C'est l'utilisation la plus frйquente (et, faut le dire, la plus utile) de VectorSize.
Si j'en rechoppe un seul qui utilise encore l'ancienne mйthode aprиs ce tutoriel, je l'йgorge (wllh).

Et si quelqu'un connait une autre utilisation que je ne connaоtrais pas/que j'aurais oubliй de mentionner (je suis humain olala), commentez simplement, je me ferais un plaisir de l'ajouter si je le juge utile

Peace.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)