mirror of
https://github.com/minetest-mods/technic.git
synced 2024-12-22 05:42:33 +01:00
allow per-battery charge/discharge stack splitting
(default off for both)
This commit is contained in:
parent
af39221df9
commit
7244f86ee5
@ -3,6 +3,8 @@ local digilines_path = minetest.get_modpath("digilines")
|
|||||||
|
|
||||||
local S = technic.getter
|
local S = technic.getter
|
||||||
|
|
||||||
|
local fs_helpers = pipeworks.fs_helpers
|
||||||
|
|
||||||
technic.register_power_tool("technic:battery", 10000)
|
technic.register_power_tool("technic:battery", 10000)
|
||||||
technic.register_power_tool("technic:red_energy_crystal", 50000)
|
technic.register_power_tool("technic:red_energy_crystal", 50000)
|
||||||
technic.register_power_tool("technic:green_energy_crystal", 150000)
|
technic.register_power_tool("technic:green_energy_crystal", 150000)
|
||||||
@ -50,16 +52,49 @@ local tube = {
|
|||||||
end
|
end
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
local onestack = stack:peek_item(1)
|
|
||||||
if direction.y > 0 then
|
if direction.y > 0 then
|
||||||
return inv:room_for_item("src", onestack)
|
if meta:get_int("split_src_stacks") == 1 then
|
||||||
|
stack = stack:peek_item(1)
|
||||||
|
end
|
||||||
|
return inv:room_for_item("src", stack)
|
||||||
else
|
else
|
||||||
return inv:room_for_item("dst", onestack)
|
if meta:get_int("split_dst_stacks") == 1 then
|
||||||
|
stack = stack:peek_item(1)
|
||||||
|
end
|
||||||
|
return inv:room_for_item("dst", stack)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
connect_sides = {left=1, right=1, back=1, top=1, bottom=1},
|
connect_sides = {left=1, right=1, back=1, top=1, bottom=1},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local function add_on_off_buttons(meta, ltier, charge_percent)
|
||||||
|
local formspec = ""
|
||||||
|
if ltier == "mv" or ltier == "hv" then
|
||||||
|
formspec = "image[1,1;1,2;technic_power_meter_bg.png"
|
||||||
|
.."^[lowpart:"..charge_percent
|
||||||
|
..":technic_power_meter_fg.png]"..
|
||||||
|
fs_helpers.cycling_button(
|
||||||
|
meta,
|
||||||
|
"image_button[3,2.0;1,0.6",
|
||||||
|
"split_src_stacks",
|
||||||
|
{
|
||||||
|
{text="", texture="pipeworks_button_off.png", addopts="false;false;pipeworks_button_interm.png"},
|
||||||
|
{text="", texture="pipeworks_button_on.png", addopts="false;false;pipeworks_button_interm.png"}
|
||||||
|
}
|
||||||
|
).."label[3.9,2.01;Allow splitting incoming 'charge' stacks from tubes]"..
|
||||||
|
fs_helpers.cycling_button(
|
||||||
|
meta,
|
||||||
|
"image_button[3,2.5;1,0.6",
|
||||||
|
"split_dst_stacks",
|
||||||
|
{
|
||||||
|
{text="", texture="pipeworks_button_off.png", addopts="false;false;pipeworks_button_interm.png"},
|
||||||
|
{text="", texture="pipeworks_button_on.png", addopts="false;false;pipeworks_button_interm.png"}
|
||||||
|
}
|
||||||
|
).."label[3.9,2.51;Allow splitting incoming 'discharge' stacks]"
|
||||||
|
end
|
||||||
|
return formspec
|
||||||
|
end
|
||||||
|
|
||||||
function technic.register_battery_box(data)
|
function technic.register_battery_box(data)
|
||||||
local tier = data.tier
|
local tier = data.tier
|
||||||
local ltier = string.lower(tier)
|
local ltier = string.lower(tier)
|
||||||
@ -79,6 +114,7 @@ function technic.register_battery_box(data)
|
|||||||
"listring[current_player;main]"..
|
"listring[current_player;main]"..
|
||||||
"listring[context;src]"..
|
"listring[context;src]"..
|
||||||
"listring[current_player;main]"
|
"listring[current_player;main]"
|
||||||
|
|
||||||
if digilines_path then
|
if digilines_path then
|
||||||
formspec = formspec.."button[0.6,3.7;2,1;edit_channel;edit Channel]"
|
formspec = formspec.."button[0.6,3.7;2,1;edit_channel;edit Channel]"
|
||||||
end
|
end
|
||||||
@ -150,12 +186,7 @@ function technic.register_battery_box(data)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local charge_percent = math.floor(current_charge / max_charge * 100)
|
local charge_percent = math.floor(current_charge / max_charge * 100)
|
||||||
meta:set_string("formspec",
|
meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, charge_percent))
|
||||||
formspec..
|
|
||||||
"image[1,1;1,2;technic_power_meter_bg.png"
|
|
||||||
.."^[lowpart:"..charge_percent
|
|
||||||
..":technic_power_meter_fg.png]")
|
|
||||||
|
|
||||||
local infotext = S("@1 Battery Box: @2/@3", tier,
|
local infotext = S("@1 Battery Box: @2/@3", tier,
|
||||||
technic.pretty_num(current_charge), technic.pretty_num(max_charge))
|
technic.pretty_num(current_charge), technic.pretty_num(max_charge))
|
||||||
if eu_input == 0 then
|
if eu_input == 0 then
|
||||||
@ -193,11 +224,17 @@ function technic.register_battery_box(data)
|
|||||||
drop = "technic:"..ltier.."_battery_box0",
|
drop = "technic:"..ltier.."_battery_box0",
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
local EU_upgrade, tube_upgrade = 0, 0
|
||||||
|
if data.upgrade then
|
||||||
|
EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta)
|
||||||
|
end
|
||||||
|
local max_charge = data.max_charge * (1 + EU_upgrade / 10)
|
||||||
|
local charge = meta:get_int("internal_EU_charge")
|
||||||
|
local cpercent = math.floor(charge / max_charge * 100)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
|
|
||||||
meta:set_string("infotext", S("%s Battery Box"):format(tier))
|
meta:set_string("infotext", S("%s Battery Box"):format(tier))
|
||||||
meta:set_string("formspec", formspec)
|
meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, cpercent))
|
||||||
meta:set_string("channel", ltier.."_battery_box"..minetest.pos_to_string(pos))
|
meta:set_string("channel", ltier.."_battery_box"..minetest.pos_to_string(pos))
|
||||||
meta:set_int(tier.."_EU_demand", 0)
|
meta:set_int(tier.."_EU_demand", 0)
|
||||||
meta:set_int(tier.."_EU_supply", 0)
|
meta:set_int(tier.."_EU_supply", 0)
|
||||||
@ -216,13 +253,27 @@ function technic.register_battery_box(data)
|
|||||||
after_place_node = data.tube and pipeworks.after_place,
|
after_place_node = data.tube and pipeworks.after_place,
|
||||||
after_dig_node = technic.machine_after_dig_node,
|
after_dig_node = technic.machine_after_dig_node,
|
||||||
on_receive_fields = function(pos, formname, fields, sender)
|
on_receive_fields = function(pos, formname, fields, sender)
|
||||||
if not fields.edit_channel then
|
local nodename = minetest.get_node(pos).name
|
||||||
return
|
if fields.edit_channel then
|
||||||
end
|
minetest.show_formspec(sender:get_player_name(),
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
minetest.show_formspec(sender:get_player_name(),
|
|
||||||
"technic:battery_box_edit_channel"..minetest.pos_to_string(pos),
|
"technic:battery_box_edit_channel"..minetest.pos_to_string(pos),
|
||||||
"field[channel;Digiline Channel;"..meta:get_string("channel").."]")
|
"field[channel;Digiline Channel;"..meta:get_string("channel").."]")
|
||||||
|
elseif fields["fs_helpers_cycling:0:split_src_stacks"]
|
||||||
|
or fields["fs_helpers_cycling:0:split_dst_stacks"]
|
||||||
|
or fields["fs_helpers_cycling:1:split_src_stacks"]
|
||||||
|
or fields["fs_helpers_cycling:1:split_dst_stacks"] then
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
if not pipeworks.may_configure(pos, sender) then return end
|
||||||
|
fs_helpers.on_receive_fields(pos, fields)
|
||||||
|
local EU_upgrade, tube_upgrade = 0, 0
|
||||||
|
if data.upgrade then
|
||||||
|
EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta)
|
||||||
|
end
|
||||||
|
local max_charge = data.max_charge * (1 + EU_upgrade / 10)
|
||||||
|
local charge = meta:get_int("internal_EU_charge")
|
||||||
|
local cpercent = math.floor(charge / max_charge * 100)
|
||||||
|
meta:set_string("formspec", formspec..add_on_off_buttons(meta, ltier, cpercent))
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
digiline = {
|
digiline = {
|
||||||
receptor = {action = function() end},
|
receptor = {action = function() end},
|
||||||
@ -278,7 +329,6 @@ minetest.register_on_player_receive_fields(
|
|||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
function technic.charge_tools(meta, batt_charge, charge_step)
|
function technic.charge_tools(meta, batt_charge, charge_step)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
if inv:is_empty("src") then
|
if inv:is_empty("src") then
|
||||||
|
Loading…
Reference in New Issue
Block a user