Kyle
2013-02-22 985401a23d1581e71f762bdaeadfc19734fdf148
technic/battery_box_mv.lua
File was renamed from technic/technic/battery_box_mv.lua
@@ -1,3 +1,14 @@
MV_machines = {}
registered_MV_machines_count=0
function register_MV_machine (string1,string2)
registered_MV_machines_count=registered_MV_machines_count+1
MV_machines[registered_MV_machines_count]={}
MV_machines[registered_MV_machines_count].machine_name=string1
MV_machines[registered_MV_machines_count].machine_type=string2
end
minetest.register_craft({
   output = 'technic:mv_battery_box 1',
   recipe = {
@@ -6,8 +17,6 @@
      {'', 'technic:mv_cable', ''},
   }
}) 
mv_battery_box_formspec =
   "invsize[8,9;]"..
@@ -76,7 +85,7 @@
      battery_charge = 0
      max_charge = 300000
      last_side_shown=0
      end,
      end,
   can_dig = function(pos,player)
      local meta = minetest.env:get_meta(pos);
      local inv = meta:get_inventory()
@@ -113,51 +122,73 @@
   meta:set_float("last_side_shown",i)
   end
--loading registered power tools
--loading registered power tools
   local inv = meta:get_inventory()
   if inv:is_empty("src")==false  then 
      srcstack = inv:get_stack("src", 1)
      src_item=srcstack:to_table()
      item_meta=srcstack:get_metadata()
      if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before tool/item
      local srcstack = inv:get_stack("src", 1)
      local src_item=srcstack:to_table()
      local src_meta=get_item_meta(src_item["metadata"])
   local item_max_charge = nil
   local counter=registered_power_tools_count-1
   for i=1, counter,1 do
      if power_tools[i].tool_name==src_item["name"] then
      item_max_charge=power_tools[i].max_charge
      local item_max_charge=nil
      for i=1,registered_power_tools_count,1 do
         if power_tools[i].tool_name==src_item["name"] then
            src_meta=get_item_meta(src_item["metadata"])
            if src_meta==nil then
               src_meta={}
               src_meta["technic_power_tool"]=true
               src_meta["charge"]=0
            else
               if src_meta["technic_power_tool"]==nil then
                  src_meta["technic_power_tool"]=true
                  src_meta["charge"]=0
               end
            end
            item_max_charge=power_tools[i].max_charge
         end
      end
      end
   if item_max_charge then
      load1=tonumber((src_item["metadata"]))
      load_step=4000
      if load1<item_max_charge and charge>0 then
       if charge-load_step<0 then load_step=charge end
       if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end
      load1=load1+load_step
      charge=charge-load_step
      set_RE_wear(src_item,load1,item_max_charge)
      src_item["metadata"]=tostring(load1)
      inv:set_stack("src", 1, src_item)
      end
      meta:set_int("battery_charge",charge)
   end
      if item_max_charge then
         load1=src_meta["charge"]
         load_step=4000
         if load1<item_max_charge and charge>0 then
            if charge-load_step<0 then load_step=charge end
            if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end
            load1=load1+load_step
            charge=charge-load_step
            set_RE_wear(src_item,load1,item_max_charge)
            src_meta["charge"]=load1
            src_item["metadata"]=set_item_meta(src_meta)
            inv:set_stack("src", 1, src_item)
         end
         meta:set_int("battery_charge",charge)
      end
   end
   
-- dischargin registered power tools
      if inv:is_empty("dst") == false then 
      srcstack = inv:get_stack("dst", 1)
      src_item=srcstack:to_table()
      local item_max_charge = nil
      local counter=registered_power_tools_count-1
      for i=1, counter,1 do
      if power_tools[i].tool_name==src_item["name"] then
      item_max_charge=power_tools[i].max_charge
      local src_meta=get_item_meta(src_item["metadata"])
      local item_max_charge=nil
      for i=1,registered_power_tools_count,1 do
         if power_tools[i].tool_name==src_item["name"] then
            src_meta=get_item_meta(src_item["metadata"])
            if src_meta==nil then
               src_meta={}
               src_meta["technic_power_tool"]=true
               src_meta["charge"]=0
            else
               if src_meta["technic_power_tool"]==nil then
                  src_meta["technic_power_tool"]=true
                  src_meta["charge"]=0
               end
            end
            item_max_charge=power_tools[i].max_charge
         end
      end
      end
      if item_max_charge then
      if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before battery/crystal
      local load1=tonumber((src_item["metadata"]))
      local load1=src_meta["charge"]
      load_step=4000
      if load1>0 and charge<max_charge then 
          if charge+load_step>max_charge then load_step=max_charge-charge end
@@ -165,7 +196,8 @@
      load1=load1-load_step
      charge=charge+load_step
      set_RE_wear(src_item,load1,item_max_charge)
      src_item["metadata"]=tostring(load1)
      src_meta["charge"]=load1
      src_item["metadata"]=set_item_meta(src_meta)
      inv:set_stack("dst", 1, src_item)
      end      
      end
@@ -173,19 +205,12 @@
      
   meta:set_int("battery_charge",charge)
   local load = math.floor(charge/300000 * 100)
   local load = math.floor((charge/300000) * 100)
   meta:set_string("formspec",
            "invsize[8,9;]"..
            mv_battery_box_formspec..
            "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
                  (load)..":technic_power_meter_fg.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;]")
                  (load)..":technic_power_meter_fg.png]"
            )
      
   local pos1={}
@@ -316,6 +341,15 @@
function check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
meta = minetest.env:get_meta(pos1)
if meta:get_float("mv_cablelike")==1 then new_node_added=add_new_MVcable_node(MV_nodes,pos1) end
if minetest.env:get_node(pos1).name == "technic:solar_panel_mv" then    new_node_added=add_new_MVcable_node(PR_nodes,pos1) end
for i in ipairs(MV_machines) do
   if minetest.env:get_node(pos1).name == MV_machines[i].machine_name then
      if MV_machines[i].machine_type == "PR" then
         new_node_added=add_new_MVcable_node(PR_nodes,pos1)
         end
      if MV_machines[i].machine_type == "RE" then
         new_node_added=add_new_MVcable_node(RE_nodes,pos1)
         end
   end
end
end