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=9a968074890f18006a9b2c2282332774Mé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] circleslide
Aller à la page Précédente  1, 2
 
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
 Bantas
Anomalie floodiforme


Inscrit le: 21 Aoû 2007
Messages: 1524
Sujets: 37

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

MessagePosté le: 04/07/13 05:06    Sujet du message: Citer

Troll-Brain a écrit:
Je savais bien qu'il fallait laisser la lumière ouverte !

Les method say cool.
Heheh, je vais mettre le post à jour pour la forme. Laisse moi réécrire ça. Par contre ce sera toujours un timer par slide parce que bon, j'ai pas envie de m'embêter avec. On a la place.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Bantas
Anomalie floodiforme


Inscrit le: 21 Aoû 2007
Messages: 1524
Sujets: 37

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

MessagePosté le: 06/07/13 04:31    Sujet du message: Citer

Plutôt des changements sur la forme que sur le fond, mais voilà :
Secret:

Code:
library CircleSlide requires TimerUtils

//*********************************************************************
//Méthode principale :
//static method create  takes   unit whichUnit,
//                              real speed,
//                              real aroundX,
//                              real aroundY,
//                              real duration,
//                              real offset
//                      returns circleslide
//
//whichUnit est l'unité qui va tourner autour du point.
//speed est la vitesse linéaire de l'unité, en distance par seconde. Valeur positive pour tourner dans le sens trigonométrique, négative pour le sens horaire.
//aroundX et aroundY sont les coordonnées du point autour duquel l'unité va tourner
//duration est la durée du mouvement.
//offset est la vitesse à laquelle l'unité va s'éloigner du point. Valeur négative pour l'en approcher.
//
//*********************************************************************
//
//Getters :
//method getUnit takes nothing returns unit
//method getSpeed takes nothing returns real
//method getCenterX takes nothing returns real
//method getCenterY takes nothing returns real
//method getRemainingTime takes nothing returns real
//method getOffset takes nothing returns real
//
//Setters :
//method setUnit takes unit newUnit returns boolean
//method setSpeed takes real newSpeed returns boolean
//method setCenterX takes real newAroundX returns nothing
//method setCenterY takes real newAroundY returns nothing
//method setRemainingTime takes real newDuration returns boolean
//method setOffset takes real newOffset returns boolean
//Les méthodes renvoyant un booléen indiquent si l'opération n'a pas détruit la struct et donc arrêté le mouvement.
//
//*********************************************************************

globals
    private constant real FLUID_VIS_PERIOD = 0.027
    //Fluid-Visual Period. Ce temps séparera chacun
    //des mouvements effectués de façon à ce que le
    //résultat final paraisse fluide.
endglobals

