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=fdd14a7061cbfb051391c1af3cc6ee17Mé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

Gestion des instances de struct
Aller à la page Précédente  1, 2, 3, 4, 5  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels -> En validation
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 kungfu-sheep
Anomalie floodiforme


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


MessagePosté le: 29/01/13 00:01    Sujet du message: Citer

Sapeur just powned TB :p
Du coup j'attend plus que l'avis de tirlititi pour la validation
_________________
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: 7142
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: 29/01/13 02:12    Sujet du message: Citer

Parce que je ne pouvais pas rester sur un epic fail j'ai fait une version avec une linked list :

Jass:
library
     globals
     //quelques constant private
     
          private constant real PERIOD = 0.03

     endglobals

     struct Nom

        private thistype prev
        private thistype next
        private static thistype last = 0

          // les composants de la struct

          method destroy takes nothing returns nothing

                call this.deallocate() // l'instance est bien détruite, donc recyclée
               
                set this.prev.next =  this.next
                set this.next.prev = this.prev
                set thistype.last = this.prev

          endmethod
         
          private static method nom2 takes nothing returns nothing

               //celle qui exécutera les instances une à une
               local thistype this = thistype.last
               local thistype last = this

              if this == 0 then
                  return
              endif

               loop
               set this = this.next
               
                   //les actions à exécuter pour chaque instance : this
                   // on peut détruire this sans problème
                   call this.destroy()

               exitwhen this == last
               
               endloop

          endmethod

          static method create takes /* ce que tu veux*/ returns thistype
                local thistype this = thistype.allocate()
               
                set this.prev = thistype.last
                set this.next = thistype.last.next
                set thistype.last.next.prev = this
                set thistype.last.next = this
                set thistype.last = this

                return this
          endmethod

          static method onInit takes nothing returns nothing
              call TimerStart(CreateTimer(),PERIOD,true,function thistype.nom2)
          endmethod

     endstruct
endlibrary


Cela dit je l'ai fait pour le fun , j'ai bien conscience que contrairement à l'autre solution c'est plus difficile à retenir par coeur, et faut réfléchir, surtout pour construire la method create.
Je ne l'ai pas testé il peut y avoir des erreurs. Et oui il y a des éléments perfectibles.
_________________
Le violet, c'est moche.


Dernière édition par Troll-Brain le 29/01/13 12:29; édité 5 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1784
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 29/01/13 11:50    Sujet du message: Citer

Oui, oui, Sapeur avait raison (enfin, comme je l'ai dit, ça évite ta méthode pour trouver le "i" en bouclant sur toute la struct à chaque fois qu'on détruit une instance, Full).

Après, la double-linked list, moi je suis pas habitué à en utiliser, mais ça a ses avantages et ça m'a l'air de demander le même nombre de variable, donc c'est vraiment selon les goûts de chacun.

Par contre, je pense pas que ça fonctionne comme c'est fait là, TB ^^.
Déjà, le static "last" est initialisé à 0 et ce n'est pas une instance valide. Ça pose quand même plusieurs problèmes (l'instance 1 sera mal initialisée, par exemple). Je propose ça pour ".create()" :
Jass:
          static method create takes /* ce que tu veux*/ returns thistype
                local thistype this = thistype.allocate()
               
                if thistype.last == 0 then
                    set thistype.last = this
                    set this.prev = this
                    set this.next = this
                    // call TimerStart peut être mis là.
                else
                    set this.prev = thistype.last
                    set this.next = thistype.last.next
                    set thistype.last.next.prev = this
                    set thistype.last.next = this
                    set thistype.last = this
                endif

                return this
          endmethod


