From ede3978965790f9683b96d12fc0bf80ba30824cd Mon Sep 17 00:00:00 2001
From: kpoppel <poulsen.kim@gmail.com>
Date: Mon, 03 Jun 2013 23:37:04 +0200
Subject: [PATCH] Added solar arrays for all voltage tiers. Added transformers for all voltage tiers. I changed the recipes for solar panels to make them less expensive. I also changed the output of the individual panel and made the arrays provie the real "oomph" :-) Solar panels and arrays are dependent on light level, time of day and height abive ground (0) for output and cheating with torches and stuff. Textures added. Fixed bugs in the hv battery box. It was not working at all. I don't understand the hv box top texture though??? I have a sense that all machines connected to the battery boxes are taking the same amount of juice from the box. A method of taking a little or a lot would be nice.

---
 technic/solar_panel.lua |   41 ++++++++++++++++++++++++++++-------------
 1 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/technic/solar_panel.lua b/technic/solar_panel.lua
index 02a8f69..5b53f5f 100644
--- a/technic/solar_panel.lua
+++ b/technic/solar_panel.lua
@@ -1,3 +1,6 @@
+-- Solar panels are the building blocks of LV solar arrays
+-- They can however also be used separately but with reduced efficiency due to the missing transformer.
+-- Individual panels are 20% less efficient than when the panels are combined into full arrays.
 minetest.register_node("technic:solar_panel", {
 	tiles = {"technic_solar_panel_top.png", "technic_solar_panel_bottom.png", "technic_solar_panel_side.png",
 		"technic_solar_panel_side.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png"},
@@ -7,7 +10,7 @@
 	active = false,
 	technic_power_machine=1,
 	internal_EU_buffer=0;
-	internal_EU_buffer_size=1000;
+	internal_EU_buffer_size=160;
 	drawtype = "nodebox",
 	paramtype = "light",
 	is_ground_content = true,	
@@ -23,7 +26,7 @@
 		local meta = minetest.env:get_meta(pos)
 		meta:set_float("technic_power_machine", 1)
 		meta:set_float("internal_EU_buffer", 0)
-		meta:set_float("internal_EU_buffer_size", 1000)
+		meta:set_float("internal_EU_buffer_size", 160)
 
 		meta:set_string("infotext", "Solar Panel")
 		meta:set_float("active", false)
@@ -34,7 +37,7 @@
 	output = 'technic:solar_panel 1',
 	recipe = {
 		{'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer','technic:doped_silicon_wafer'},
-		{'technic:doped_silicon_wafer', 'moreores:copper_ingot','technic:doped_silicon_wafer'},
+		{'technic:doped_silicon_wafer', 'technic:lv_cable',           'technic:doped_silicon_wafer'},
 		{'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer','technic:doped_silicon_wafer'},
 
 	}
@@ -42,29 +45,39 @@
 
 minetest.register_abm(
 	{nodenames = {"technic:solar_panel"},
-	interval = 1,
-	chance = 1,
+	interval   = 1,
+	chance     = 1,
 	action = function(pos, node, active_object_count, active_object_count_wider)
-		
+		-- The action here is to make the solar panel prodice power
+		-- Power is dependent on the light level and the height above ground
+		-- 130m and above is optimal as it would be above cloud level.
+                -- Height gives 1/4 of the effect, light 3/4. Max. effect is 26EU.
+                -- There are many ways to cheat by using other light sources like lamps.
+                -- As there is no way to determine if light is sunlight that is just a shame.
+                -- To take care of some of it solar panels do not work outside daylight hours or if
+                -- built below -10m
 		local pos1={}
 		pos1.y=pos.y+1
 		pos1.x=pos.x
 		pos1.z=pos.z
 
 		local light = minetest.env:get_node_light(pos1, nil)
+		local time_of_day = minetest.env:get_timeofday()
 		local meta = minetest.env:get_meta(pos)
 		if light == nil then light = 0 end
-		if light >= 12 then
-			meta:set_string("infotext", "Solar Panel is active ")
-			meta:set_float("active",1)
+		-- turn on panel only during day time and if sufficient light
+                -- I know this is counter intuitive when cheating by using other light sources underground.
+		if light >= 12 and time_of_day>=0.24 and time_of_day<=0.76 and pos.y > -10 then
 			local internal_EU_buffer=meta:get_float("internal_EU_buffer")
 			local internal_EU_buffer_size=meta:get_float("internal_EU_buffer_size")
-			local charge_to_give=40+(pos1.y/250*40) -- make solar energy depending on height
+			local charge_to_give=math.floor(light*(light*0.0867+pos1.y/130*0.4333))
 			if charge_to_give<0 then charge_to_give=0 end
-			if charge_to_give>160 then charge_to_give=160 end
+			if charge_to_give>26 then charge_to_give=26 end
 			if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then
-			charge_to_give=internal_EU_buffer_size-internal_EU_buffer
+			   charge_to_give=internal_EU_buffer_size-internal_EU_buffer
 			end
+			meta:set_string("infotext", "Solar Panel is active ("..charge_to_give.."EU)")
+			meta:set_float("active",1)
 			internal_EU_buffer=internal_EU_buffer+charge_to_give
 			meta:set_float("internal_EU_buffer",internal_EU_buffer)
 			
@@ -73,4 +86,6 @@
 			meta:set_float("active",0)
 		end
 	end,
-}) 
\ No newline at end of file
+}) 
+
+register_LV_machine ("technic:solar_panel","PR")

--
Gitblit v1.8.0