[modding]Introduire un délai entre deux appels de swap_node

French
Post Reply
User avatar
Grossam
Member
Posts: 36
Joined: Sun Apr 02, 2017 07:21
GitHub: Grossam
IRC: Grossam
In-game: Grossam
Location: Bourges
Contact:

[modding]Introduire un délai entre deux appels de swap_node

by Grossam » Post

Bonjour,

j'ai posé la question sur la partie anglophone du serveur et sur l'IRC destiné au modding, mais je n'y ai pas trouvé d'aide.

Dans ce bout de code : https://pastebin.com/p33eVDNd le swap_node de la ligne 43 devrait se produire une seconde et demie après celui de la ligne 37. Mais non, la ligne 43 s'exécute de suite, et on n'a même pas le temps d'apercevoir l'autre node (en commentant la ligne 43, on voit que la ligne 37 s'éxécute bien).

D'où provient ce comportement étrange, et comment le contourner ? Il n'y a pas un sleep ou un wait en natif dans LUA ou dans l'API Minetest ?

Merci !
Gloire à qui, n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins.

User avatar
fwhcat
Member
Posts: 26
Joined: Thu Aug 04, 2016 14:36
GitHub: fwhcat
IRC: fwhcat
In-game: fwhcat

Re: [modding]Introduire un délai entre deux appels de swap_n

by fwhcat » Post

Salut Grossam,
peux-tu essayer avec os.time() et os.difftime() qui calcule directement l'écart en secondes?

Code: Select all

    -- wait 5 seconds before swapping the node again please !
    local t0 = os.time()
    while os.difftime(os.time(), t0) <= 5 do end
    minetest.swap_node(pos, {name = "scifi_nodes:palm_scanner_off", param2 = node.param2})
(On ne sait jamais).
Meowww

User avatar
Grossam
Member
Posts: 36
Joined: Sun Apr 02, 2017 07:21
GitHub: Grossam
IRC: Grossam
In-game: Grossam
Location: Bourges
Contact:

Re: [modding]Introduire un délai entre deux appels de swap_n

by Grossam » Post

Aucun changement… ça doit être une histoire de threads dans l'implémentation du moteur ?
Gloire à qui, n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins.

User avatar
Gael de Sailly
Member
Posts: 753
Joined: Sun Jan 26, 2014 17:01
GitHub: Gael-de-Sailly
IRC: Gael-de-Sailly
In-game: Gael-de-Sailly Ginkgoo
Location: France

Re: [modding]Introduire un délai entre deux appels de swap_n

by Gael de Sailly » Post

Salut,

Un problème plus embêtant avec ce code c'est que même si ça marche, ça va occuper le serveur pendant 1.5s alors qu'il pourrait faire autre chose, et ça va créer du lag.
Grossam wrote:Il n'y a pas un sleep ou un wait en natif dans LUA ou dans l'API Minetest ?
Il y a minetest.after qui exécute une fonction avec un délai et sans monopoliser le serveur.

Le code ressemblerait à ça :

Code: Select all

    minetest.swap_node(pos, {name = "scifi_nodes:palm_scanner_checking", param2 = node.param2})
    minetest.sound_play("scifi_nodes_palm_scanner", {max_hear_distance = 8, pos = pos, gain = 1.0})

    -- wait a minute please !
    minetest.after(1.5, function()
        minetest.swap_node(pos, {name = "scifi_nodes:palm_scanner_off", param2 = node.param2})
        -- etc.
    end)
Just realize how bored we would be if the world was perfect.

User avatar
Grossam
Member
Posts: 36
Joined: Sun Apr 02, 2017 07:21
GitHub: Grossam
IRC: Grossam
In-game: Grossam
Location: Bourges
Contact:

Re: [modding]Introduire un délai entre deux appels de swap_n

by Grossam » Post

Oui, on m'a a parlé sur le forum anglais. J'ai refait avec et ça marche au poil.

Sinon il y a un truc plus propre avec les timers (je vais peut-être refaire mon implémentation du coup) :

fonction toggle_scanner : scanner_off → scanner_checking → scanner_on → scanner_off…

Avec à chaque transition l'initialisation d'un timer et le on_timer qui va bien dans le register_node concerné.

Si tu es curieux, le dépot est là : https://git.fwhost.eu/Grossam/scifi_nodes
Gloire à qui, n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins.

Post Reply

Who is online

Users browsing this forum: No registered users and 0 guests