2013-07-17 21:34:35 +02:00
|
|
|
-- 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 less efficient than when the panels are combined into full arrays.
|
|
|
|
|
2013-10-30 18:45:32 +01:00
|
|
|
local S = technic.getter
|
|
|
|
|
2013-07-17 21:34:35 +02:00
|
|
|
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"},
|
|
|
|
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
|
|
|
|
sounds = default.node_sound_wood_defaults(),
|
2013-10-30 18:45:32 +01:00
|
|
|
description = S("Solar Panel"),
|
2013-07-17 21:34:35 +02:00
|
|
|
active = false,
|
|
|
|
drawtype = "nodebox",
|
|
|
|
paramtype = "light",
|
|
|
|
is_ground_content = true,
|
|
|
|
node_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
|
|
|
},
|
|
|
|
on_construct = function(pos)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
meta:set_int("LV_EU_supply", 0)
|
2013-10-30 18:45:32 +01:00
|
|
|
meta:set_string("infotext", S("Solar Panel"))
|
2013-07-17 21:34:35 +02:00
|
|
|
end,
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_craft({
|
|
|
|
output = 'technic:solar_panel',
|
|
|
|
recipe = {
|
|
|
|
{'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer'},
|
split default iron/steel into three metals
Override the default mod's iron/steel substance, replacing it with three
metals: wrought iron (pure iron), carbon steel (iron alloyed with a little
carbon), and cast iron (iron alloyed with lots of carbon). Wrought iron
is easiest to refine, then cast iron, and carbon steel the most difficult,
matching the historical progression. Recipes that used default steel are
changed to use one of the three, the choice of alloy for each application
being both somewhat realistic and also matching up with game progression.
The default:steel{_ingot,block} items are identified specifically with
wrought iron. This makes the default refining recipes work appropriately.
Iron-using recipes defined outside technic are thus necessarily
reinterpreted to use wrought iron, which is mostly appropriate.
Some objects are renamed accordingly.
Rather than use the default steel textures for wrought iron, with technic
providing textures for the other two, technic now provides textures for
all three metals. This avoids problems that would occur with texture
packs that provide default_steel_{ingot,block} textures that are not
intended to support this wrought-iron/carbon-steel/cast-iron distinction.
A texture pack can provide a distinct set of three textures specifically
for the situation where this distinction is required.
Incidentally make grinding and alloy cooking recipes work correctly when
ingredients are specified by alias.
2014-05-16 23:02:49 +02:00
|
|
|
{'technic:wrought_iron_ingot', 'technic:lv_cable0', 'technic:wrought_iron_ingot'},
|
2013-07-17 21:34:35 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_abm({
|
|
|
|
nodenames = {"technic:solar_panel"},
|
|
|
|
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 = {x=pos.x, y=pos.y+1, z=pos.z}
|
2013-10-30 18:45:32 +01:00
|
|
|
local machine_name = S("Solar Panel")
|
2013-07-17 21:34:35 +02:00
|
|
|
|
|
|
|
local light = minetest.get_node_light(pos1, nil)
|
|
|
|
local time_of_day = minetest.get_timeofday()
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
if light == nil then light = 0 end
|
|
|
|
-- 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 charge_to_give = math.floor((light + pos1.y) * 3)
|
|
|
|
charge_to_give = math.max(charge_to_give, 0)
|
|
|
|
charge_to_give = math.min(charge_to_give, 200)
|
2013-10-30 18:45:32 +01:00
|
|
|
meta:set_string("infotext", S("%s Active"):format(machine_name).." ("..charge_to_give.."EU)")
|
2013-07-17 21:34:35 +02:00
|
|
|
meta:set_int("LV_EU_supply", charge_to_give)
|
|
|
|
else
|
2013-10-30 18:45:32 +01:00
|
|
|
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
2013-07-17 21:34:35 +02:00
|
|
|
meta:set_int("LV_EU_supply", 0)
|
|
|
|
end
|
|
|
|
end,
|
|
|
|
})
|
|
|
|
|
|
|
|
technic.register_machine("LV", "technic:solar_panel", technic.producer)
|
|
|
|
|