mesecons/mesecons_battery/init.lua
2012-07-21 10:47:42 +02:00

131 lines
4.5 KiB
Lua

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)