Update helptext of obsidian
[MineClone/MineClone2.git] / mods / ITEMS / REDSTONE / mesecons / init.lua
blob93d299f06ded4cfabd7bd9e4941efdbed83842a1
1 -- |\ /| ____ ____ ____ _____ ____ _____
2 -- | \ / | | | | | | | |\ | |
3 -- | \/ | |___ ____ |___ | | | | \ | |____
4 -- | | | | | | | | | \ | |
5 -- | | |___ ____| |___ |____ |____| | \| ____|
6 -- by Jeija, Uberi (Temperest), sfan5, VanessaE, Hawk777 and contributors
7 --
8 --
9 --
10 -- This mod adds mesecons[=minecraft redstone] and different receptors/effectors to minetest.
11 -- See the documentation on the forum for additional information, especially about crafting
14 -- For basic development resources, see http://mesecons.net/developers.html
18 --Quick draft for the mesecons array in the node's definition
19 --mesecons =
20 --{
21 -- receptor =
22 -- {
23 -- state = mesecon.state.on/off
24 -- rules = rules/get_rules
25 -- },
26 -- effector =
27 -- {
28 -- action_on = function
29 -- action_off = function
30 -- action_change = function
31 -- rules = rules/get_rules
32 -- },
33 -- conductor =
34 -- {
35 -- state = mesecon.state.on/off
36 -- offstate = opposite state (for state = on only)
37 -- onstate = opposite state (for state = off only)
38 -- rules = rules/get_rules
39 -- }
40 --}
42 -- PUBLIC VARIABLES
43 mesecon={} -- contains all functions and all global variables
44 mesecon.queue={} -- contains the ActionQueue
45 mesecon.queue.funcs={} -- contains all ActionQueue functions
47 -- Settings
48 dofile(minetest.get_modpath("mesecons").."/settings.lua")
50 -- Utilities like comparing positions,
51 -- adding positions and rules,
52 -- mostly things that make the source look cleaner
53 dofile(minetest.get_modpath("mesecons").."/util.lua");
55 -- Presets (eg default rules)
56 dofile(minetest.get_modpath("mesecons").."/presets.lua");
58 -- The ActionQueue
59 -- Saves all the actions that have to be execute in the future
60 dofile(minetest.get_modpath("mesecons").."/actionqueue.lua");
62 -- Internal stuff
63 -- This is the most important file
64 -- it handles signal transmission and basically everything else
65 -- It is also responsible for managing the nodedef things,
66 -- like calling action_on/off/change
67 dofile(minetest.get_modpath("mesecons").."/internal.lua");
69 -- API
70 -- these are the only functions you need to remember
72 mesecon.queue:add_function("receptor_on", function (pos, rules)
73 mesecon.vm_begin()
75 rules = rules or mesecon.rules.default
77 -- Call turnon on all linking positions
78 for _, rule in ipairs(mesecon.flattenrules(rules)) do
79 local np = vector.add(pos, rule)
80 local rulenames = mesecon.rules_link_rule_all(pos, rule)
81 for _, rulename in ipairs(rulenames) do
82 mesecon.turnon(np, rulename)
83 end
84 end
86 mesecon.vm_commit()
87 end)
89 function mesecon.receptor_on(pos, rules)
90 mesecon.queue:add_action(pos, "receptor_on", {rules}, nil, rules)
91 end
93 mesecon.queue:add_function("receptor_off", function (pos, rules)
94 rules = rules or mesecon.rules.default
96 -- Call turnoff on all linking positions
97 for _, rule in ipairs(mesecon.flattenrules(rules)) do
98 local np = vector.add(pos, rule)
99 local rulenames = mesecon.rules_link_rule_all(pos, rule)
100 for _, rulename in ipairs(rulenames) do
101 mesecon.vm_begin()
102 mesecon.changesignal(np, minetest.get_node(np), rulename, mesecon.state.off, 2)
104 -- Turnoff returns true if turnoff process was successful, no onstate receptor
105 -- was found along the way. Commit changes that were made in voxelmanip. If turnoff
106 -- returns true, an onstate receptor was found, abort voxelmanip transaction.
107 if (mesecon.turnoff(np, rulename)) then
108 mesecon.vm_commit()
109 else
110 mesecon.vm_abort()
114 end)
116 function mesecon.receptor_off(pos, rules)
117 mesecon.queue:add_action(pos, "receptor_off", {rules}, nil, rules)
120 --Services like turnoff receptor on dignode and so on
121 dofile(minetest.get_modpath("mesecons").."/services.lua");