From 390ea043527203bb2d0cb6f873fedbffa68ae83f Mon Sep 17 00:00:00 2001
From: kpoppel <poulsen.kim@gmail.com>
Date: Wed, 12 Jun 2013 23:34:25 +0200
Subject: [PATCH] Merge pull request #27 from kpoppel/master

---
 technic/forcefield.lua |   49 +++++++++++++++++++++++++------------------------
 1 files changed, 25 insertions(+), 24 deletions(-)

diff --git a/technic/forcefield.lua b/technic/forcefield.lua
index ebefc52..dbcae01 100644
--- a/technic/forcefield.lua
+++ b/technic/forcefield.lua
@@ -1,7 +1,7 @@
 --Forcefield mod by ShadowNinja
 
 local forcefield_emitter_buffer_size = 10000
-local forcefield_emitter_power_consumption = 1
+local forcefield_emitter_power_consumption = 0.8
 local forcefield_update_interval = 1
 
 minetest.register_craft({
@@ -16,7 +16,7 @@
 local function get_forcefield_count(range)
 	local count = 0
 	for x=-range,range do
-	for y=0,range do
+	for y=-range,range do
 	for z=-range,range do
 		if ((x*x+y*y+z*z) <= (range * range + range)) then
 			if (y == 0) or ((range-1) * (range-1) + (range-1) <= x*x+y*y+z*z) then
@@ -71,6 +71,13 @@
 	local range = meta:get_int("range")
 	if fields.add then range = range + 1 end
 	if fields.subtract then range = range - 1 end
+	if fields.toggle then
+		if meta:get_int("enabled") == 1 then
+			meta:set_int("enabled", 0)
+		else
+			meta:set_int("enabled", 1)
+		end
+	end
 	if range <= 20 and range >= 0 and meta:get_int("range") ~= range then
 		remove_forcefield(pos, meta:get_int("range"))
 		meta:set_int("range", range)
@@ -92,6 +99,7 @@
 	"label[4,2;"..range.."]"..
 	"button[3,2;1,1;add;+]"..
 	"button[5,2;1,1;subtract;-]"..
+	"button[3,3;3,1;toggle;Enable/Disable]"..
 	"list[current_player;main;0,5;8,4;]"
 end
 
@@ -105,24 +113,31 @@
 	meta:set_string("formspec", get_forcefield_formspec(meta:get_int("range"), load))
 
 	local power_requirement = get_forcefield_count(meta:get_int("range")) * forcefield_emitter_power_consumption
-	if meta:get_int("mesecons_powered") == 0 and internal_EU_buffer >= power_requirement then
+	if meta:get_int("enabled") == 1 and internal_EU_buffer >= power_requirement then
 		if node.name == "technic:forcefield_emitter_off" then
 			hacky_swap_node(pos, "technic:forcefield_emitter_on")
-			minetest.env:get_node_timer(pos):start(forcefield_update_interval)
 		end
 		internal_EU_buffer=internal_EU_buffer-power_requirement;
 		meta:set_float("internal_EU_buffer", internal_EU_buffer)
 		add_forcefield(pos, meta:get_int("range"))
 	else
-		remove_forcefield(pos, meta:get_int("range"))
 		if node.name == "technic:forcefield_emitter_on" then
+			remove_forcefield(pos, meta:get_int("range"))
 			hacky_swap_node(pos, "technic:forcefield_emitter_off")
-			minetest.env:get_node_timer(pos):start(forcefield_update_interval)
 		end
 	end
 	return true
 
 end
+
+local mesecons = {effector = {
+	action_on = function(pos, node)
+		minetest.env:get_meta(pos):set_int("enabled", 0)
+	end,
+	action_off = function(pos, node)
+		minetest.env:get_meta(pos):set_int("enabled", 1)
+	end
+}}
 
 minetest.register_node("technic:forcefield_emitter_off", {
 	description = "Forcefield emitter",
@@ -140,18 +155,11 @@
 		meta:set_float("internal_EU_buffer", 0)
 		meta:set_float("internal_EU_buffer_size", forcefield_emitter_buffer_size)
 		meta:set_int("range", 10)
-		meta:set_int("mesecons_powered", 0)
+		meta:set_int("enabled", 1)
 		meta:set_string("formspec", get_forcefield_formspec(meta:get_int("range", 0)))
 		meta:set_string("infotext", "Forcefield emitter");
 	end,
-	mesecons = {effector = {
-		action_on = function (pos, node)
-			minetest.env:get_meta(pos):set_int("mesecons_powered", 1)
-		end,
-		action_off = function(pos, node)
-			minetest.env:get_meta(pos):set_int("mesecons_powered", 0)
-		end
-	}}
+	mesecons = mesecons
 })
 
 minetest.register_node("technic:forcefield_emitter_on", {
@@ -169,7 +177,7 @@
 		meta:set_float("internal_EU_buffer", 0)
 		meta:set_float("internal_EU_buffer_size", forcefield_emitter_buffer_size)
 		meta:set_int("range", 10)
-		meta:set_int("mesecons_powered", 0)
+		meta:set_int("enabled", 1)
 		meta:set_string("formspec", get_forcefield_formspec(meta:get_int("range"), 0))
 		meta:set_string("infotext", "Forcefield emitter");
 	end,
@@ -178,14 +186,7 @@
 		return minetest.node_dig(pos, node, digger)
 	end,
 	technic_power_machine=1,
-	mesecons = {effector = {
-		action_on = function(pos, node)
-			minetest.env:get_meta(pos):set_int("mesecons_powered", 1)
-		end,
-		action_off = function(pos, node)
-			minetest.env:get_meta(pos):set_int("mesecons_powered", 0)
-		end
-	}}
+	mesecons = mesecons
 })
 
 minetest.register_node("technic:forcefield", {

--
Gitblit v1.8.0