From 772c21cb04f647bcd9a75e06162db9db185e499d Mon Sep 17 00:00:00 2001
From: Vanessa Ezekowitz <vanessaezekowitz@gmail.com>
Date: Fri, 15 Aug 2014 03:56:05 +0200
Subject: [PATCH] don't put anchor in creative inv

---
 technic/machines/switching_station.lua |   35 ++++++++++++++++++++++++++++++++---
 1 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/technic/machines/switching_station.lua b/technic/machines/switching_station.lua
index 8c31d5a..5517917 100644
--- a/technic/machines/switching_station.lua
+++ b/technic/machines/switching_station.lua
@@ -1,7 +1,10 @@
 -- SWITCHING STATION
 -- The switching station is the center of all power distribution on an electric network.
--- The station will collect all produced power from producers (PR) and batteries (BA)
--- and distribute it to receivers (RE) and depleted batteries (BA).
+--
+-- The station collects power from sources (PR), distributes it to sinks (RE),
+-- and uses the excess/shortfall to charge and discharge batteries (BA).
+--
+-- For now, all supply and demand values are expressed in kW.
 --
 -- It works like this:
 --  All PR,BA,RE nodes are indexed and tagged with the switching station.
@@ -80,6 +83,7 @@
 end
 
 local load_position = function(pos)
+	if minetest.get_node_or_nil(pos) then return end
 	local vm = VoxelManip()
 	local MinEdge, MaxEdge = vm:read_from_map(pos, pos)
 end
@@ -236,6 +240,30 @@
 		local eu_input_str     = tier.."_EU_input"
 		local eu_supply_str    = tier.."_EU_supply"
 
+		-- Distribute charge equally across multiple batteries.
+		local charge_total = 0
+		local battery_count = 0
+
+		for n, pos1 in pairs(BA_nodes) do
+			meta1 = minetest.get_meta(pos1)
+			local charge = meta1:get_int("internal_EU_charge")
+
+			if (meta1:get_int(eu_demand_str) ~= 0) then
+				charge_total = charge_total + charge
+				battery_count = battery_count + 1
+			end
+		end
+
+		local charge_distributed = math.floor(charge_total / battery_count)
+
+		for n, pos1 in pairs(BA_nodes) do
+			meta1 = minetest.get_meta(pos1)
+
+			if (meta1:get_int(eu_demand_str) ~= 0) then
+				meta1:set_int("internal_EU_charge", charge_distributed)
+			end
+		end
+
 		-- Get all the power from the PR nodes
 		local PR_eu_supply = 0 -- Total power
 		for _, pos1 in pairs(PR_nodes) do
@@ -359,9 +387,10 @@
 			if machines[node.name] and switching_station_timeout_count(pos, tier) then
 				local nodedef = minetest.registered_nodes[node.name]
 				if nodedef and nodedef.technic_disabled_machine_name then
-					print(nodedef.technic_disabled_machine_name)
 					node.name = nodedef.technic_disabled_machine_name
 					minetest.swap_node(pos, node)
+				elseif nodedef and nodedef.technic_on_disable then
+					nodedef.technic_on_disable(pos, node)
 				end
 				if nodedef then
 					local meta = minetest.get_meta(pos)

--
Gitblit v1.8.0