From 36ae0cc1a54538742f1d1f3709bb2c1840a33539 Mon Sep 17 00:00:00 2001 From: Jeija Date: Mon, 5 Mar 2012 19:21:26 +0100 Subject: Upload after major code reorganization - Version 0.6 DEV - Split mesecons mod into several modules - [BUGGY?] --- mesecons_dev/README | 4 + mesecons_dev/init.lua | 1 + mesecons_dev/mesecons_walllever/depends.txt | 0 mesecons_dev/mesecons_walllever/init.lua | 86 ++++++++ mesecons_dev/mesecons_wireless/depends.txt | 2 + mesecons_dev/mesecons_wireless/init.lua | 322 ++++++++++++++++++++++++++++ 6 files changed, 415 insertions(+) create mode 100644 mesecons_dev/README create mode 100644 mesecons_dev/init.lua create mode 100644 mesecons_dev/mesecons_walllever/depends.txt create mode 100644 mesecons_dev/mesecons_walllever/init.lua create mode 100644 mesecons_dev/mesecons_wireless/depends.txt create mode 100644 mesecons_dev/mesecons_wireless/init.lua (limited to 'mesecons_dev') diff --git a/mesecons_dev/README b/mesecons_dev/README new file mode 100644 index 0000000..c54c51a --- /dev/null +++ b/mesecons_dev/README @@ -0,0 +1,4 @@ +Please note: +The mesecons modules in here have been disabled for various reasons: +They are old and deprecated, are not needed anymore or are buggy atm. +You can create a model out of them, but it is not recommended to use any of them. diff --git a/mesecons_dev/init.lua b/mesecons_dev/init.lua new file mode 100644 index 0000000..0613ab3 --- /dev/null +++ b/mesecons_dev/init.lua @@ -0,0 +1 @@ +--read README diff --git a/mesecons_dev/mesecons_walllever/depends.txt b/mesecons_dev/mesecons_walllever/depends.txt new file mode 100644 index 0000000..e69de29 diff --git a/mesecons_dev/mesecons_walllever/init.lua b/mesecons_dev/mesecons_walllever/init.lua new file mode 100644 index 0000000..557bb1b --- /dev/null +++ b/mesecons_dev/mesecons_walllever/init.lua @@ -0,0 +1,86 @@ +-- WALL LEVER +minetest.register_node("mesecons_walllever:wall_lever_off", { + drawtype = "signlike", + tile_images = {"jeija_wall_lever_off.png"}, + inventory_image = "jeija_wall_lever_off.png", + wield_image = "jeija_wall_lever_off.png", + paramtype = "light", + paramtype2 = "wallmounted", + legacy_wallmounted = true, + walkable = false, + selection_box = { + type = "wallmounted", + }, + material = minetest.digprop_constanttime(0.3), + description="Lever", +}) +minetest.register_node("mesecons_walllever:wall_lever_on", { + drawtype = "signlike", + tile_images = {"jeija_wall_lever_on.png"}, + inventory_image = "jeija_wall_lever_on.png", + paramtype = "light", + paramtype2 = "wallmounted", + legacy_wallmounted = true, + walkable = false, + selection_box = { + type = "wallmounted", + }, + material = minetest.digprop_constanttime(0.3), + drop = '"mesecons_walllever:wall_lever_off" 1', + description="Lever", +}) + +minetest.register_on_dignode( + function(pos, oldnode, digger) + if oldnode.name == "mesecons_walllever:wall_lever_on" then + mesecon:receptor_off(pos) + end + end +) +minetest.register_on_punchnode(function(pos, node, puncher) + if node.name == "mesecons_walllever:wall_lever_off" then + minetest.env:add_node(pos, {name="mesecons_walllever:wall_lever_on",param2=node.param2}) + local rules_string=nil + if node.param2 == 5 then + rules_string="button_z+" + end + if node.param2 == 3 then + rules_string="button_x+" + end + if node.param2 == 4 then + rules_string="button_z-" + end + if node.param2 == 2 then + rules_string="button_x-" + end + mesecon:receptor_on(pos, rules_string) + end + if node.name == "mesecons_walllever:wall_lever_on" then + minetest.env:add_node(pos, {name="mesecons_walllever:wall_lever_off",param2=node.param2}) + local rules_string=nil + if node.param2 == 5 then + rules_string="button_z+" + end + if node.param2 == 3 then + rules_string="button_x+" + end + if node.param2 == 4 then + rules_string="button_z-" + end + if node.param2 == 2 then + rules_string="button_x-" + end + mesecon:receptor_off(pos, rules_string) + end +end) + +minetest.register_craft({ + output = '"mesecons_walllever:wall_lever_off" 2', + recipe = { + {'"mesecons:mesecon_off"'}, + {'"default:stone"'}, + {'"default:stick"'}, + } +}) +mesecon:add_receptor_node("mesecons_walllever:wall_lever") +mesecon:add_receptor_node_off("mesecons_walllever:wall_lever_off") 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() -- cgit v1.2.3