11.07.2014, 20:52
(
Last edited by S4t3K; 11/07/2014 at 11:35 PM.
)
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 :
Utiliser зa avec VectorSize est assez simple :
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 :
Ce qui donnerait, en implйmentation
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 !
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.
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
}
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);
}
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
}
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;
}
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.