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=04e0079e6f98cdafd296f1ef2b5b5379Mé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] JumpingUnit
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
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 28/06/12 20:31    Sujet du message: Citer

La loop tu la fais dans la fonction sur laquelle le timer expire. Elle te sert à parcourir toutes les instances de structure pour exécuter les actions correspondantes.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


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

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

MessagePosté le: 28/06/12 21:55    Sujet du message: Citer

La fonction cos du jass utilise déjà un tableau. Une fonction cos précise utilise des calculs complexes et est bien plus lourde qu'une multiplication, l'utilisation d'un tableau avec les valeurs précalculées a été pensé afin de mettre la fonction sur une calculatrice; les calculatrices actuelles utilisent toujours cette méthode, c'est seulement que le tableau est plus grand afin d'avoir des valeurs plus précises.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 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: 28/06/12 22:15    Sujet du message: Citer

Jass:
//===================================================================================
//      JumpingUnit by Fulldragon
//===================================================================================
//
//  API :
//
//      call JumpUnit(whichUnit, height, time)
//
//  Requires :
//
//      TimerUtils - Made by Vexorian
//
//  Commentary
//
//      You can use it without credits. it's totaly free.
//
//===================================================================================
// gl & hf
//===================================================================================

library JumpingUnit uses TimerUtils
    globals
        private timer T
        private integer I = 0
        private Parabole array P
    endglobals

    struct Parabole
        unit u
        real a
        real b
        real c
        real incrementation
        real x = 0
        real max
       
        static method Jumping takes nothing returns nothing
            local integer i = 0
            local Parabole p
            local real a
            local unit u
            local real b
            local real c
            local real x
           
            loop
                exitwhen i == I
                set p = P[i]
                set x = x + p.incrementation

                if x < p.max then           
                    call SetUnitFlyHeight(u, a * Pow(x, 2) + b * x + c, 0)
                   
                    set p.x = x
                   
                else
                    set I = I - 1
                    call SetUnitFlyHeight(u, 0, 0.01)

                    if I == 0 then
                        call ReleaseTimer(GetExpiredTimer())
                    endif
                endif
               
                set u = null
                set i = i + 1
            endloop
        endmethod
    endstruct

    function JumpingUnit takes unit jumper, real height, real time returns nothing
        local real a = &#40;height * 4)/ &#40;-1 * Pow&#40;time, 2))
        local real b = -1 * a * time
        local real c = GetUnitFlyHeight&#40;jumper&#41;
        local Parabole p = Parabole.create&#40;&#41;
       
        set P[I] = p
        set T = NewTimer&#40;&#41;
        set I = I + 1
       
        set P[I].u = jumper
        set P[I].a = a
        set P[I].b = b
        set P[I].c = c
        set P[I].incrementation = 0.05
        set P[I].max = time
       
        if I == 1 then
            call TimerStart&#40;T, 0.05, true, function Parabole.Jumping&#41;
        endif

    endfunction

endlibrary


voila ce que ça donne, mais du coup j'ai plus besoin de TimerUtils ???
_________________
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
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 29/06/12 08:19    Sujet du message: Citer

Oui, par contre quelques petits trucs :

Jass:
//===================================================================================
//      JumpingUnit by Fulldragon
//===================================================================================
//
//  API :
//
//      call JumpUnit(whichUnit, height, time)
//
//  Requires :
//
//      TimerUtils - Made by Vexorian
//
//  Commentary
//
//      You can use it without credits. it's totaly free.
//
//===================================================================================
// gl & hf
//===================================================================================

library JumpingUnit uses TimerUtils
    globals
        private timer T = CreateTimer() // Créé ton timer ici plutôt d'en créer un à chaque fois, tu leakait d'un timer avant
        private integer I = 0
        private Parabole array P
    endglobals

    struct Parabole
        unit u
        real a
        real b
        real c
        real incrementation
        real x = 0
        real max
       
        static method Jumping takes nothing returns nothing
            local integer i = 0
            local Parabole p
            local real a
            local unit u
            local real b
            local real c
            local real x
           
            loop
                exitwhen i == I
                set p = P[i]
                // Ici, je crois que tu t'es embrouillé avec les p.x, x et tout ça, non? Cette ligne arrêtera l'exécution du code, x n'ayant aucune valeur
                // D'ailleurs il me semble que cette variable ne sert à rien puisque tu peux simplement utiliser p.x. Pareil pour a, b, c et le reste.
                set x = x + p.incrementation

                if x < p.max then           
                    call SetUnitFlyHeight(u, a * Pow(x, 2) + b * x + c, 0)
                   
                    set p.x = x
                   set i = i + 1 //Il ne faut ajouter 1 à i qu'ici pour que ce soit plus propre. Si cette instance avait été détruite, P[I-1] aurait pris sa place et n'aurait pas été énumérée
                else
                    call p.destroy() // Libère l'instance de structure quand t'en as plus besoin
                    set I = I - 1 // La tu diminue le total, mais tu ne réindexes pas, il faut ajouter la ligne suivante :
                    set P[i] = P[I]
                    call SetUnitFlyHeight(u, 0, 0.01) // Tu n'as pas défini u, je crois que c'est plutôt p.u.

                    if I == 0 then
                        call PauseTimer(T) // Mieux vaut le mettre en pause que de le supprimer, sinon tu devras en créer à chaque fois que I == 1 dans JumpingUnit
                    endif
                endif
               
                set u = null
                //set i = i + 1
                //Cf plus haut
            endloop
        endmethod
    endstruct

    function JumpingUnit takes unit jumper, real height, real time returns nothing
        local real a = &#40;height * 4)/ &#40;-1 * Pow&#40;time, 2))
        local real b = -1 * a * time
        local real c = GetUnitFlyHeight&#40;jumper&#41;
        local Parabole p = Parabole.create&#40;&#41;
       
        set P[I] = p
        //set T = NewTimer() Tu leakais d'un timer là
        set I = I + 1
       
        set P[I].u = jumper
        set P[I].a = a
        set P[I].b = b
        set P[I].c = c
        set P[I].incrementation = 0.05
        set P[I].max = time
       
        if I == 1 then
            call TimerStart&#40;T, 0.05, true, function Parabole.Jumping&#41;
        endif

    endfunction

