async/README.md

86 lines
2.0 KiB
Markdown
Raw Normal View History

extended_api
===========
2018-11-10 14:08:56 +01:00
extended_api mod is a library pack.
It adds two new node events and contains async functions.
Usage Async
===========
1. create a async pool.
```lua
2018-11-10 14:08:56 +01:00
pool = extended_api.Async.create_async_pool()
```
2. set the priority of the async pool to high.
```lua
2018-11-10 14:08:56 +01:00
extended_api.Async.priority(pool,50,500)
```
3. iterate from 1 to 50 and log the value i.
```lua
2018-11-10 14:08:56 +01:00
extended_api.Async.iterate(pool,1,50,function(i)
minetest.log(i)
end)
```
4. run throught each element in a table.
```lua
local array = {"start","text2","text3","text4","text5","end"}
2018-11-10 14:08:56 +01:00
extended_api.Async.foreach(pool,array, function(k,v)
minetest.log(v)
end)
```
5. async do while loop.
```lua
local c = 50
2018-11-10 14:08:56 +01:00
extended_api.Async.do_while(pool,function() return c>0 end, function()
minetest.log(c)
c = c - 1
end)
```
6. register a async globalstep. this one spams the chat with the word spam.
```lua
2018-11-10 14:08:56 +01:00
extended_api.Async.register_globalstep(pool,function(dtime)
minetest.chat_send_all("spam")
end)
```
7. chain task runs a group of functions from a table.
```lua
2018-11-10 14:08:56 +01:00
extended_api.Async.chain_task(pool,{
function(args)
2018-11-10 14:08:56 +01:00
args.count = 1
minetest.log(args.count)
return args
end,
function(args)
2018-11-10 14:08:56 +01:00
args.count = args.count + 1
minetest.log(args.count)
return args
2018-11-09 23:04:48 +01:00
end})
```
8. adds a single function to the task queue. This is a sort of waiting list.
```lua
2018-11-10 14:08:56 +01:00
extended_api.Async.queue_task(pool,function()
2018-11-09 23:04:48 +01:00
minetest.log("Hello World!")
end)
```
Usage Node
===========
1. this covers both functions. I made this for a way to awake node timers without abms.
```lua
minetest.register_node("default:stone", {
description = "Stone",
tiles = {"default_stone.png"},
groups = {cracky = 3, stone = 1},
drop = 'default:cobble',
legacy_mineral = true,
sounds = default.node_sound_stone_defaults(),
on_construct_node_near_by = function(pos,other_pos,name)
if name == "tnt:tnt" then
minetest.chat_send_all("Do not place tnt near me thank you!")
end
end,
on_destruct_node_near_by = function(pos,other_pos,name)
if name == "default:dirt" then
minetest.chat_send_all("I hate dirt too!")
end
end,
})
```