diff options
| author | Jeija <norrepli@gmail.com> | 2012-07-21 10:47:42 +0200 | 
|---|---|---|
| committer | Jeija <norrepli@gmail.com> | 2012-07-21 10:47:42 +0200 | 
| commit | 278a705cbae5d8681ed26a2693859257b993d680 (patch) | |
| tree | 28b2823cd837ddf50351aef4d385a3d518577be4 | |
| parent | aa8ad0fde97a8dcfcd51027dee65174dc830fbc5 (diff) | |
Experimental battery - not finished yet
| -rw-r--r-- | mesecons_battery/depends.txt | 1 | ||||
| -rw-r--r-- | mesecons_battery/init.lua | 130 | 
2 files changed, 131 insertions, 0 deletions
diff --git a/mesecons_battery/depends.txt b/mesecons_battery/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mesecons_battery/depends.txt @@ -0,0 +1 @@ +mesecons 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)  | 
