| | |
| | | "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;HV Battery Box]".. |
| | | "label[3,0;Charge]".. |
| | | "label[5,0;Discharge]".. |
| | | "label[1,3;Power level]".. |
| | | "list[current_player;main;0,5;8,4;]" |
| | | "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_hv_battery_box.png]".. |
| | | "background[0,5;8,4;ui_main_inventory.png]" |
| | | |
| | | minetest.register_node("technic:hv_battery_box", { |
| | | description = "HV Battery Box", |
| | |
| | | }) |
| | | end |
| | | |
| | | local power_tools = technic.HV_power_tools |
| | | |
| | | local function charge_HV_tools(meta, charge) |
| | | --charge registered power tools |
| | | local inv = meta:get_inventory() |
| | | if not inv:is_empty("src") 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_hv_power_tool"] = true |
| | | src_meta["charge"] = 0 |
| | | else |
| | | if src_meta["technic_hv_power_tool"] == nil then |
| | | src_meta["technic_hv_power_tool"] = true |
| | | src_meta["charge"] = 0 |
| | | end |
| | | end |
| | | -- Do the charging |
| | | local item_max_charge = power_tools[toolname] |
| | | local tool_charge = src_meta["charge"] |
| | | local charge_step = 1000 -- how much to charge per tick |
| | | if tool_charge < item_max_charge and tool_charge > 0 then |
| | | if tool_charge - charge_step < 0 then |
| | | charge_step = charge |
| | | end |
| | | if tool_charge + charge_step > item_max_charge then |
| | | charge_step = item_max_charge - tool_charge |
| | | end |
| | | tool_charge = tool_charge + charge_step |
| | | charge = charge - charge_step |
| | | technic.set_RE_wear(src_item, tool_charge, item_max_charge) |
| | | src_meta["charge"] = tool_charge |
| | | 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 function discharge_HV_tools(meta, charge, max_charge) |
| | | -- discharging registered power tools |
| | | local inv = meta:get_inventory() |
| | | if not inv:is_empty("dst") 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"]) or {} |
| | | if src_meta["technic_hv_power_tool"] == nil then |
| | | src_meta["technic_hv_power_tool"] = true |
| | | src_meta["charge"] = 0 |
| | | end |
| | | |
| | | -- Do the discharging |
| | | local item_max_charge = power_tools[toolname] |
| | | local tool_charge = src_meta["charge"] |
| | | local charge_step = 4000 -- how much to discharge per tick |
| | | if tool_charge > 0 and charge < max_charge then |
| | | if tool_charge + charge_step > max_charge then |
| | | charge_step = max_charge - charge |
| | | end |
| | | if tool_charge - charge_step < 0 then |
| | | charge_step = charge |
| | | end |
| | | tool_charge = tool_charge - charge_step |
| | | charge = charge + charge_step |
| | | technic.set_RE_wear(src_item, tool_charge, item_max_charge) |
| | | src_meta["charge"] = tool_charge |
| | | 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:hv_battery_box", "technic:hv_battery_box1", "technic:hv_battery_box2", |
| | | "technic:hv_battery_box3", "technic:hv_battery_box4", "technic:hv_battery_box5", |
| | |
| | | end |
| | | |
| | | -- Charging/discharging tools here |
| | | current_charge = charge_HV_tools(meta, current_charge) |
| | | current_charge = discharge_HV_tools(meta, current_charge, max_charge) |
| | | current_charge = charge_tools(meta, current_charge, 16000) |
| | | current_charge = discharge_tools(meta, current_charge, max_charge, 16000) |
| | | |
| | | -- Set a demand (we allow batteries to charge on less than the demand though) |
| | | meta:set_int("HV_EU_demand", math.min(max_charge_rate, max_charge-current_charge)) |