struct circleslide
    private unit whichUnit  //Unité en mouvement
    private timer whichTimer
    private real speed      //Vitesse linéaire de l'unité
    private real aroundX    //Coordonnées du centre du cercle
    private real aroundY
    private real duration   //Temps restant
    private real offset     //L'unité s'éloigne du centre à cette vitesse chaque occurrence.

    //Getters
    method getUnit takes nothing returns unit
        return this.whichUnit
    endmethod
   
    method getSpeed takes nothing returns real
        return this.speed
    endmethod
   
    method getCenterX takes nothing returns real
        return this.aroundX
    endmethod
   
    method getCenterY takes nothing returns real
        return this.aroundY
    endmethod
   
    method getRemainingTime takes nothing returns real
        return this.duration
    endmethod
   
    method getOffset takes nothing returns real
        return this.offset
    endmethod
   
    //Setters
    method setUnit takes unit newUnit returns boolean
        local boolean b = (whichUnit != null)
        if (b) then
            set this.whichUnit = newUnit
        else
            call this.destroy()
        endif
        return b
    endmethod
   
    method setSpeed takes real newSpeed returns boolean
        local boolean b = (newSpeed == 0 and this.offset == 0)
        set this.speed = newSpeed
        if (b) then
            call this.destroy()
        endif
        return (not b)
    endmethod
   
    method setCenterX takes real newAroundX returns nothing
        set this.aroundX = newAroundX
    endmethod
   
    method setCenterY takes real newAroundY returns nothing
        set this.aroundY = newAroundY
    endmethod
   
    method setRemainingTime takes real newDuration returns boolean
        local boolean b = (newDuration >= FLUID_VIS_PERIOD)
        if (b) then
            set this.duration = newDuration
        else
            call this.destroy()
        endif
        return b
    endmethod
   
    method setOffset takes real newOffset returns boolean
        local boolean b = (this.speed == 0 and newOffset == 0)
        set this.offset = newOffset
        if (b) then
            call this.destroy()
        endif
        return (not b)
    endmethod
   
    //Méthodes principales
    private method onDestroy takes nothing returns nothing
        call ReleaseTimer(this.whichTimer)
    endmethod
   
    private static method cycle takes nothing returns nothing
        local circleslide this = GetTimerData(GetExpiredTimer())
   
        //Calcul de la nouvelle position
        local real dx = GetUnitX(this.whichUnit) - this.aroundX
        local real dy = GetUnitY(this.whichUnit) - this.aroundY
        local real distance = SquareRoot((dx * dx) + (dy * dy)) + this.offset //distance du centre
        local real angle = Atan2(dy,dx) + Atan2(this.speed,distance)
        local real x = this.aroundX + distance * Cos(angle)
        local real y = this.aroundY + distance * Sin(angle)
   
        //Réglage de la nouvelle position
        call SetUnitX(this.whichUnit,x)
        call SetUnitY(this.whichUnit,y)

        //Fin du cycle ?
        set this.duration = this.duration - FLUID_VIS_PERIOD
        if (this.duration <= 0) then
            call this.destroy()
        endif
    endmethod
   
    static method create takes unit whichUnit, real speed, real aroundX, real aroundY, real duration, real offset returns circleslide
        local circleslide this = 0
       
        //Vérification que les paramètres sont corrects.
        if (whichUnit == null) then
            debug call BJDebugMsg("circleslide.create() : L'unité donnée n'existe pas. Le mouvement a été annulé. Merci de signaler ce problème au développeur.")
            return 0
        endif
        if (duration < FLUID_VIS_PERIOD) then
            debug call BJDebugMsg("circleslide.create() : La durée donnée est trop courte. Le mouvement a été annulé. Merci de signaler ce problème au développeur.")
            return 0
        endif
   
        //Setting struct
        set this = circleslide.allocate()
        set this.whichUnit = whichUnit
        set this.whichTimer = NewTimer()
        set this.speed = speed * FLUID_VIS_PERIOD
        set this.aroundX = aroundX
        set this.aroundY = aroundY
        set this.duration = duration
        set this.offset = offset * FLUID_VIS_PERIOD
   
        //Setting timer
        call SetTimerData(this.whichTimer, this)
        call TimerStart(this.whichTimer, FLUID_VIS_PERIOD, true, function circleslide.cycle)
   
        return this
    endmethod
   
endstruct

endlibrary

Les commentaires sont passés en français et les membres en privé (avec setters et getters associés) - et c'est tout en méthode. Aussi, fait non négligeable, le code marche. Hrm. Je mettrais ça en première page après approbation / relecture.
_________________
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: 07/07/13 19:48    Sujet du message: Citer

Y'a jamais eu vraiment de système d'approbation ici, tu postes ton code et on prie pour que ca fonctionne, stou Razz

Secret:

Ouai parce qu'un code ne peut pas "marcher" étant dépourvu d'appendices appropriés à une telle action de déplacement longitudinal.


_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Bantas
Anomalie floodiforme


Inscrit le: 21 Aoû 2007
Messages: 1524
Sujets: 37

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

MessagePosté le: 07/07/13 20:46    Sujet du message: Citer

Troll-Brain a écrit:
Y'a jamais eu vraiment de système d'approbation ici, tu postes ton code et on prie pour que ca fonctionne, stou Razz
Bah, je voulais être sûr que ce soit pas trop moche quoi.

Première page mise à jour, et il semblerait que la balise JASS n'aime pas les if (b) then. C'est pas un nom très évocateur mais je ne m'en sers que pour des fonctions courtes.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Bantas
Anomalie floodiforme


Inscrit le: 21 Aoû 2007
Messages: 1524
Sujets: 37

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

MessagePosté le: 10/07/13 02:06    Sujet du message: Citer

Une petite relecture m'a fait remarquer que (1) j'acceptais une vitesse nulle à la création, (2) je stockais la vitesse après l'avoir multiplié par FLUID_VIS_PERIOD mais renvoyais la vitesse telle qu'elle était stockée et donc pas par second et (3) les méthodes setSpeed et setOffset ne multipliaient pas la vitesse par FLUID_VIS_PERIOD. Je suis un peu trop flemmard avec tout ces machins et je les teste pas comme il faut Sad Je vais mettre la première page à jour.
_________________
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: 10/07/13 16:47    Sujet du message: Citer

cpasbien (comme le tk du nom)
_________________
Le violet, c'est moche.
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
Page 2 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