diff options
Diffstat (limited to 'mesecons_battery/init.lua')
-rw-r--r-- | mesecons_battery/init.lua | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/mesecons_battery/init.lua b/mesecons_battery/init.lua new file mode 100644 index 0000000..2df2255 --- /dev/null +++ b/mesecons_battery/init.lua @@ -0,0 +1,130 @@ +for i = 1, 5 do + minetest.register_node("mesecons_battery:battery_charging_"..i, { + drawtype = "nodebox", + tiles = {"jeija_battery_charging.png"}, + paramtype = "light", + is_ground_content = true, + walkable = true, + node_box = { + type = "fixed", + fixed = { + {-0.499, -0.499, -0.499, -0.4, 0.499, 0.499}, + { 0.499, -0.499, -0.499, 0.4, 0.499, 0.499}, + {-0.499, -0.499, -0.499, 0.499, 0.499, -0.4 }, + {-0.499, -0.499, 0.499, 0.499, 0.499, 0.4 }, + {-0.4 , -0.5 , -0.4 , 0.4 , 1*(i/5)-0.5, 0.4}} + }, + + selection_box = { + type = "fixed", + fixed = { + {-0.499, -0.499, -0.499, -0.4, 0.499, 0.499}, + { 0.499, -0.499, -0.499, 0.4, 0.499, 0.499}, + {-0.499, -0.499, -0.499, 0.499, 0.499, -0.4 }, + {-0.499, -0.499, 0.499, 0.499, 0.499, 0.4 }, + {-0.4 , -0.5 , -0.4 , 0.4 , 1*(i/5)-0.5, 0.4}} + }, + groups = {dig_immediate=2}, + description="Battery", + }) + mesecon:add_receptor_node_off("mesecons_battery:battery_charging_"..i) +end + +for i = 1, 5 do + minetest.register_node("mesecons_battery:battery_discharging_"..i, { + drawtype = "nodebox", + tiles = {"jeija_battery_discharging.png"}, + paramtype = "light", + is_ground_content = true, + walkable = true, + node_box = { + type = "fixed", + fixed = { + {-0.499, -0.499, -0.499, -0.4, 0.499, 0.499}, + { 0.499, -0.499, -0.499, 0.4, 0.499, 0.499}, + {-0.499, -0.499, -0.499, 0.499, 0.499, -0.4 }, + {-0.499, -0.499, 0.499, 0.499, 0.499, 0.4 }, + {-0.4 , -0.5 , -0.4 , 0.4 , 1*(i/5)-0.5, 0.4}} + }, + + selection_box = { + type = "fixed", + fixed = { + {-0.499, -0.499, -0.499, -0.4, 0.499, 0.499}, + { 0.499, -0.499, -0.499, 0.4, 0.499, 0.499}, + {-0.499, -0.499, -0.499, 0.499, 0.499, -0.4 }, + {-0.499, -0.499, 0.499, 0.499, 0.499, 0.4 }, + {-0.4 , -0.5 , -0.4 , 0.4 , 1*(i/5)-0.5, 0.4}} + }, + groups = {dig_immediate=2}, + description="Battery", + }) + mesecon:add_receptor_node("mesecons_battery:battery_discharging_"..i) +end + +minetest.register_on_placenode(function (pos, newnode, placer) + meta = minetest.env:get_meta(pos) + meta:set_int("batterstate", 0) + meta:set_int("charging", 0) +end) + +minetest.register_on_punchnode(function(pos, node, puncher) + if string.find(node.name, "mesecons_battery:battery_charging") then + local meta = minetest.env:get_meta(pos); + local batterystate = meta:get_int("batterystate") + local charging = meta:get_int("charging") + minetest.env:add_node(pos, {name=string.gsub(node.name, "charging", "discharging")}) + mesecon:receptor_on(pos) + meta:set_int("batterystate", batterystate) + meta:set_int("charging", charging) + end + if string.find(node.name, "mesecons_battery:battery_discharging") then + local meta = minetest.env:get_meta(pos); + local batterystate = meta:get_int("batterystate") + local charging = meta:get_int("charging") + minetest.env:add_node(pos, {name=string.gsub(node.name, "discharging", "charging")}) + mesecon:receptor_off(pos) + meta:set_int("batterystate", batterystate) + meta:set_int("charging", charging) + end +end) + +minetest.register_abm({ +nodenames = {"mesecons_battery:battery_charging_1", "mesecons_battery:battery_charging_2", "mesecons_battery:battery_charging_3", "mesecons_battery:battery_charging_4", "mesecons_battery:battery_charging_5"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local meta = minetest.env:get_meta(pos); + if meta:get_int("charging") == 1 then + local batterystate = meta:get_int("batterystate") + local charging = meta:get_int("charging") + local name = node.name; + if batterystate < 100 then --change battery charging state + batterystate = batterystate + 1 + end + + if string.find(node.name, tostring(math.ceil(batterystate/20))) == nil then + node.name = string.gsub(node.name, tostring(math.ceil(batterystate/20)-1), tostring(math.ceil(batterystate/20))) --change node for new nodebox model + end + minetest.env:add_node(pos, node) + meta:set_int("batterystate", batterystate) + meta:set_int("charging", charging) + end + end, +}) + +mesecon:register_on_signal_on(function(pos, node) + if string.find(node.name, "mesecons_battery:battery") then + minetest.env:get_meta(pos):set_int("charging", 1) + end +end) + +mesecon:register_on_signal_off(function(pos, node) + if string.find(node.name, "mesecons_battery:battery") then + minetest.env:get_meta(pos):set_int("charging", 0) + end +end) + +minetest.register_on_punchnode(function(pos, node, puncher) + print(minetest.env:get_meta(pos):get_int("batterystate")) +end) |