Ensuite, ta loop se termine directement ^^. Je propose ça pour la loop (à priori, si le timer n'est lancé que quand il y a au moins une instance, on a pas besoin du "if") :
Jass:
          private static method nom2 takes nothing returns nothing

               //celle qui exécutera les instances une à une
               local thistype this = thistype.last
               local thistype last = this

               if last == 0 then
                   return
               endif

               loop
                   set this = this.next // Pour faire en sorte que le "thistype.last" soit le dernier de la boucle
                                        // au cas où il serait détruit.

                   //les actions à exécuter pour chaque instance : this
                   // on peut détruire this sans problème
                   call this.destroy()

                   exitwhen this == last
               endloop

          endmethod


Pour le ".destroy", je crois qu'on n'a pas non plus d'autre choix que de gérer la destruction de la dernière instance à part :
Jass:
          method destroy takes nothing returns nothing
               
                if this.next == this then
                    set thistype.last = 0
                    // call PauseTimer ici
                else
                    set this.prev.next =  this.next
                    set this.next.prev = this.prev
                    set thistype.last = this.prev
                endif

                call this.deallocate() // je préfère le mettre à la fin par principe ^^

          endmethod

Je précise que c'est tout autant pas testé que le tien ^^.
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7142
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: 29/01/13 12:14    Sujet du message: Citer

Ca devrait être corrigé pour la loop.

J'ai utilisé une liste doublement chainée circulaire pour avoir une création/destruction plus facile qu'une non circulaire.
Et normalement thistype.last devrait toujours pointer sur une instance valide (elle pointera sur 0 si il n'y a plus d'instances en cours)
En fait le principe c'est qu'à chaque destruction je redéfinis thistype.last, histoire de toujours pointer sur une instance valide (peu importe laquelle).

Code toujours pas testé Razz
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1784
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 29/01/13 14:01    Sujet du message: Citer

Petit test du code que tu as mis pour te dire pourquoi j'ai fait des modifications :

Étape 0 :

  • last = 0
  • last.next = 0
  • last.prev = 0


Étape 1 (création d'une instance h1) :

  • h1.prev = 0
  • h1.next = 0
  • 0.prev = h1
  • 0.next = h1
  • last = h1


Donc là, on voit déjà que ça se comporte comme si y'avait 2 instances valides : h1 et 0 (alors que 0 n'a pas été initialisé et est invalide comme instance de struct).

Étape 2 (création d'une instance h2) :

  • h2.prev = h1
  • h2.next = 0
  • h1.prev = 0
  • h1.next = h2
  • 0.prev = h2
  • 0.next = h1
  • last = h2


Et l'instance "0" reste dans la liste circulaire...
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7142
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: 29/01/13 14:21    Sujet du message: Citer

Ah oui exact, pardon ne pas avoir eu foi en toi Razz
Faut vraiment que je prenne ma retraite moi ca va de mal en pis.

Mais du coup le code devient bien plus complexe que je ne l'avais imaginé, soit "on" s'y prend comme un manche soit autant utiliser une liste chainée non circulaire.
Je sais que tu sais que je sais que tu sais que l'on pourrait simplifier un peu le code en utilisant un simple if au lieu d'un if/else dans les method create & destroy, mais oui ca rendrait le code moins "performant".

Je retente ma chance ce soir avec une liste non circulaire pour voir la différence Very Happy
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 kungfu-sheep
Anomalie floodiforme


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


MessagePosté le: 29/01/13 17:10    Sujet du message: Citer

Donc mon tuto est validé ou pas ? ><
_________________
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: 7142
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: 29/01/13 17:58    Sujet du message: Citer

fulldragon a écrit:
Donc mon tuto est validé ou pas ? ><


T'as pas honte d'interrompre notre conversation ?
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Cho'gall
Floodeur prématuré


Inscrit le: 05 Nov 2010
Messages: 696
Sujets: 56
Spécialité en worldedit: Cartes Melee


MessagePosté le: 29/01/13 18:38    Sujet du message: Citer

Troll-Brain a écrit:
fulldragon a écrit:
Donc mon tuto est validé ou pas ? ><


T'as pas honte d'interrompre notre conversation ?


Ah bon parce qu'il y a autre chose à dire ? Rolling Eyes
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1784
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 29/01/13 18:40    Sujet du message: Citer

Hum, hum. Vlad t'a fait remarqué des fautes d'orthographe au début de la page 2, on est à la fin de la page 4 et tu ne les as toujours pas corrigées?

Secret:


_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7142
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: 29/01/13 18:47    Sujet du message: Citer

Cho'gall a écrit:
Troll-Brain a écrit:
fulldragon a écrit:
Donc mon tuto est validé ou pas ? ><


T'as pas honte d'interrompre notre conversation ?


Ah bon parce qu'il y a autre chose à dire ? Rolling Eyes


Là n'est pas le sujet.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 kungfu-sheep
Anomalie floodiforme


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


MessagePosté le: 29/01/13 18:49    Sujet du message: Citer

j'aurais pu vous proposé une liste chainée non circulaire mais après réflexion j'me suis dit que c'était pas très intéressant au vu de ce que je voulais faire avec, et du but de ce tutoriel.


Tirlititi a écrit:
Hum, hum. Vlad t'a fait remarqué des fautes d'orthographe au début de la page 2, on est à la fin de la page 4 et tu ne les as toujours pas corrigées?

Secret:



je vois même pas où il trouve une faute dans "apparaitre"...
et "j'ai mi" a été corrigé.
_________________
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
 Vladadamm
Floodozaurus


Inscrit le: 11 Fév 2011
Messages: 2151
Sujets: 114
Spécialité en worldedit: Chasser le Dragon, puis l'exterminer proprement avec une petite cuillère et une poêle.


MessagePosté le: 29/01/13 19:21    Sujet du message: Citer

C'est apparaître, pas apparaitre...

EDIT Tirlititi : post modéré
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1784
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 29/01/13 19:30    Sujet du message: Citer

Citation:
Gestion des instances de struct

Citation:
chaque instance sauvegardée dans la structure

Citation:
chaque cycliste a ses propres caractéristiques

Citation:
une boucle passant en revue

Citation:
gérer des actions exécutée par un utilisateur

Citation:
C'est vers ces cas là

Citation:
J'ai mis dans les method_ create et destroy le minimum syndical qui doit apparaitre.

Citation:
Et sinon t'expliques pas pourquoi on est obligé de mettre tout ça ?

Citation:
Pour ce qui est des variables que j'ai déjà mis, elles sont indispensables

Citation:
en plus d'être indispensables elles sont généralement suffisantes.

Citation:
c'est elle qui sera appelée au cours de la map.

Citation:
Elle est donc là

Citation:
C'est à ce moment là que le timer est utile, celui-ci

Citation:
puisque la method contient une boucle passant en revue toutes les instances de structure_

Citation:
Fais un exemple sinon ils vont se faire c****

Citation:
-unité créée;

Citation:
À la différence que cette method n'est pas static

Citation:
la struct est susceptible de leak

Citation:
Ce qui donne ce que j'avais déjà mis là haut :

Citation:
J'te conseille de revenir vite fait sur le membre privé.

Citation:
la case de notre tableau This qui s'est libérée

Citation:
La case libérée étant le numéro d'instance de l'instance supprimée... C'est là qu'on va s'en servir.

Citation:
mettre à jour_ le numéro d'instance de l'instance déplacée

Citation:
à ce moment là [...] à ce tour là

Citation:
Imaginez ce problème

Citation:
surtout la method create en fait_

Citation:
la propriété de fonction banale rattachée

Pinaise, qu'est-ce que c'est génial de faire remarquer leurs erreurs aux autres !

...

Non, en fait c'était horrible. Je le referai plus jamais, de reprendre les fautes d'un post aussi long ><.

J'ai pas considéré comme fautes les absences de négation ni les accords des mots anglais (mais parfois t'accordes, parfois pas, faudrait choisir).

Après, l'orthographe n'est pas la seule chose à revoir, mais ce sera pour un autre jour pour moi... (c'est des détails, le tuto est plutôt bien)
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 kungfu-sheep
Anomalie floodiforme


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


MessagePosté le: 29/01/13 19:47    Sujet du message: Citer

je t'accorde que pour le coup j'ai pas super bien rédigé ce tuto.... (d'habitude j'y attache beaucoup plus d'importance mais l'inspiration me fuit depuis quelques temps)
pour ces fautes d'orthographes... mea culpa ^^

édit : tout corrigé... merci tir pour cette relecture ^^"
_________________
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
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels -> En validation Toutes les heures sont au format GMT + 1 Heure
Aller à la page Précédente  1, 2, 3, 4, 5  Suivante
Page 4 sur 5

 
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