hdastwb
2013-07-24 2d7f750d9a734e2c84cc1ee14746a4ee2f8757e6
technic/machines/mv/battery_box.lua
@@ -9,16 +9,18 @@
 })
local battery_box_formspec =
   "invsize[8,9;]"..
   "image[1,1;1,2;technic_power_meter_bg.png]"..
   "list[current_name;src;3,1;1,1;]"..
   "image[4,1;1,1;technic_battery_reload.png]"..
   "list[current_name;dst;5,1;1,1;]"..
   "label[0,0;MV_Battery box]"..
   "label[3,0;Charge]"..
   "label[5,0;Discharge]"..
   "label[1,3;Power level]"..
   "list[current_player;main;0,5;8,4;]"
   "invsize[8,9;]"..
   "image[1,1;1,2;technic_power_meter_bg.png]"..
   "list[current_name;src;3,1;1,1;]"..
   "list[current_name;dst;5,1;1,1;]"..
   "label[0,0;MV Battery Box]"..
   "label[3,0;Charge]"..
   "label[5,0;Discharge]"..
   "label[1,3;Power level]"..
   "list[current_player;main;0,5;8,4;]"..
   "background[-0.19,-0.25;8.4,9.75;ui_form_bg.png]"..
   "background[0,0;8,4;ui_mv_battery_box.png]"..
   "background[0,5;8,4;ui_main_inventory.png]"
minetest.register_node(
   "technic:mv_battery_box", {
@@ -78,89 +80,6 @@
      })
end
local power_tools = technic.MV_power_tools
local charge_MV_tools = function(meta, charge)
           --charge registered power tools
           local inv = meta:get_inventory()
           if inv:is_empty("src")==false  then
         local srcstack = inv:get_stack("src", 1)
         local src_item=srcstack:to_table()
         local src_meta=get_item_meta(src_item["metadata"])
         local toolname = src_item["name"]
         if power_tools[toolname] ~= nil then
            -- Set meta data for the tool if it didn't do it itself :-(
            src_meta=get_item_meta(src_item["metadata"])
            if src_meta==nil then
               src_meta={}
               src_meta["technic_mv_power_tool"]=true
               src_meta["charge"]=0
            else
               if src_meta["technic_mv_power_tool"]==nil then
             src_meta["technic_mv_power_tool"]=true
             src_meta["charge"]=0
               end
            end
            -- Do the charging
            local item_max_charge = power_tools[toolname]
            local load            = src_meta["charge"]
            local load_step       = 1000 -- how much to charge per tick
            if load<item_max_charge and charge>0 then
               if charge-load_step<0 then load_step=charge end
               if load+load_step>item_max_charge then load_step=item_max_charge-load end
               load=load+load_step
               charge=charge-load_step
               technic.set_RE_wear(src_item,load,item_max_charge)
               src_meta["charge"]   = load
               src_item["metadata"] = set_item_meta(src_meta)
               inv:set_stack("src", 1, src_item)
            end
         end
           end
           return charge -- return the remaining charge in the battery
        end
local discharge_MV_tools = function(meta, charge, max_charge)
         -- discharging registered power tools
         local inv = meta:get_inventory()
         if inv:is_empty("dst") == false then
            srcstack = inv:get_stack("dst", 1)
            src_item=srcstack:to_table()
            local src_meta=get_item_meta(src_item["metadata"])
            local toolname = src_item["name"]
            if power_tools[toolname] ~= nil then
               -- Set meta data for the tool if it didn't do it itself :-(
               src_meta=get_item_meta(src_item["metadata"])
               if src_meta==nil then
             src_meta={}
             src_meta["technic_mv_power_tool"]=true
             src_meta["charge"]=0
               else
             if src_meta["technic_mv_power_tool"]==nil then
                src_meta["technic_mv_power_tool"]=true
                src_meta["charge"]=0
             end
               end
               -- Do the discharging
               local item_max_charge = power_tools[toolname]
               local load            = src_meta["charge"]
               local load_step       = 4000 -- how much to discharge per tick
               if load>0 and charge<max_charge then
             if charge+load_step>max_charge then load_step=max_charge-charge end
             if load-load_step<0 then load_step=load end
             load=load-load_step
             charge=charge+load_step
             technic.set_RE_wear(src_item,load,item_max_charge)
             src_meta["charge"]=load
             src_item["metadata"]=set_item_meta(src_meta)
             inv:set_stack("dst", 1, src_item)
               end
            end
         end
         return charge -- return the remaining charge in the battery
           end
minetest.register_abm(
   {
      nodenames = {"technic:mv_battery_box","technic:mv_battery_box1","technic:mv_battery_box2","technic:mv_battery_box3","technic:mv_battery_box4",
@@ -187,8 +106,8 @@
      end
      -- Charging/discharging tools here
      current_charge = charge_MV_tools(meta, current_charge)
      current_charge = discharge_MV_tools(meta, current_charge, max_charge)
      current_charge = charge_tools(meta, current_charge, 4000)
      current_charge = discharge_tools(meta, current_charge, max_charge, 4000)
      -- Set a demand (we allow batteries to charge on less than the demand though)
      meta:set_int("MV_EU_demand", math.min(max_charge_rate, max_charge-current_charge))