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

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

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

by Grossam » Sun May 05, 2019 10:39

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 » Sun May 05, 2019 11:08

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: 33
Joined: Sun Apr 02, 2017 07:21
Location: Bourges
GitHub: Grossam
IRC: Grossam
In-game: Grossam

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

by Grossam » Sun May 05, 2019 13:33

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: 731
Joined: Sun Jan 26, 2014 17:01
Location: Lyon, France
GitHub: Gael-de-Sailly
IRC: Gael-de-Sailly
In-game: Gael-de-Sailly Ginkgoo

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

by Gael de Sailly » Mon May 06, 2019 16:47

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: 33
Joined: Sun Apr 02, 2017 07:21
Location: Bourges
GitHub: Grossam
IRC: Grossam
In-game: Grossam

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

by Grossam » Mon May 06, 2019 17:39

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.
 


Return to Français



Who is online

Users browsing this forum: No registered users and 1 guest