[fonction] Génération aléatoire de Location dans un trigger rectangle.

Répondre
Partager Rechercher
(Je met ça dans un nouveau thread afin de pouvoir le linker dans le sommaire et afin de fair partager plus facilement la fonction, qui est planquée en réponse dans un autre topic)

Script de génération aléatoire de location dans une zone définie (un trigger rectangle).

Tout d'abord, voici le premier script, "io_gen_rdmloc", qui permet d'avoir accès à une fonction nommée GenerateRandomLocation().
Code PHP:

//  io_gen_rdmloc  //
// fichier include //

//::///////////////////////////////////////////////
//:: GenerateRandomLocation
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*

 Cette fonction cree une location aleatoire dans une zone rectangle.
 Elle admet un degre de precision (entre 1 et 0.000001, et inferieur),
 et admet un bon nombre de parametres.

*/
//:://////////////////////////////////////////////
//:: Created By: Ange Musicien
//:: Created On: Forum Maskado - JOL
//:://////////////////////////////////////////////

// Générer aléatoirement une location dans une zone rectangle, qui peut etre une aire.
// - oArea: Aire dans laquelle est situee la zone rectangle.
// - Xmin : minimum en abscisse pour la zone
// - Ymin : minimum en ordonnee pour la zone
// - Xmax : maximum en abscisse pour la zone
// - Ymax : maximum en ordonnee pour la zone
// - fPrecision : la precision de la location. Elle est a 0.01f par defaut, mais peut
//   aller de 1 a 0.000001 ou inferieur. C'est le nombre de decimales admises pour
//   les abscisses et ordonees de la location aleatoire.
// - fZ   : hauteur de la location, par defaut 1.0
location GenerateRandomLocation(object oAreafloat Xminfloat Yminfloat Xmaxfloat Ymaxfloat fPrecision 0.01float fZ 1.0);

location GenerateRandomLocation(object oAreafloat Xminfloat Yminfloat Xmaxfloat Ymaxfloat fPrecisionfloat fZ)
{
float XdifYdiffXfYYdifPreXdifPreYdifPre2XdifPre2XmulYmul;
int nXnYnXPnYP ;
vector v;
location l;

Xdif Xmax-Xmin;
Ydif Ymax-Ymin;

XdifPre  Xdif/fPrecision;
YdifPre  Ydif/fPrecision;
XdifPre2 XdifPre 1.0;
YdifPre2 YdifPre 1.0;
nX Random(FloatToInt(XdifPre2));
nY Random(FloatToInt(YdifPre2));
Xmul IntToFloat(nX);
Ymul IntToFloat(nY);
fX Xmul*fPrecision;
fY Ymul*fPrecision;
fX fX Xmin;
fY fY Ymin;

Vector(fX,fY,fZ);
Location(oArea,v,0.0);
return 
l;

Voici un exemple d'application, ce script crée une boule de feu aléatoirement toutes les six secondes, dans un rectangle de 10x10 (placé au milieu d'une zone de 30x30). Il est placé dans le OnHeartBeat d'une zone :
Code PHP:

// OnHeartBeat //
#include "io_gen_rdmloc"
void main()
{
object oArea;
location l;
effect e;

oArea OBJECT_SELF;
GenerateRandomLocation(oArea,10.0,10.0,20.0,20.0);
EffectVisualEffect(VFX_FNF_FIREBALL);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT,e,l);

Hs : scusez les fautes, je bosse sur clavier qwerty

Je suis en train de mettre au point plusieurs fonctions, en rapport avec celles-ci et assez utiles :

float Random(float f);
>> enrichit la fonction random pour lui permettre d'accepter les floats -retourne une float du meme nombre de decimales que f.

int GetNumDecimals(float f);
>> retourne le nombre de decimales de f.

float Arrondi(float f, float fPrecision)
>> retourne l'arrondi a fPrecision pres de f

Ca existe probablement deja, et sinon tant mieux
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés