Vanessa Dannenberg
2018-10-31 44cb8df048e09b64214f59db73a3fd23cfe12e77
technic/machines/MV/wind_mill.lua
@@ -13,9 +13,9 @@
minetest.register_craft({
   output = 'technic:wind_mill',
   recipe = {
      {'',                           'technic:carbon_steel_ingot', ''},
      {'technic:carbon_steel_ingot', 'technic:motor',              'technic:carbon_steel_ingot'},
      {'',                           'technic:carbon_steel_block', ''},
      {'',                           'basic_materials:motor',              ''},
      {'technic:carbon_steel_ingot', 'technic:carbon_steel_block', 'technic:carbon_steel_ingot'},
      {'',                           'technic:mv_cable',           ''},
   }
})
@@ -29,11 +29,49 @@
   paramtype = "light",
})
local function check_wind_mill(pos)
   if pos.y < 30 then
      return false
   end
   pos = {x=pos.x, y=pos.y, z=pos.z}
   for i = 1, 20 do
      pos.y = pos.y - 1
      local node = minetest.get_node_or_nil(pos)
      if not node then
         -- we reached CONTENT_IGNORE, we can assume, that nothing changed
         -- as the user will have to load the block to change it
         return
      end
      if node.name ~= "technic:wind_mill_frame" then
         return false
      end
   end
   return true
end
local run = function(pos, node)
   local meta = minetest.get_meta(pos)
   local machine_name = S("Wind %s Generator"):format("MV")
   local check = check_wind_mill(pos)
   if check == false then
      meta:set_int("MV_EU_supply", 0)
      meta:set_string("infotext", S("%s Improperly Placed"):format(machine_name))
   elseif check == true then
      local power = math.min(pos.y * 100, 5000)
      meta:set_int("MV_EU_supply", power)
      meta:set_string("infotext", S("@1 (@2)", machine_name,
         technic.EU_string(power)))
   end
   -- check == nil: assume nothing has changed
end
minetest.register_node("technic:wind_mill", {
   description = S("Wind Mill"),
   description = S("Wind %s Generator"):format("MV"),
   tiles = {"technic_carbon_steel_block.png"},
   paramtype2 = "facedir",
   groups = {cracky=1},
   groups = {cracky=1, technic_machine=1, technic_mv=1},
   connect_sides = {"top", "bottom", "back", "left", "right"},
   sounds = default.node_sound_stone_defaults(),
   drawtype = "nodebox",
   paramtype = "light",
@@ -48,43 +86,10 @@
   },
   on_construct = function(pos)
      local meta = minetest.get_meta(pos)
      meta:set_string("infotext", S("Wind Mill"))
      meta:set_string("infotext", S("Wind %s Generator"):format("MV"))
      meta:set_int("MV_EU_supply", 0)
   end,
})
local function check_wind_mill(pos)
   if pos.y < 30 then
      return false
   end
   for i = 1, 20 do
      local node = minetest.get_node({x=pos.x, y=pos.y-i, z=pos.z})
      if node.name ~= "technic:wind_mill_frame" then
         return false
      end
   end
   return true
end
minetest.register_abm({
   nodenames = {"technic:wind_mill"},
   interval = 1,
   chance   = 1,
   action = function(pos, node, active_object_count, active_object_count_wider)
      local meta = minetest.get_meta(pos)
      local machine_name = S("Wind Mill")
      local power = math.min(pos.y * 100, 5000)
      if not check_wind_mill(pos) then
         meta:set_int("MV_EU_supply", 0)
         meta:set_string("infotext", S("%s Improperly Placed"):format(machine_name))
         return
      else
         meta:set_int("MV_EU_supply", power)
      end
      meta:set_string("infotext", machine_name.." ("..power.."EU)")
   end
   end,
   technic_run = run,
})
technic.register_machine("MV", "technic:wind_mill", technic.producer)