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', 'gui/warp-list/edit',
'command/save-quickbar', 'command/save-quickbar',
'gui/vlayer-edit', 'gui/vlayer-edit',
'command/vlayer-info',
'command/personal-logistic', 'command/personal-logistic',
'command/auto-research', 'command/auto-research',
'command/set-trains-to-automatic', 'command/set-trains-to-automatic',

View File

@@ -46,7 +46,7 @@ return {
production = 0.06 -- MW production = 0.06 -- MW
}, },
['accumulator'] = { ['accumulator'] = {
starting_value = 2, starting_value = 0,
required_area = 4, required_area = 4,
discharge = 0.3, -- MW discharge = 0.3, -- MW
capacity = 5 -- MJ capacity = 5 -- MJ
@@ -54,7 +54,7 @@ return {
['landfill'] = { ['landfill'] = {
starting_value = 0, starting_value = 0,
required_area = 0, required_area = 0,
surface_area = 4 -- Tiles surface_area = 6 -- Tiles
} }
-- TODO: Can convert wood directly to energy to reduce trash -- 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 local armor = player.get_inventory(defines.inventory.character_armor)[1].grid
for i=1, #armor.equipment do for i=1, #armor.equipment do
if armor.equipment[i].energy < (armor.equipment[i].max_energy * amount) then local target = math.floor(armor.equipment[i].max_energy * amount)
local energy_required = (armor.equipment[i].max_energy * amount) - armor.equipment[i].energy
if vlayer.power.energy >= energy_required then if armor.equipment[i].energy < target then
armor.equipment[i].energy = armor.equipment[i].max_energy * amount local energy_required = math.min(math.floor(target - armor.equipment[i].energy), vlayer.get_statistics()['energy_storage'])
vlayer.power.energy = vlayer.power.energy - energy_required armor.equipment[i].energy = armor.equipment[i].energy + energy_required
else vlayer.energy_changed(- energy_required)
armor.equipment[i].energy = armor.equipment[i].energy + vlayer.power.energy
vlayer.power.energy = 0
end
end end
end end
return Commands.success return Commands.success
end) 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 day_duration = 1 - surface.dawn + surface.dusk
local sunset_duration = surface.evening - surface.dusk local sunset_duration = surface.evening - surface.dusk
local sunrise_duration = surface.dawn - surface.morning local sunrise_duration = surface.dawn - surface.morning
return mul * (day_duration + (0.5 * (sunset_duration + sunrise_duration))) return mul * (day_duration + (0.5 * (sunset_duration + sunrise_duration)))
end end
@@ -300,6 +301,7 @@ local function handle_input_interfaces()
else else
vlayer.insert_item(name, count) vlayer.insert_item(name, count)
end end
else else
vlayer.insert_item(name, count) vlayer.insert_item(name, count)
end end
@@ -395,26 +397,35 @@ function vlayer.get_statistics()
return { return {
total_surface_area = vlayer_data.properties.total_surface_area, total_surface_area = vlayer_data.properties.total_surface_area,
used_surface_area = vlayer_data.properties.used_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_production = vlayer_data.properties.production * mega * get_production_multiplier(),
energy_sustained = vlayer_data.properties.production * mega * get_sustained_multiplier(), energy_sustained = vlayer_data.properties.production * mega * get_sustained_multiplier(),
energy_capacity = vlayer_data.properties.capacity * mega, energy_capacity = vlayer_data.properties.capacity * mega,
energy_storage = vlayer_data.storage.energy, energy_storage = vlayer_data.storage.energy,
day = math.floor(game.tick / vlayer_data.surface.ticks_per_day), day = math.floor(game.tick / vlayer_data.surface.ticks_per_day),
time =math.floor(vlayer_data.surface.daytime * vlayer_data.surface.ticks_per_day) time = math.floor(vlayer_data.surface.daytime * vlayer_data.surface.ticks_per_day)
} }
end 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 --- Circuit signals used for the statistics
local circuit_signals = { function vlayer.get_circuits()
total_surface_area = 'signal-A', return {
used_surface_area = 'signal-B', total_surface_area = 'signal-A',
energy_production = 'signal-P', used_surface_area = 'signal-U',
energy_sustained = 'signal-S', remaining_surface_area = 'signal-R',
energy_capacity = 'signal-C', energy_production = 'signal-P',
energy_storage = 'signal-E', energy_sustained = 'signal-S',
day = 'signal-D', energy_capacity = 'signal-C',
time = 'signal-T', energy_storage = 'signal-E',
} day = 'signal-D',
time = 'signal-T',
}
end
--- Create a new circuit interface --- Create a new circuit interface
-- @tparam LuaSurface surface The surface to place the interface onto -- @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 circuit_oc = interface.get_or_create_control_behavior()
local max_signals = circuit_oc.signals_count local max_signals = circuit_oc.signals_count
local signal_index = 1 local signal_index = 1
local circuit = vlayer.get_circuits()
-- Set the virtual signals based on the vlayer stats -- 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 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)}) 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 if not circuit_oc.get_signal(clear_index).signal then
break -- There are no more signals to clear break -- There are no more signals to clear
end end
circuit_oc.set_signal(clear_index, nil) circuit_oc.set_signal(clear_index, nil)
end end
end end