endlibrary

_________________
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: 29/06/12 11:39    Sujet du message: Citer

et voila, testé et approuvé Smile

Jass:
library Jump uses TimerUtils

     globals
        private timer T = CreateTimer()
        private integer I = 0
        private Parabole array P
    endglobals

    struct Parabole
        unit u
        real a
        real b
        real c
        real incrementation
        real x = 0
        real max
       
        static method Jumping takes nothing returns nothing
            local integer i = 0
            local Parabole p

            loop
                exitwhen i == I
                set p = P[i]
                set p.x = p.x + p.incrementation

                if p.x < p.max then           
                    call SetUnitFlyHeight(p.u, p.a * Pow(p.x, 2) + p.b * p.x + p.c, 0)
                   
                    set i = i + 1
                else
                    call p.destroy()
                   
                    set I = I - 1
                    set P[i] = P[I]
                   
                    call SetUnitFlyHeight(p.u, 0, 0.01)

                    if I == 0 then
                        call PauseTimer(T)
                    endif
                endif
            endloop
        endmethod
    endstruct
   
    function JumpUnit takes unit jumper, real height, real time returns nothing
        local real a = (height * 4)/ (-1 * Pow(time, 2))
        local real b = -1 * a * time
        local real c = GetUnitFlyHeight(jumper)
        local Parabole p = Parabole.create()

        set P[I] = p
        set P[I].u = jumper
        set P[I].a = a
        set P[I].b = b
        set P[I].c = c
        set P[I].incrementation = 0.05
        set P[I].max = time
        set I = I + 1

        if I == 1 then
            call TimerStart(T, 0.05, true, function Parabole.Jumping)
        endif
    endfunction


édit >> la balise ne bug même plus =) c'est un signe.
_________________
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
 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: 17/07/12 13:18    Sujet du message: Re: [vjass] JumpingUnit Citer

fulldragon a écrit:
Nom de la fonction : JumpingUnit
Créateur : Fulldragon
Fonctions requises : TimerUtils
Code :
Jass:
//===================================================================================
//      JumpingUnit by Fulldragon
//===================================================================================
//
//  API :
//
//      call JumpUnit(whichUnit, height, time)
//
//  Requires :
//
//      TimerUtils - Made by Vexorian
//
//  Commentary
//
//      You can use it without credits. it's totaly free.
//
//===================================================================================
// gl & hf
//===================================================================================
library JumpingUnit uses TimerUtils

     globals
        private timer T = CreateTimer()
        private integer I = 0
        private Parabole array P
    endglobals

    struct Parabole
        unit u
        real a
        real b
        real c
        real incrementation
        real x = 0
        real max
       
        static method Jumping takes nothing returns nothing
            local integer i = 0
            local Parabole p

            loop
                exitwhen i == I
                set p = P[i]
                set p.x = p.x + p.incrementation

                if p.x < p.max then           
                    call SetUnitFlyHeight(p.u, p.a * Pow(p.x, 2) + p.b * p.x + p.c, 0)
                   
                    set i = i + 1
                else
                    call p.destroy()
                   
                    set I = I - 1
                    set P[i] = P[I]
                   
                    call SetUnitFlyHeight(p.u, 0, 0.01)

                    if I == 0 then
                        call PauseTimer(T)
                    endif
                endif
            endloop
        endmethod
    endstruct
   
    function JumpUnit takes unit jumper, real height, real time returns nothing
        local real a = (height * 4)/ (-1 * Pow(time, 2))
        local real b = -1 * a * time
        local real c = GetUnitFlyHeight(jumper)
        local Parabole p = Parabole.create()

        set P[I] = p
        set P[I].u = jumper
        set P[I].a = a
        set P[I].b = b
        set P[I].c = c
        set P[I].incrementation = 0.01
        set P[I].max = time
        set I = I + 1

        if I == 1 then
            call TimerStart(T, 0.01, true, function Parabole.Jumping)
        endif
    endfunction
endlibrary

Utilisation : Dans un escape poru sauter par dessus un obstacle.
Copyright : Totalement libre pas besoin de me citer où que ça soit.
Remarques : Attention SetUnitFlyHeight bug quelque peu sur la définition d'altitude. Il faut ajouter/enlever la compétence corbeau 'Amrf' pour pouvoir changer correctement la hauteur d'une unité lors de sa création.

_________________
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 -> 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