Inscrit le: 22 Nov 2007 Messages: 677 Sujets: 27 Spécialité en worldedit: Jamais sortir ses projets ?
Posté le: 18/06/08 01:02 Sujet du message: CreateCircleRegion
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
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...)
Posté le: 21/06/08 19:49 Sujet du message:
Ah t'avais pas testé fainéasse
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. _________________
Inscrit le: 22 Nov 2007 Messages: 677 Sujets: 27 Spécialité en worldedit: Jamais sortir ses projets ?
Posté le: 21/06/08 19:55 Sujet du message:
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.
Citation:
Ah t'avais pas testé fainéasse
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 .) _________________
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...)
Posté le: 21/06/08 20:00 Sujet du message:
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.
Citation:
Ah t'avais pas testé fainéasse
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 .)
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 _________________
Dernière édition par Troll-Brain le 21/06/08 20:26; édité 2 fois
Inscrit le: 22 Nov 2007 Messages: 677 Sujets: 27 Spécialité en worldedit: Jamais sortir ses projets ?
Posté le: 21/06/08 20:03 Sujet du message:
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.
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
Je l'avait oublié celle là , néanmoins avec plein d'effet ont aurait pu voir si le point y était bien. _________________
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...)
Posté le: 21/06/08 20:09 Sujet du message:
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.
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
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 _________________
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.
En gros alors... 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... _________________
Inscrit le: 22 Nov 2007 Messages: 677 Sujets: 27 Spécialité en worldedit: Jamais sortir ses projets ?
Posté le: 12/07/08 00:34 Sujet du message:
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.
(Il n'y a pas d'erreur de syntaxe , j'ai au moins verifié )
Sinon tes sur que c'est plus rapides ?
En tout cas si sa peut augmenté le rayon avant de tomber dans la limitop. _________________
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. _________________
Toutes les heures sont au format GMT + 1 Heure Aller à la page 1, 2Suivante
Page 1 sur 2
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