|
1 | 1 | -- Reference
|
2 | 2 | -- ports = get_real_portstates(pos): gets if inputs are powered from outside
|
3 | 3 | -- newport = merge_portstates(state1, state2): just does result = state1 or state2 for every port
|
4 |
| --- action_setports(pos, ports, vports): activates/deactivates the mesecons according to the portstates (helper for action) |
| 4 | +-- action_setports(pos, rule, state): activates/deactivates the mesecons according to the portstates (helper for action) |
5 | 5 | -- action(pos, ports): Applies new portstates to a luacontroller at pos
|
6 | 6 | -- lc_update(pos): updates the controller at pos by executing the code
|
7 | 7 | -- reset_meta (pos, code, errmsg): performs a software-reset, installs new code and prints error messages
|
@@ -54,55 +54,39 @@ local merge_portstates = function (ports, vports)
|
54 | 54 | return npo
|
55 | 55 | end
|
56 | 56 |
|
57 |
| -local generate_name = function (ports, overwrite) |
| 57 | +local generate_name = function (ports) |
58 | 58 | local overwrite = overwrite or {}
|
59 |
| - local d = overwrite.d or (ports.d and 1 or 0) |
60 |
| - local c = overwrite.c or (ports.c and 1 or 0) |
61 |
| - local b = overwrite.b or (ports.b and 1 or 0) |
62 |
| - local a = overwrite.a or (ports.a and 1 or 0) |
| 59 | + local d = ports.d and 1 or 0 |
| 60 | + local c = ports.c and 1 or 0 |
| 61 | + local b = ports.b and 1 or 0 |
| 62 | + local a = ports.a and 1 or 0 |
63 | 63 | return BASENAME..d..c..b..a
|
64 | 64 | end
|
65 | 65 |
|
66 |
| -local setport = function (pos, rule, ignore, state, ports) |
67 |
| - local ignorename = generate_name(ports, ignore) |
68 |
| - mesecon:swap_node(pos, ignorename) |
| 66 | +local setport = function (pos, rule, state) |
69 | 67 | if state then
|
70 | 68 | mesecon:receptor_on(pos, {rule})
|
71 | 69 | else
|
72 | 70 | mesecon:receptor_off(pos, {rule})
|
73 | 71 | end
|
74 |
| - if minetest.env:get_node(pos).name ~= ignorename then |
75 |
| - return true -- overridden by second process |
76 |
| - end |
77 |
| - return false -- success |
78 | 72 | end
|
79 | 73 |
|
80 |
| -local action = function (pos, ports, forcereset) |
| 74 | +local action = function (pos, ports) |
81 | 75 | local name = minetest.env:get_node(pos).name
|
82 | 76 | local vports = minetest.registered_nodes[name].virtual_portstates
|
83 | 77 | local newname = generate_name(ports)
|
84 | 78 |
|
85 | 79 | if name ~= newname and vports then
|
86 | 80 | local rules_on = {}
|
87 | 81 | local rules_off = {}
|
88 |
| - local ignore = {} |
89 |
| - |
90 |
| - local interrupted |
91 |
| - if ports.a ~= vports.a then interrupted = setport(pos, rules.a, {a = 2}, ports.a, ports) end |
92 |
| - if interrupted and not forcereset then return end |
93 |
| - if ports.b ~= vports.b then interrupted = setport(pos, rules.b, {b = 2}, ports.b, ports) end |
94 |
| - if interrupted and not forcereset then return end |
95 |
| - if ports.c ~= vports.c then interrupted = setport(pos, rules.c, {c = 2}, ports.c, ports) end |
96 |
| - if interrupted and not forcereset then return end |
97 |
| - if ports.d ~= vports.d then interrupted = setport(pos, rules.d, {d = 2}, ports.d, ports) end |
98 |
| - if interrupted and not forcereset then return end |
99 | 82 |
|
100 | 83 | mesecon:swap_node(pos, newname)
|
101 |
| - end |
102 |
| -end |
103 | 84 |
|
104 |
| -local delayedaction = function (params) |
105 |
| - action(params.pos, params.ports) |
| 85 | + if ports.a ~= vports.a then setport(pos, rules.a, ports.a) end |
| 86 | + if ports.b ~= vports.b then setport(pos, rules.b, ports.b) end |
| 87 | + if ports.c ~= vports.c then setport(pos, rules.c, ports.c) end |
| 88 | + if ports.d ~= vports.d then setport(pos, rules.d, ports.d) end |
| 89 | + end |
106 | 90 | end
|
107 | 91 |
|
108 | 92 | --------------------
|
@@ -330,7 +314,7 @@ lc_update = function (pos, event)
|
330 | 314 | save_memory(meta, mem)
|
331 | 315 |
|
332 | 316 | -- Actually set the ports
|
333 |
| - minetest.after(0, delayedaction, {pos = pos, ports = env.port}) |
| 317 | + minetest.after(0, action, pos, env.port) |
334 | 318 | end
|
335 | 319 |
|
336 | 320 | local reset_meta = function(pos, code, errmsg)
|
@@ -397,10 +381,10 @@ local digiline = {
|
397 | 381 | }
|
398 | 382 | }
|
399 | 383 |
|
400 |
| -for a = 0, 2 do -- 0 = off; 1 = on; 2 = ignore |
401 |
| -for b = 0, 2 do |
402 |
| -for c = 0, 2 do |
403 |
| -for d = 0, 2 do |
| 384 | +for a = 0, 1 do -- 0 = off; 1 = on |
| 385 | +for b = 0, 1 do |
| 386 | +for c = 0, 1 do |
| 387 | +for d = 0, 1 do |
404 | 388 |
|
405 | 389 | local cid = tostring(d)..tostring(c)..tostring(b)..tostring(a)
|
406 | 390 | local nodename = BASENAME..cid
|
|
0 commit comments