summaryrefslogtreecommitdiff
path: root/technic/solar_array_lv.lua
diff options
context:
space:
mode:
Diffstat (limited to 'technic/solar_array_lv.lua')
-rw-r--r--technic/solar_array_lv.lua78
1 files changed, 31 insertions, 47 deletions
diff --git a/technic/solar_array_lv.lua b/technic/solar_array_lv.lua
index f657814..e758eb8 100644
--- a/technic/solar_array_lv.lua
+++ b/technic/solar_array_lv.lua
@@ -10,10 +10,6 @@ minetest.register_node("technic:solar_array_lv", {
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
sounds = default.node_sound_wood_defaults(),
description="LV Solar Array",
- active = false,
- technic_power_machine=1,
- internal_EU_buffer=0;
- internal_EU_buffer_size=1000;
drawtype = "nodebox",
paramtype = "light",
is_ground_content = true,
@@ -27,68 +23,56 @@ minetest.register_node("technic:solar_array_lv", {
},
on_construct = function(pos)
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_int("technic_power_machine", 1)
+ meta:set_int("LV_EU_supply", 0)
meta:set_string("infotext", "LV Solar Array")
- meta:set_float("active", false)
end,
})
-minetest.register_craft({
- output = 'technic:solar_array_lv 1',
- recipe = {
- {'technic:solar_panel', 'technic:solar_panel', 'technic:solar_panel'},
- {'technic:solar_panel', 'technic:lv_transformer', 'technic:solar_panel'},
- {'default:steel_ingot', 'technic:lv_cable', 'default:steel_ingot'},
-
- }
-})
+minetest.register_craft(
+ {output = 'technic:solar_array_lv 1',
+ recipe = {
+ {'technic:solar_panel', 'technic:solar_panel', 'technic:solar_panel'},
+ {'technic:solar_panel', 'technic:lv_transformer', 'technic:solar_panel'},
+ {'default:steel_ingot', 'technic:lv_cable', 'default:steel_ingot'},
+ }
+ })
minetest.register_abm(
- {nodenames = {"technic:solar_array_lv"},
- interval = 1,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
+ {nodenames = {"technic:solar_array_lv"},
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
-- The action here is to make the solar array produce 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 160EU for the array.
- -- 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 arrays do not work outside daylight hours or if
- -- built below -10m
+ -- Height gives 1/4 of the effect, light 3/4. Max. effect is 160EU for the array.
+ -- 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 arrays 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
-- turn on array only during day time and if sufficient light
- -- I know this is counter intuitive when cheating by using other light sources.
+ -- I know this is counter intuitive when cheating by using other light sources.
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 = math.floor(light*(light*0.5333+pos1.y/130*2.6667))
- if charge_to_give<0 then charge_to_give=0 end
- if charge_to_give>160 then charge_to_give=160 end
- if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then
- charge_to_give=internal_EU_buffer_size-internal_EU_buffer
- end
- meta:set_string("infotext", "Solar Array 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)
-
+ local charge_to_give = math.floor(light*(light*0.5333+pos1.y/130*2.6667))
+ if charge_to_give<0 then charge_to_give=0 end
+ if charge_to_give>160 then charge_to_give=160 end
+ meta:set_string("infotext", "Solar Array is active ("..charge_to_give.."EU)")
+ meta:set_int("LV_EU_supply", charge_to_give)
else
- meta:set_string("infotext", "Solar Array is inactive");
- meta:set_float("active",0)
+ meta:set_string("infotext", "Solar Array is inactive");
+ meta:set_int("LV_EU_supply", 0)
end
- end,
-})
+ end,
+ })
+
+technic.register_LV_machine ("technic:solar_array_lv","PR")
-register_LV_machine ("technic:solar_array_lv","PR")