From e5f11d68c0dba07f12b0dfa4d586040f9195fdde Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Tue, 16 Jun 2020 08:40:07 +0200 Subject: [PATCH] add examples --- .luacheckrc | 11 +++++++ examples/simple_pattern.lua | 61 +++++++++++++++++++++++++++++++++++++ examples/simple_schema.lua | 40 ++++++++++++++++++++++++ readme.md | 4 +++ 4 files changed, 116 insertions(+) create mode 100644 examples/simple_pattern.lua create mode 100644 examples/simple_schema.lua diff --git a/.luacheckrc b/.luacheckrc index b36e64c..241a607 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -18,3 +18,14 @@ read_globals = { "mesecons", "default" } + +files["examples/"] = { + globals = { + "mem" + }, + read_globals = { + "event", + "interrupt", + "digiline_send" + } +} diff --git a/examples/simple_pattern.lua b/examples/simple_pattern.lua new file mode 100644 index 0000000..614be90 --- /dev/null +++ b/examples/simple_pattern.lua @@ -0,0 +1,61 @@ + +-- pattern, starting at -x/-z +local data = { + -- x >> + "sdsd", + "dsds" + -- z \/ +} + +local nodes = { + ["s"] = "default:stone", + ["d"] = "default:dirt" +} + +-- coordinate offsets +local x_offset = -10 +local y_offset = 1 +local z_offset = -10 + +-- initial start +if event.type == "program" then + mem.line = 1 + mem.pos = 1 + interrupt(1) +end + +-- timer interrupt +if event.type == "interrupt" then + local line = data[mem.line] + if not line then + -- done + return + end + + local char = line[mem.pos] + if not char then + -- next line + mem.line = mem.line + 1 + mem.pos = 1 + interrupt(0.5) + return + end + + digiline_send("digibuilder", { + command = "setnode", + pos = { x=x_offset+mem.pos-1, y=y_offset, z=z_offset+mem.line-1 }, + name = nodes[char] + }) +end + +-- callback from digibuilder node +if event.type == "digiline" and event.channel == "digibuilder" then + if event.error then + -- error state + error(event.message) + end + + -- next command + mem.line = mem.line + 1 + interrupt(1) +end diff --git a/examples/simple_schema.lua b/examples/simple_schema.lua new file mode 100644 index 0000000..b664732 --- /dev/null +++ b/examples/simple_schema.lua @@ -0,0 +1,40 @@ + +-- list of setnode commands +local data = { + { name = "default:stone", pos = { x=1, y=0, z=1 } }, + { name = "default:stone", pos = { x=-1, y=0, z=-1 } } +} + +-- initial start +if event.type == "program" then + mem.pos = 1 + interrupt(1) +end + +-- timer interrupt +if event.type == "interrupt" then + local entry = data[mem.pos] + if not entry then + -- done + return + end + + digiline_send("digibuilder", { + command = "setnode", + pos = entry.pos, + param2 = entry.param2, + name = entry.name + }) +end + +-- callback from digibuilder node +if event.type == "digiline" and event.channel == "digibuilder" then + if event.error then + -- error state + error(event.message) + end + + -- next command + mem.pos = mem.pos + 1 + interrupt(1) +end diff --git a/readme.md b/readme.md index 336f9f2..46931a5 100644 --- a/readme.md +++ b/readme.md @@ -46,6 +46,10 @@ if event.type == "digiline" and event.channel == "digibuilder" then end ``` +# Examples + +For code examples for the `luacontroller` see the "examples" directory + # Open issues * [ ] creative mode