Vlayer Changes (#286)

* Update vlayer.lua

* Update vlayer.lua

* Update vlayer.lua

* Update vlayer.lua

* Update vlayer.lua

* Update vlayer.lua

* Update vlayer.lua

* Update vlayer.lua

* Update vlayer.lua

* Update roles.lua

* Update vlayer.lua

* Update vlayer.lua

* Update vlayer.lua

* Update vlayer.lua

* Update vlayer.lua
This commit is contained in:
2024-02-15 23:23:45 +09:00
committed by GitHub
parent bb30ad13f4
commit 5b1081db57
4 changed files with 42 additions and 23 deletions

View File

@@ -229,6 +229,7 @@ Roles.new_role('Member','Mem')
'gui/warp-list/edit',
'command/save-quickbar',
'gui/vlayer-edit',
'command/vlayer-info',
'command/personal-logistic',
'command/auto-research',
'command/set-trains-to-automatic',

View File

@@ -46,7 +46,7 @@ return {
production = 0.06 -- MW
},
['accumulator'] = {
starting_value = 2,
starting_value = 0,
required_area = 4,
discharge = 0.3, -- MW
capacity = 5 -- MJ
@@ -54,7 +54,7 @@ return {
['landfill'] = {
starting_value = 0,
required_area = 0,
surface_area = 4 -- Tiles
surface_area = 6 -- Tiles
}
-- TODO: Can convert wood directly to energy to reduce trash
--[[

View File

@@ -11,18 +11,23 @@ Commands.new_command('personal-battery-recharge', 'Recharge Player Battery upto
local armor = player.get_inventory(defines.inventory.character_armor)[1].grid
for i=1, #armor.equipment do
if armor.equipment[i].energy < (armor.equipment[i].max_energy * amount) then
local energy_required = (armor.equipment[i].max_energy * amount) - armor.equipment[i].energy
local target = math.floor(armor.equipment[i].max_energy * amount)
if vlayer.power.energy >= energy_required then
armor.equipment[i].energy = armor.equipment[i].max_energy * amount
vlayer.power.energy = vlayer.power.energy - energy_required
else
armor.equipment[i].energy = armor.equipment[i].energy + vlayer.power.energy
vlayer.power.energy = 0
end
if armor.equipment[i].energy < target then
local energy_required = math.min(math.floor(target - armor.equipment[i].energy), vlayer.get_statistics()['energy_storage'])
armor.equipment[i].energy = armor.equipment[i].energy + energy_required
vlayer.energy_changed(- energy_required)
end
end
return Commands.success
end)
Commands.new_command('vlayer-info', 'Vlayer Info')
:register(function(_)
local c = vlayer.get_circuits()
for k, v in pairs(c) do
Commands.print(v .. ' : ' .. k)
end
end)

View File

@@ -148,6 +148,7 @@ local function get_sustained_multiplier()
local day_duration = 1 - surface.dawn + surface.dusk
local sunset_duration = surface.evening - surface.dusk
local sunrise_duration = surface.dawn - surface.morning
return mul * (day_duration + (0.5 * (sunset_duration + sunrise_duration)))
end
@@ -300,6 +301,7 @@ local function handle_input_interfaces()
else
vlayer.insert_item(name, count)
end
else
vlayer.insert_item(name, count)
end
@@ -395,6 +397,7 @@ function vlayer.get_statistics()
return {
total_surface_area = vlayer_data.properties.total_surface_area,
used_surface_area = vlayer_data.properties.used_surface_area,
remaining_surface_area = math.max(vlayer_data.properties.total_surface_area - vlayer_data.properties.used_surface_area, 0),
energy_production = vlayer_data.properties.production * mega * get_production_multiplier(),
energy_sustained = vlayer_data.properties.production * mega * get_sustained_multiplier(),
energy_capacity = vlayer_data.properties.capacity * mega,
@@ -404,10 +407,17 @@ function vlayer.get_statistics()
}
end
--- add or reduce vlayer power
function vlayer.energy_changed(power)
vlayer_data.storage.energy = vlayer_data.storage.energy + power
end
--- Circuit signals used for the statistics
local circuit_signals = {
function vlayer.get_circuits()
return {
total_surface_area = 'signal-A',
used_surface_area = 'signal-B',
used_surface_area = 'signal-U',
remaining_surface_area = 'signal-R',
energy_production = 'signal-P',
energy_sustained = 'signal-S',
energy_capacity = 'signal-C',
@@ -415,6 +425,7 @@ local circuit_signals = {
day = 'signal-D',
time = 'signal-T',
}
end
--- Create a new circuit interface
-- @tparam LuaSurface surface The surface to place the interface onto
@@ -447,9 +458,10 @@ local function handle_circuit_interfaces()
local circuit_oc = interface.get_or_create_control_behavior()
local max_signals = circuit_oc.signals_count
local signal_index = 1
local circuit = vlayer.get_circuits()
-- Set the virtual signals based on the vlayer stats
for stat_name, signal_name in pairs(circuit_signals) do
for stat_name, signal_name in pairs(circuit) do
if stat_name:find('energy') then
circuit_oc.set_signal(signal_index, {signal={type='virtual', name=signal_name}, count=math.floor(stats[stat_name] / mega)})
@@ -476,6 +488,7 @@ local function handle_circuit_interfaces()
if not circuit_oc.get_signal(clear_index).signal then
break -- There are no more signals to clear
end
circuit_oc.set_signal(clear_index, nil)
end
end