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=4e8213cea6a089fada1e4789c702dae5Mé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

[vJass] LinearPatrol
Aller à la page Précédente  1, 2, 3, 4, 5, 6  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
 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: 17/02/12 22:34    Sujet du message: Citer

Euh non, de l'intérêt du if en lui même.

Pour le mouvement "non linéaire" c'est probablement du à la collision des unités, cela ne devrait pas de produire si les unités qui patrouillent ont 'Aloc' (infestation).
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 17/02/12 22:39    Sujet du message: Citer

Le if sert a stopper la correction de la trajectoire au cas ou l’unité arrête de patrouiller.

Même avec infestation ils buggent.
_________________


Dernière édition par Wareditor le 17/02/12 22:58; édité 1 fois
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: 17/02/12 22:54    Sujet du message: Citer

Hmm, mouai. (pour le if)
Je pense que ce genre de cas devrait être géré par l'utilisateur lui même via la method destroy, plutôt qu'à chaque "refresh".

Bon allez je vais arrêter de te torturer, je re-transfère le sujet.

Maintenant que le code est fonctionnel, le temps est venu pour les optimisations.

Mouaaaaaaahahahaha
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 17/02/12 23:03    Sujet du message: Citer

Merci !
Je pense que c'est déjà assez optimiser ? ou encore une fois je me trompe ?

Après j'ai ajouter une fonction pour pouvoir utiliser la liste avec des fonctions publics :

Jass:
    function LP_returnLL takes nothing returns UnitLL
        return LL
    endfunction


Il y a un autre moyen plus clean ?
_________________
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...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 17/02/12 23:27    Sujet du message: Citer

La question est pourquoi tu voudrais utiliser la liste en dehors de cette bibliothèque ?

De toute façon si tu en as vraiment besoin, autant supprimer l'attribut "private" de la variable et lui donner un meilleur nom, tel que PatrolLL, ou quelque chose du genre.

Pour les optimisations :

Déjà, je supprimerais le if que j'ai mentionné.
Ensuite plutôt que systématiquement déplacer l'unité il serait peut être judicieux de vérifier sa position (GetUnitX/Y) auparavant, et la déplacer seulement si c'est nécessaire.
Plutôt qu'une simple comparaison d'égalité, il faudrait utiliser une valeur EPSILON constante.

Par ex comparaison entre 2 rééls avec une valeur EPSILON :

Plutôt que :

Jass:
if r1 != r2 then


Jass:
if (r1 - r2 > EPSILON) or (r2 - r1 > EPSILON) then


La raison de ce or, vient du fait que r1 n'est pas forcément plus grand que r2, cela peut être l'inverse.
De plus dans le cas d'un trop grand décalage détecté, on a une chance sur 2 que r1 soit supérieur à r2, et si la première condition est vérifiée, la deuxième ne sera pas évaluée.
Cela dit si tu sais avec certitude quel réel est plus grand que l'autre il est évident qu'une seule condition suffit.

Quand à l'EPSILON par lui même c'est pour que la condition soit plus souvent vraie, en effet il est très rare qu'un réel est strictement égal à un autre.
De plus on peut parfaitement autoriser un décalage max imperceptible de l'ordre de quelques pixels (façon de parler).

Je pars de l'hypothèse que SetUnitX/Y ne devrait pas être appliqué systématiquement, et que le surcoût de ce if avec GetUnitX/Y devrait être largement compensé par ces économies d'appels de fonctions SetUnitX/Y.
Hypothèse fort raisonnable je pense.

Maintenant c'est à toi de tester.

Garde une copie de ce code en l'état actuel, et modifie cette copie avec mes suggestions.
Ensuite il te reste à faire un benchmark.
Pour cela il faut que tu testes les 2 codes un à la fois.
J'ai un peu la flemme d'expliquer comment pour l'instant :p
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 18/02/12 10:18    Sujet du message: Citer

Ok c'est fait !
Cela ressemble a ça:

Jass:
 
set X = this.a*this.time+this.Xbase
set Y = this.b*this.time+this.Ybase
set Xu = GetUnitX(this.whichUnit)
set Yu = GetUnitY(this.whichUnit)
               
if ((X - Xu > EPSILON) or (Xu - X > EPSILON )) and ((Y - Yu > EPSILON) or (Yu - Y > EPSILON )) then
    //SetUnitXY
    call SetUnitX(this.whichUnit, X )
    call SetUnitY(this.whichUnit, Y )
endif


Dès que l'unit dévie trop, le set se déclenche. Donc si le patrol est normal pas besoin de set X/Y. C'est pour moi la meilleure technique car elle corrige uniquement quand il y a un problème.

