-- Everything is described as if dir=0 -- z+ -- /|\ w -- | XXX h -- +−−−−−−−−−−−> x+ -- {name,width,height,{cables_left,cables_right,cables_top,cables_bottom}} logikraft.components = { ["and"] = { width = 2, height = 3, ports = { left = {"in_2",nil,"in_1"}, right = {nil,"out",nil} }, inputs = {"in_1","in_2"}, outputs = {"out"}, compute = function(inz) return {out = (inz["in_1"] * inz["in_2"] == 0) and 0 or 1} end }, ["switch"] = { width = 2, height = 1, ports = { left = {"in"}, right = {"out"}, top = {"activate",nil} }, inputs = {"in","activate"}, outputs = {"out"}, compute = function(inz) if inz["activate"]==1 then return {out = inz["in"]} else return {} end end }, ["demux"] = { width = 2, height = 8, ports = { left = {nil,nil,nil,nil,nil,"in_3","in_2","in_1"}, right = {"out_8","out_7","out_6","out_5","out_4","out_3","out_2","out_1"} }, inputs = {"in_1","in_2","in_3"}, outputs = {"out_8","out_7","out_6","out_5","out_4","out_3","out_2","out_1"} }, ["input"] = { width = 1, height = 1, ports = { right = {"out"} }, inputs = {}, outputs = {"out"} }, ["output"] = { width = 1, height = 1, ports = { left = {"in"} }, inputs = {"in"}, outputs = {} } } for name,cmp in pairs(logikraft.components) do logikraft.registerComponent(name,cmp) end