samedi 28 juin 2008

asio et les timers

Dans AdH, certaines actions s'effectuent dans la durée. Par exemple, un joueur peut décider d'aller à la plage pour ramasser des coquillages, et avoir par exemple une chance d'en trouver toutes les 10 secondes. S'il décide de s'en aller, l'action courante est automatiquement annulée.

Ce qui tombe bien, c'est que asio::deadline_timer gère tout cela (presque) tout seul. Je peux créer une action, et lui dire d'appeler une méthode de ma classe de session dans un temps donné. Après ce délai, la méthode est appelée, et je peux alors effectuer l'action, par exemple rajouter un coquillage à l'inventaire du personnage.

Si le joueur change de lieu, il est facile d'annuler l'action, simplement en appelant cancel. La méthode d'action est alors appelée avec un code d'erreur, et je peux alors en profiter pour renvoyer au joueur l'information que l'action a été annulée.

Le système gèrera ainsi une action courante pour chaque joueur, qui sera utilisée notamment par toute la partie artisanat.

Aucun commentaire: