Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=dbae83d07e771a04726c68a25982b021Médailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

CreateCircleRegion
Aller à la page 1, 2  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Fonction Jass
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Darkfeyt
Floodeur prématuré


Inscrit le: 22 Nov 2007
Messages: 677
Sujets: 27
Spécialité en worldedit: Jamais sortir ses projets ?


MessagePosté le: 18/06/08 01:02    Sujet du message: CreateCircleRegion Citer

Nom de la fonction : CreateCircleRegion
Créateur : Pour la plupart de la fonction Troll-Brain , pour le reste moi.
(J'ai juste remplacer le stricte nécessaires de la fonction "SetCircleTerrainPathable")
Fonctions requises : aucune
Description : Permet de crée des région en cercle.
Code :
Secret:

Jass:
function CreateCircleRegion takes real xc,real yc,real radius returns region
    local real xMin
    local real yMin
    local real xMax
    local real yMax
    local real x
    local real y
    local real dx
    local real dy
    local region r = CreateRegion()
   
    set xMin=xc-radius
    set yMin=yc-radius
    set xMax=xc+radius
    set yMax=yc+radius
    set x=xMin
    set y=yMin
    set radius=radius*radius
   
    loop
        loop
            set dx=x-xc
            set dy=y-yc
            if dx*dx+dy*dy<=radius then
                call RegionAddCell(r,x,y)
            endif
            set x=x+32.0
        exitwhen x>xMax
        endloop
        set x=xMin
        set y=y+32.0
    exitwhen y>yMax
    endloop
    return r
endfunction



Version VJass amélioré de Troll-Brain:
Secret:

Jass:

library Pathable

globals
    private constant real R= SquareRoot(2.0)/2.0
    private real Xmax
    private real Ymax
    private real Xmin
    private real Ymin
    private real Xmax2
    private real Ymax2
    private real Xmin2
    private real Ymin2
endglobals

private function R32 takes real r returns real //must be an inlined function or it will be so slow ...
    return 32.0*R2I(r/32.0)                             
endfunction

//! textmacro_once loopfill
    loop
    exitwhen r== 0.0
    set r= r-32.0
             
        call RegionAddCell(R,x-32.0,r+rel)
           
    endloop
//! endtextmacro

function CirclePathing takes real xc,real yc,real radius returns region
   
    local real xMax= R32(xc+radius)-32.0
    local real x= R32(xc-radius)
    local real r
    local real r1
    local real r2
    local real r3
    local real r4
    local real rel
    local region R = CreateRegion()

        if radius<0.0 then
            debug call BJDebugMsg("a negative radius o_0")
            return null
        endif
   
        set radius= radius*radius
       
        set r= SquareRoot( radius - (x-xc)*(x-xc) )
        set r1= R32(yc-r)
        set r2= R32(yc+r)
        call RegionAddCell(R,x,r1)
        call RegionAddCell(R,x,r2)
        set rel= r1
        set r= r2-r1
        //! runtextmacro loopfill()
        if xMax< x then
            return R
        endif
       
        loop
        exitwhen x== xMax
        set x= x+32.0
         
            set r= SquareRoot( radius - (x-xc)*(x-xc) )
            set r3= R32(yc-r)
            set r4= R32(yc+r)
            call RegionAddCell(R,x,r3)
            call RegionAddCell(R,x,r4)
           
            if r3>r1 then
                set r= r3-r1
                set rel= r1
            else
                set r= r1-r3
                set rel= r3
            endif
            //! runtextmacro loopfill()
           
            if r4>r2 then
                set r= r4-r2
                set rel= r2
            else
                set r= r2-r4
                set rel= r4
            endif
            //! runtextmacro loopfill()
           
            set r1=r3
            set r2=r4
         
        endloop
       
        set r= SquareRoot( radius - (x-xc)*(x-xc) )
        set r1= R32(yc-r)
        set r2= R32(yc+r)
        call RegionAddCell(R,x,r1)
        call RegionAddCell(R,x,r2)
        set rel= r1
        set r= r2-r1
        //! runtextmacro loopfill()
        set x= x+32.0
        if r3>r1 then
            set r= r3-r1
            set rel= r1
        else
            set r= r1-r3
            set rel= r3
        endif
        //! runtextmacro loopfill()
           
        if r4>r2 then
            set r= r4-r2
            set rel= r2
        else
            set r= r2-r4
            set rel= r4
        endif
        //! runtextmacro loopfill()
           
    return R
   
    endfunction

endlibrary



Utilisation : Comme n'importe quelle région.
Copyright :
Troll-Brain a écrit:
Libre

Remarques :
Troll-Brain a écrit:
Si vous faites des cercles trop grands votre trigger lancant la fonction sera stoppé avant la fin du pathing.

_________________


Dernière édition par Darkfeyt le 12/07/08 00:32; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 Anthelme
Anomalie floodiforme


Inscrit le: 28 Aoû 2007
Messages: 1857
Sujets: 93



MessagePosté le: 18/06/08 01:48    Sujet du message: Citer

Pour les noob en math comme moi tu peut expliquer a quoi correspondent chaque variables ?

Citation:
local real xMin
local real yMin
local real xMax
local real yMax
local real x
local real y
local real dx
local real dy

_________________
Ancien The.gosu
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Darkfeyt
Floodeur prématuré


Inscrit le: 22 Nov 2007
Messages: 677
Sujets: 27
Spécialité en worldedit: Jamais sortir ses projets ?


MessagePosté le: 18/06/08 03:59    Sujet du message: Citer

Je te dirai bien , demande a TB. Razz

Mais je vais essayé de t'expliquer celle que je crois avoir compris.

xMin valeur la plus petite possible de x.
yMin pareil.
xMax valeur la plus grande possible de x.
yMin pareil.

Ses 4 variable sont calculé en ajoutant ou en enlevant le rayon du cercle à l'origine du cercle.

x et y sont simplement des variable qui incrémente de 32 à 32.(ont les fait débuté a leur minimum)

Ensuite ont fait une loop jusqu'a temps que x et y est fait leur maximum.

A chaque tour ont vérifie que la distance(dx et dy) soit inférieur au rayon du cercle.

Si elle l'est alors ont considère donc a se moment là le point x et y comme appartenant au cercle.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 21/06/08 14:31    Sujet du message: Citer

J'y avais pensé et même mis en commentaire sur hiveworkshop, tant mieux si tu l'as fait pour moi Laughing

Pour la méthode c'est simple un cercle peut être englobé par un carré.
Je calcule les coordonnées de ce carré et je parcoure chaque cellule.

Secret:



Je parcoure la ligne cyan de gauche à droite, puis la ligne rose et ainsi de suite.
Bref ce qu'a expliqué Darkfeyt.

Je vais essayer de l'optimiser en parcourant 1 carré englobé par le cercle (plus besoin de vérifier la distance) et 4 autres rectangles

EDIT : la flemme de modifier le dessin mais y'a une inversion de coordonnée Y avec les deux points situés à droite du carré.

Le point en haut à droite du carré a pour coordonnée xMax,yMax et celui en bas à droite xMax,yMin
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Darkfeyt
Floodeur prématuré


Inscrit le: 22 Nov 2007
Messages: 677
Sujets: 27
Spécialité en worldedit: Jamais sortir ses projets ?


MessagePosté le: 21/06/08 19:43    Sujet du message: Citer

Citation:
J'y avais pensé et même mis en commentaire sur hiveworkshop, tant mieux si tu l'as fait pour moi Laughing


C'était vraiment pas un boulot dur. Rolling Eyes

Sinon tu doit t'y connaitre plus que moi , les cellule (de région) font bien 32x32 ?

Car sinon il y a des trou dans mon cercle. Rolling Eyes
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 21/06/08 19:49    Sujet du message: Citer

Ah t'avais pas testé fainéasse Laughing
Oui c'est bien cela, c'est les petits carrés quand tu affiches la grille en taille minimale dans l'éditeur de terrain.

En effet c'est pas dur mais vu le nombre d'utilisateurs potentiels même avec si peu de travail à la clef j'avais pas envie, pi aussi "très peu" de personnes savent ce qu'est réellement une région.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Darkfeyt
Floodeur prématuré


Inscrit le: 22 Nov 2007
Messages: 677
Sujets: 27
Spécialité en worldedit: Jamais sortir ses projets ?


MessagePosté le: 21/06/08 19:55    Sujet du message: Citer

Citation:
En effet c'est pas dur mais vu le nombre d'utilisateurs potentiels même avec si peu de travail à la clef j'avais pas envie, pi aussi "très peu" de personnes savent ce qu'est réellement une région.


C'était après un post , un problème (En Jass) de quelqu'un qui voulait en gros l'effet d'une région en cercle , mais pour beaucoup de personne se n'est que des rect. Razz

Citation:
Ah t'avais pas testé fainéasse Laughing


Mise a part faire un test bourrin qui crée beaucoup d'effet spéciaux a des endroit aléatoire de la région je vois mal comment testé sa.(Sa reste en quelque sorte de la flemme Razz .)
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 21/06/08 20:00    Sujet du message: Citer

Darkfeyt a écrit:
Citation:
En effet c'est pas dur mais vu le nombre d'utilisateurs potentiels même avec si peu de travail à la clef j'avais pas envie, pi aussi "très peu" de personnes savent ce qu'est réellement une région.


C'était après un post , un problème (En Jass) de quelqu'un qui voulait en gros l'effet d'une région en cercle , mais pour beaucoup de personne se n'est que des rect. Razz

Citation:
Ah t'avais pas testé fainéasse Laughing


Mise a part faire un test bourrin qui crée beaucoup d'effet spéciaux a des endroit aléatoire de la région je vois mal comment testé sa.(Sa reste en quelque sorte de la flemme Razz .)


Le quelqu'un en question devait être the.gosu, d'ailleurs je lui fait une autre fonction qui ne fait que le tour du cercle, car son cercle était trop grand.
Pour cela j'utilise l'équation de cercle et j'incrémente x pour calculer les valeurs de y.
Ca me fait un demi cercle, le demi cercle restant n'étant qu'un décalage de y par rapport au y du centre du cercle.
Mais cette méthode telle quelle peut faire des trous, j'ai donc du rajouter une loop rajoutant les éventuelles cellules intermédiaires.
C'est très dur, voir impossible à comprendre ce que je veux dire sans faire de dessin sur quadrillage
Je la posterais à l'occasion

Bah y'a la fonction IsPointInRegion.
C'est comme cela que j'ai déterminé par essai de valeurs successives, pas au petit bonheur la chance, ou à l'instinct Razz
_________________


Dernière édition par Troll-Brain le 21/06/08 20:26; édité 2 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Darkfeyt
Floodeur prématuré


Inscrit le: 22 Nov 2007
Messages: 677
Sujets: 27
Spécialité en worldedit: Jamais sortir ses projets ?


MessagePosté le: 21/06/08 20:03    Sujet du message: Citer

Troll-Brain a écrit:
Le quelqu'un en question devait être the.gosu, d'ailleurs je lui fait une autre fonction qui ne fait que le tour du cercle, car son cercle était trop grand.


Non , c'était "Rhadamante" comme quoi cette fonction a du potentiel. Razz

Troll-Brain a écrit:
Bah y'a la fonction IsPointInRegion.
C'est comme cela que j'ai déterminé par essai de valeurs successives, pas au petit bonheur la chance, ou à l'instinct Razz


Je l'avait oublié celle là , néanmoins avec plein d'effet ont aurait pu voir si le point y était bien. Razz
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 21/06/08 20:09    Sujet du message: Citer

Citation:
Non , c'était "Rhadamante" comme quoi cette fonction a du potentiel. Razz

Bah the.gosu a du potentiel en ... euh ...
Secret:

orthographe ?



Citation:
Je l'avait oublié celle là , néanmoins avec plein d'effet ont aurait pu voir si le point y était bien. Razz

Oui tu as tout à fait raison dit t'il en appelant la sécurité.

Parce que tu crois que je connais toutes les fonctions par cœur Exclamation
J'ai juste tapé region avec jasscraft et j'ai regardé la liste des fonctions disponibles contenant ce mot clef (environ 2s pour la trouver).

PS : Tu as résolu une fonction modèle gj Razz
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Rhadamante
Petit flooder


Inscrit le: 28 Aoû 2007
Messages: 1457
Sujets: 24
Spécialité en worldedit: Bêêh hé hé hé !
Médailles: 3 (En savoir plus...)
Grand décorateur (Quantité : 2) Créateur de race (Quantité : 1)

MessagePosté le: 21/06/08 21:20    Sujet du message: Citer

Darkfeyt a écrit:
C'était après un post , un problème (En Jass) de quelqu'un qui voulait en gros l'effet d'une région en cercle , mais pour beaucoup de personne se n'est que des rect. Razz


En gros alors... Very Happy Ce que je voulais concernait une unité. A moins que les régions ne puissent se déplacer, mourir, changer de propriétaire, etc. ça devenait trop compliqué à gérer par rapport à ma solution simple (-iste ?).

Par contre elle pourrait me servir plus tard, donc oui elle a du potentiel... Rolling Eyes
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 21/06/08 21:24    Sujet du message: Citer

Non on peut pas déplacer une région.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 11/07/08 21:23    Sujet du message: Citer

J'ai optimisé mes fonctions de pathing, tu peux prendre exemple (oupa) sur mon code.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Darkfeyt
Floodeur prématuré


Inscrit le: 22 Nov 2007
Messages: 677
Sujets: 27
Spécialité en worldedit: Jamais sortir ses projets ?


MessagePosté le: 12/07/08 00:34    Sujet du message: Citer

J'ai ajouté ta version (étant donné que c'est du VJass (et flemme de convertir en Jass) , je la remplace pas mais simplement l'ajoute) , mais j'ai fait un peu a la barbare , je dirai qu'il y 4% que j'ai fait une erreur en remplacent. Razz

(Il n'y a pas d'erreur de syntaxe , j'ai au moins verifié Rolling Eyes )

Sinon tes sur que c'est plus rapides ? Laughing

En tout cas si sa peut augmenté le rayon avant de tomber dans la limitop.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2009
Sujets: 49

Médailles: 2 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1) Ayane (Quantité : 1)

MessagePosté le: 12/07/08 12:39    Sujet du message: Citer

Le problème c'est que warcraft va tester chaque cell de cette région pour voir si l'unité est à cette position, ce qui n'est pas très optimal puisqu'il pourrait dans l'absolu vérifier seulement la distance entre les deux points.
Pour certains cas on pourrait simplement faire le contour du cercle, où alors on peut passer outre le système de région et vérifier périodiquement les positions.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Fonction Jass Toutes les heures sont au format GMT + 1 Heure
Aller à la page 1, 2  Suivante
Page 1 sur 2

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com