Timer.js, un script pour les gouverner tous

Publié le 10 août 2014 par Beldarak @Beldarak

Hello tout le monde !
Un billet bien différent de d'habitude aujourd'hui avec un cadeau pour les codeurs qui utilisent Unity.

C'est quoi ?! C'est quoi ?!!!


C'est le script que j'utilise pour gérer tous mes timers, que ce soit pour du fading de trucs divers (musique, transparence d'une image, etc...), pour les cooldowns des sorts, pour les animations de mes personnages, etc...
Ça fait longtemps que je l'utilise et depuis l'horrible première version qui utilisait des numéros d'identification pour désigner les différents timers (genre, timer[0] = le timer de l'animation de marche => bonne chance pour s'y retrouver dans votre code quand vous gérez 30 timers différents^^), ce script a fini par devenir vraiment simple d'utilisation et rudement efficace.
Du coup je me suis dit que ça pourrait en intéresser certains. C'est cadeau !

Les fonctions à connaitre


InitializeTimer(name:String)
Démarre un timer
Cooldown(name:String, timeToWait:float) : boolean
Permet de voir si timeToWait (en secondes) s'est écoulé depuis le lancement du timer
Countdown(name:String, timeToWait:float) : float
Pareil mais renvoie le temps restant (en secondes)
SafeCooldown(name:String, timeToWait:float) : boolean
Idem que Cooldown mais, contrairement à celui-ci, renvoie false si le timer n'a pas été initialisé avant

Utilisation concrète


Vous allez voir que c'est simple comme tout à utiliser, en général je n'utilise que les deux premières fonctions.
La première étape c'est de lier le script à un GameObject et de le déclarer dans le script qui doit l'utiliser. Attention que les timers sont donc partagés dans un même gameObject. Donc si deux scripts présents sur un seul gameObject l'utilisent, attention à ne pas donner deux fois le même nom à deux timers différents.
Ensuite c'est très simple. En fait InitializeTimer() n'est pas vraiment utilisé pour initialiser un timer (en général !) mais plutôt pour le réinitialiser.
On va donc tout de suite partir sur notre fonction Cooldown(). Imaginons qu'on veuille faire une animation de marche ou d'attaque en deux frames.

Rien de plus simple ! On va travailler dans la fonction Update() de notre script de déplacements.
Cliquez sur l'image pour la voir en grand
Et voilà, c'est aussi simple que ça !
Pourquoi on initialise pas le timer avant de l'utiliser ?
En fait, la première fois qu'on va appuyer sur la touche de déplacement, la fonction Cooldown va se rendre compte qu'on a pas initialisé notre timer. Elle va donc renvoyer true, notre animation de marche va se lancer puis on initialise le timer.
Le fait qu'on ne l'ait pas initialisé avant d’appeler Cooldown va simplement faire que dès l'appui sur la touche, l'image du perso va changer.
Parfois, vous voudrez peut-être éviter ça (pour éviter qu'une bombe explose dès que vous la posez par exemple^^). Dans ce cas il suffit d'utiliser SafeCooldown() ou bien d'Initialiser le timer avant d’appeler Cooldown().

Conclusion et download


Voilà voilà, j'espère que j'ai correctement expliqué tout ça. Retenez surtout l'utilisation concrète, c'est ça que j'utilise dans 99% du temps, le reste est assez peu utilisé mais c'est utile de savoir que c'est là pour le jour où vous en avez besoin^^.
Vous trouverez le script ici
Vous pouvez l'utiliser dans tous types de projets (commerciaux ou non), le modifier, le redistribuer, etc... Vous pouvez me citer dans les crédits de votre jeu si vous voulez mais vous n'êtes pas obligés.
(N'hésitez pas à laisser un commentaire si le lien vient à mourir).