diff options
author | Jeija <norrepli@gmail.com> | 2012-03-05 19:21:26 +0100 |
---|---|---|
committer | Jeija <norrepli@gmail.com> | 2012-03-05 19:21:26 +0100 |
commit | 36ae0cc1a54538742f1d1f3709bb2c1840a33539 (patch) | |
tree | 2865e2f7240108c0b82e45ef7c2f8e4a833929ba /mesecons_dev/mesecons_wireless | |
parent | f8ac52c35073875e2ba1872532577c27f9677c3d (diff) | |
download | mesecons-36ae0cc1a54538742f1d1f3709bb2c1840a33539.tar mesecons-36ae0cc1a54538742f1d1f3709bb2c1840a33539.tar.gz mesecons-36ae0cc1a54538742f1d1f3709bb2c1840a33539.tar.bz2 mesecons-36ae0cc1a54538742f1d1f3709bb2c1840a33539.tar.xz mesecons-36ae0cc1a54538742f1d1f3709bb2c1840a33539.zip |
Upload after major code reorganization - Version 0.6 DEV - Split mesecons mod into several modules - [BUGGY?]
Diffstat (limited to 'mesecons_dev/mesecons_wireless')
-rw-r--r-- | mesecons_dev/mesecons_wireless/depends.txt | 2 | ||||
-rw-r--r-- | mesecons_dev/mesecons_wireless/init.lua | 322 |
2 files changed, 324 insertions, 0 deletions
diff --git a/mesecons_dev/mesecons_wireless/depends.txt b/mesecons_dev/mesecons_wireless/depends.txt new file mode 100644 index 0000000..bc7b062 --- /dev/null +++ b/mesecons_dev/mesecons_wireless/depends.txt @@ -0,0 +1,2 @@ +mesecons +mesecons_materials diff --git a/mesecons_dev/mesecons_wireless/init.lua b/mesecons_dev/mesecons_wireless/init.lua new file mode 100644 index 0000000..bffac58 --- /dev/null +++ b/mesecons_dev/mesecons_wireless/init.lua @@ -0,0 +1,322 @@ +--COMMON WIRELESS FUNCTIONS + +mesecon.wireless_receivers={} + +function mesecon:read_wlre_from_file() + print "[MESEcons] Reading Mesecon Data..." + mesecon_file=io.open(minetest.get_modpath("jeija").."/mesecon_data", "r") + if mesecon_file==nil then return end + local row=mesecon_file:read() + local i=1 + while row~=nil do + mesecon.wireless_receivers[i]={} + mesecon.wireless_receivers[i].pos={} + mesecon.wireless_receivers[i].pos.x=tonumber(mesecon_file:read()) + mesecon.wireless_receivers[i].pos.y=tonumber(mesecon_file:read()) + mesecon.wireless_receivers[i].pos.z=tonumber(mesecon_file:read()) + mesecon.wireless_receivers[i].channel=mesecon_file:read() + mesecon.wireless_receivers[i].requested_state=tonumber(mesecon_file:read()) + mesecon.wireless_receivers[i].inverting=tonumber(mesecon_file:read()) + i=i+1 + row=mesecon_file:read() + end + mesecon_file:close() + print "[MESEcons] Finished Reading Mesecon Data..." +end + + +function mesecon:register_wireless_receiver(pos, inverting) + local i = 1 + repeat + if mesecon.wireless_receivers[i]==nil then break end + i=i+1 + until false + + + local node_under_pos={} + node_under_pos.x=pos.x + node_under_pos.y=pos.y + node_under_pos.z=pos.z + + node_under_pos.y=node_under_pos.y-1 + local node_under=minetest.env:get_node(node_under_pos) + mesecon.wireless_receivers[i]={} + mesecon.wireless_receivers[i].pos={} + mesecon.wireless_receivers[i].pos.x=pos.x + mesecon.wireless_receivers[i].pos.y=pos.y + mesecon.wireless_receivers[i].pos.z=pos.z + mesecon.wireless_receivers[i].channel=node_under.name + mesecon.wireless_receivers[i].requested_state=0 + mesecon.wireless_receivers[i].inverting=inverting +end + +function mesecon:remove_wireless_receiver(pos) + local i = 1 + while mesecon.wireless_receivers[i]~=nil do + if mesecon.wireless_receivers[i].pos.x==pos.x and + mesecon.wireless_receivers[i].pos.y==pos.y and + mesecon.wireless_receivers[i].pos.z==pos.z then + mesecon.wireless_receivers[i]=nil + break + end + i=i+1 + end +end + +function mesecon:set_wlre_channel(pos, channel) + --local i = 1 + --while mesecon.wireless_receivers[i]~=nil do + -- if tonumber(mesecon.wireless_receivers[i].pos.x)==tonumber(pos.x) and + -- tonumber(mesecon.wireless_receivers[i].pos.y)==tonumber(pos.y) and + -- tonumber(mesecon.wireless_receivers[i].pos.z)==tonumber(pos.z) then + -- mesecon.wireless_receivers[i].channel=channel + -- break + -- end + -- i=i+1 + --end + local wlre=mesecon:get_wlre(pos) + if wlre~=nil then + wlre.channel=channel + end +end + +function mesecon:get_wlre(pos) + local i=1 + while mesecon.wireless_receivers[i]~=nil do + if mesecon.wireless_receivers[i].pos.x==pos.x and + mesecon.wireless_receivers[i].pos.y==pos.y and + mesecon.wireless_receivers[i].pos.z==pos.z then + return mesecon.wireless_receivers[i] + end + i=i+1 + end +end + +minetest.register_on_placenode(function(pos, newnode, placer) + pos.y=pos.y+1 + if minetest.env:get_node(pos).name == "mesecons_wireless:wireless_receiver_off" or + minetest.env:get_node(pos).name == "mesecons_wireless:wireless_receiver_on" or + minetest.env:get_node(pos).name == "mesecons_wireless:wireless_inverter_off" or + minetest.env:get_node(pos).name == "mesecons_wireless:wireless_inverter_on" then + mesecon:set_wlre_channel(pos, newnode.name) + end +end) + +minetest.register_on_dignode( + function(pos, oldnode, digger) + local channel + pos.y=pos.y+1 + if minetest.env:get_node(pos).name == "mesecons_wireless:wireless_receiver_on" or + minetest.env:get_node(pos).name == "mesecons_wireless:wireless_receiver_off" or + minetest.env:get_node(pos).name == "mesecons_wireless:wireless_inverter_on" or + minetest.env:get_node(pos).name == "mesecons_wireless:wireless_inverter_off" then + mesecon:set_wlre_channel(pos, "air") + end + end +) + +minetest.register_abm( + {nodenames = {"mesecons_wireless:wireless_receiver_on", "mesecons_wireless:wireless_receiver_off", + "mesecons_wireless:wireless_inverter_on", "mesecons_wireless:wireless_inverter_off"}, + interval = 1.0, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local wlre=mesecon:get_wlre(pos) + if (wlre==nil) then return end + + if node.name=="mesecons_wireless:wireless_receiver_on" and wlre.requested_state==0 then + minetest.env:add_node(pos, {name="mesecons_wireless:wireless_receiver_off"}) + mesecon:receptor_off(pos) + end + if node.name=="mesecons_wireless:wireless_receiver_off" and wlre.requested_state==1 then + minetest.env:add_node(pos, {name="mesecons_wireless:wireless_receiver_on"}) + mesecon:receptor_on(pos) + end + if node.name=="mesecons_wireless:wireless_inverter_off" and wlre.requested_state==0 and wlre.inverting==1 then + minetest.env:add_node(pos, {name="mesecons_wireless:wireless_inverter_on"}) + mesecon:receptor_on(pos) + end + if node.name=="mesecons_wireless:wireless_inverter_on" and wlre.requested_state==1 and wlre.inverting==1 then + minetest.env:add_node(pos, {name="mesecons_wireless:wireless_inverter_off"}) + mesecon:receptor_off(pos) + end + end, +}) + +--WIRELESS RECEIVER + +minetest.register_node("mesecons_wireless:wireless_receiver_off", { + tile_images = {"jeija_wireless_receiver_tb_off.png", "jeija_wireless_receiver_tb_off.png", "jeija_wireless_receiver_off.png", "jeija_wireless_receiver_off.png", "jeija_wireless_receiver_off.png", "jeija_wireless_receiver_off.png"}, + inventory_image = minetest.inventorycube("jeija_wireless_receiver_off.png"), + material = minetest.digprop_constanttime(0.8), + description="Wireless Receiver", +}) + +minetest.register_node("mesecons_wireless:wireless_receiver_on", { + tile_images = {"jeija_wireless_receiver_tb_on.png", "jeija_wireless_receiver_tb_on.png", "jeija_wireless_receiver_on.png", "jeija_wireless_receiver_on.png", "jeija_wireless_receiver_on.png", "jeija_wireless_receiver_on.png"}, + inventory_image = minetest.inventorycube("jeija_wireless_receiver_on.png"), + material = minetest.digprop_constanttime(0.8), + drop = 'mesecons_wireless:wireless_receiver_off', + description="Wireless Receiver", +}) + +minetest.register_craft({ + output = '"mesecons_wireless:wireless_receiver_off" 2', + recipe = { + {'', "mesecons:mesecon_off", ''}, + {'', "mesecons:mesecon_off", ''}, + {'', "mesecons_materials:ic", ''}, + } +}) + +minetest.register_on_placenode(function(pos, newnode, placer) + if newnode.name == "mesecons_wireless:wireless_receiver_off" then + mesecon:register_wireless_receiver(pos, 0) + end +end) + +minetest.register_on_dignode( + function(pos, oldnode, digger) + if oldnode.name == "mesecons_wireless:wireless_receiver_on" then + mesecon:remove_wireless_receiver(pos) + mesecon:receptor_off(pos) + end + if oldnode.name == "mesecons_wireless:wireless_receiver_off" then + mesecon:remove_wireless_receiver(pos) + end + end +) + +minetest.register_abm( -- SAVE WIRELESS RECEIVERS TO FILE + {nodenames = {"mesecons_wireless:wireless_receiver_off", "mesecons_wireless:wireless_receiver_on", "mesecons_wireless:wireless_inverter_on", "mesecons_wireless:wireless_inverter_off"}, + interval = 10, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local mesecon_file = io.open(minetest.get_modpath("jeija").."/mesecon_data", "w") + local i=1 + while mesecon.wireless_receivers[i]~=nil do + mesecon_file:write("NEXT\n") + mesecon_file:write(mesecon.wireless_receivers[i].pos.x.."\n") + mesecon_file:write(mesecon.wireless_receivers[i].pos.y.."\n") + mesecon_file:write(mesecon.wireless_receivers[i].pos.z.."\n") + mesecon_file:write(mesecon.wireless_receivers[i].channel.."\n") + mesecon_file:write(mesecon.wireless_receivers[i].requested_state.."\n") + mesecon_file:write(mesecon.wireless_receivers[i].inverting.."\n") + i=i+1 + end + mesecon_file:close() + end, +}) + +mesecon:add_receptor_node("mesecons_wireless:wireless_receiver_on") +mesecon:add_receptor_node_off("mesecons_wireless:wireless_receiver_off") + +-- WIRELESS INVERTER OFF/ON BELONGS TO THE OUTPUT STATE (ON=INPUT OFF) + +minetest.register_node("mesecons_wireless:wireless_inverter_off", { + tile_images = {"jeija_wireless_inverter_tb.png", "jeija_wireless_inverter_tb.png", "jeija_wireless_inverter_off.png", "jeija_wireless_inverter_off.png", "jeija_wireless_inverter_off.png", "jeija_wireless_inverter_off.png"}, + inventory_image = minetest.inventorycube("jeija_wireless_inverter_off.png"), + material = minetest.digprop_constanttime(0.8), + drop = 'mesecons_wireless:wireless_inverter_on', + description="Wireless Inverter", +}) + +minetest.register_node("mesecons_wireless:wireless_inverter_on", { + tile_images = {"jeija_wireless_inverter_tb.png", "jeija_wireless_inverter_tb.png", "jeija_wireless_inverter_on.png", "jeija_wireless_inverter_on.png", "jeija_wireless_inverter_on.png", "jeija_wireless_inverter_on.png"}, + inventory_image = minetest.inventorycube("jeija_wireless_inverter_on.png"), + material = minetest.digprop_constanttime(0.8), + description="Wireless Inverter", +}) + +minetest.register_craft({ + output = '"mesecons_wireless:wireless_inverter_off" 2', + recipe = { + {'', 'default:steel_ingot', ''}, + {'mesecons_materials:ic', 'mesecons:mesecon_off', 'mesecons_materials:ic'}, + {'', 'mesecons:mesecon_off', ''}, + } +}) + +minetest.register_on_placenode(function(pos, newnode, placer) + if newnode.name == "mesecons_wireless:wireless_inverter_on" then + mesecon:register_wireless_receiver(pos, 1) + mesecon:receptor_on(pos) + end +end) + +minetest.register_on_dignode( + function(pos, oldnode, digger) + if oldnode.name == "mesecons_wireless:wireless_inverter_on" then + mesecon:remove_wireless_receiver(pos) + mesecon:receptor_off(pos) + end + if oldnode.name == "mesecons_wireless:wireless_inverter_off" then + mesecon:remove_wireless_receiver(pos) + end + end +) + +mesecon:add_receptor_node("mesecons_wireless:wireless_inverter_on") +mesecon:add_receptor_node_off("mesecons_wireless:wireless_inverter_off") + +-- WIRELESS TRANSMITTER + +function mesecon:wireless_transmit(channel, senderstate) + local i = 1 + while mesecon.wireless_receivers[i]~=nil do + if mesecon.wireless_receivers[i].channel==channel then + if senderstate==1 then + mesecon.wireless_receivers[i].requested_state=1 + elseif senderstate==0 then + mesecon.wireless_receivers[i].requested_state=0 + end + end + i=i+1 + end +end + +minetest.register_node("mesecons_wireless:wireless_transmitter_on", { + tile_images = {"jeija_wireless_transmitter_tb.png", "jeija_wireless_transmitter_tb.png", "jeija_wireless_transmitter_on.png", "jeija_wireless_transmitter_on.png", "jeija_wireless_transmitter_on.png", "jeija_wireless_transmitter_on.png"}, + inventory_image = minetest.inventorycube("jeija_wireless_transmitter_on.png"), + material = minetest.digprop_constanttime(0.8), + drop = {'"mesecons_wireless:wireless_transmitter_off" 1'}, + description="Wireless Transmitter", +}) + +minetest.register_node("mesecons_wireless:wireless_transmitter_off", { + tile_images = {"jeija_wireless_transmitter_tb.png", "jeija_wireless_transmitter_tb.png", "jeija_wireless_transmitter_off.png", "jeija_wireless_transmitter_off.png", "jeija_wireless_transmitter_off.png", "jeija_wireless_transmitter_off.png"}, + inventory_image = minetest.inventorycube("jeija_wireless_transmitter_off.png"), + material = minetest.digprop_constanttime(0.8), + description="Wireless Transmitter", +}) + +minetest.register_craft({ + output = '"mesecons_wireless:wireless_transmitter_off" 2', + recipe = { + {'default:steel_ingot', 'mesecons:mesecon_off', 'default:steel_ingot'}, + {'', 'mesecons:mesecon_off', ''}, + {'', 'mesecons_materials:ic', ''}, + } +}) + +mesecon:register_on_signal_on(function(pos, node) + if node.name=="mesecons_wireless:wireless_transmitter_off" then + minetest.env:add_node(pos, {name="mesecons_wireless:wireless_transmitter_on"}) + local node_under_pos=pos + node_under_pos.y=node_under_pos.y-1 + local node_under=minetest.env:get_node(node_under_pos) + mesecon:wireless_transmit(node_under.name, 1) + end +end) + +mesecon:register_on_signal_off(function(pos, node) + if node.name=="mesecons_wireless:wireless_transmitter_on" then + minetest.env:add_node(pos, {name="mesecons_wireless:wireless_transmitter_off"}) + local node_under_pos=pos + node_under_pos.y=node_under_pos.y-1 + local node_under=minetest.env:get_node(node_under_pos) + mesecon:wireless_transmit(node_under.name, 0) + end +end) + +mesecon:read_wlre_from_file() |