Je veux rendre public la List pour pouvoir Remove les units à l'intérieur et les remove du jeu correctement.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1846
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 18/02/12 11:55    Sujet du message: Citer

félicitation ware, ça a été long mais tu as réussi à franchir le cap troll ^^

merci pour ton travail.
_________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 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: 18/02/12 13:50    Sujet du message: Citer

J'aurais plutôt utiliser 3 "or".
Je ne pense pas que cela soit possible, mais imagine que l'unité dérive de plus de X fois la valeur d'epsilon en X mais pas en Y, ou inversement.
Du coup t'as aussi besoin de moins de parenthèses (insignifiant certes).

Ah et avis purement subjectif, mais je réserves la première lettre majuscule pour les variables globales, pas pour les locales.
Je connais très peu de personnes qui utilisent aussi cette convention, sous prétexte que c'est aussi utilisé pour les fonctions, mais bon perso rien qu'au nom que je donne je vois tout de suite si c'est une fonction ou une variable globale.

Le principal est que tu choisisses une convention typographique pour différencier les variables globales des variables locales/paramètre de function.
Tu peux par ex choisir le préfixe "g_".

Car oui en jass il est possible d'avoir une variable locale et globale du même nom, tu n'auras pas d'erreur de compilation à la sauvegarde.
Plus d'infos ici


Citation:
Je veux rendre public la List pour pourvoir Remove les units dedans et les remove du jeu correctement.


Je viens de mettre à jour UnitLL.
Tu n'as pas besoin de rendre publique la list.
_________________


Dernière édition par Troll-Brain le 18/02/12 19:04; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 18/02/12 17:04    Sujet du message: Citer

Code mis a jour

Par contre cela fait 5 jours que je cherche un bug qui apparait sur ma map : a chaque fois que j'ajoute une unit a une LL elle prend la place de celle qui a été ajouter avant donc au final il y a une unit dans la LL.
Le systeme marche parfaitement sur ma demo alors cela vient de ma map mais le truc c'est que je ne vois pas d’où et pourquoi...

Je met la map si un personne voudrait m'aider.
Télécharger la map

Il faut le nouveau jasshelper.

Pour voir le bug il vous suffit de lancer la map et de passer au niveau 1 et la les messages indiqueront le nombre d'unit dans la LL.
_________________
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: 18/02/12 18:49    Sujet du message: Citer

Je n'ai pas vraiment envie d'y réfléchir, mais juste pour savoir, actuellement cela fonctionne dans n'importe quel sens ?
Si on considère le point A comme la base et B le point d'arrivée.

Code:
A1       B2


B1       A2


Ton indentation n'est pas correcte pour SetUnitX/Y.

Sinon, pour ton bug, as tu essayé de sauvegarder la map en mode debug ? (disponible dans le menu jasshelper du newgen worldeditor), puis évidemment de jouer "tester" la map.

Je me pencherais dessus quand je le pourrais, probablement ce soir.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 18/02/12 19:45    Sujet du message: Citer

Résolue !
Je n'avais pas la compétence UnitIndexer. Je croyais qu'elle se créait toute seul.

EDIT : Cela marche dans les deux sens.

J'ai modifier le code.
Normalement cela marche dans tout les cas même ceux des patrols hyper-irrationnel.
_________________
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: 19/02/12 21:29    Sujet du message: Citer

Pourquoi tu redonnes les ordres périodiquement ?
Et surtout pourquoi tu donnes l'ordre "move" au lieu de "patrol", à plus forte raison dans la method create.

Il était trop simple le code avant >< ?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 19/02/12 21:31    Sujet du message: Citer

Nan mais comme je dis dans les comment l'unit ayant le comportement que je nomme de hyper-irrationnel ne permet pas l'utilisation de patrol. Si tu veux voir ej peux te donner ma map sans cette modification. Et je peux te dire que c'est affreux.
_________________
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: 19/02/12 21:36    Sujet du message: Citer

Donne, je suis comme Saint Thomas. (il me faut aussi ton "ancienne" version du code)
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 19/02/12 21:49    Sujet du message: Citer

Télécharger la map

La map comporte la vielle et la nouvelle version.
Pour voir le bug tu peux lancer la map et aller au niveau 1 ( l'objet ). Après il suffit de regarder le comportement des patrols "noirs" ( les monstres noirs ). ( enfin la l'effet est réduit a cause du Linear patrol mais on remarque qu'il est bizarre, avec la patrol normal il est très visible )

Si tu veux voir avec un patrol normal il te suffit de modifier une ligne dans Maze Utils dans la fonction CreateUnitForPatrol. Change la ligne qui lance la patrol par Linear Patrol par une patrol normal.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
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 Précédente  1, 2, 3, 4, 5, 6  Suivante
Page 3 sur 6

 
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