Add surface area bar to vlayer (#336)

* Update vlayer.lua

* Update vlayer.lua

* Update vlayer.lua

* Update vlayer.lua

* Update vlayer.lua
This commit is contained in:
2025-01-01 04:15:48 +09:00
committed by GitHub
parent 61888d6515
commit b31caf6c85
3 changed files with 78 additions and 49 deletions

View File

@@ -15,7 +15,7 @@ return {
always_day = false, always_day = false,
solar_power_multiplier = 1, solar_power_multiplier = 1,
min_brightness = 0.15, min_brightness = 0.15,
ticks_per_day = 25000, ticks_per_day = 25200,
daytime = 0, daytime = 0,
dusk = 0.25, dusk = 0.25,
evening = 0.45, evening = 0.45,
@@ -25,20 +25,20 @@ return {
interface_limit = { --- @setting interface_limit Sets the limit for the number of vlayer interfaces that can be created interface_limit = { --- @setting interface_limit Sets the limit for the number of vlayer interfaces that can be created
energy = 1, -- >1 allows for disconnected power networks to receive power energy = 1, -- >1 allows for disconnected power networks to receive power
circuit = 10, -- No caveats circuit = 20, -- No caveats
storage_input = 10, -- No caveats storage_input = 20, -- No caveats
storage_output = 1, -- >0 allows for item teleportation (allowed_items only) storage_output = 1, -- >0 allows for item teleportation (allowed_items only)
}, },
allowed_items = { --- @setting allowed_items List of all items allowed in vlayer storage and their properties allowed_items = { --- @setting allowed_items List of all items allowed in vlayer storage and their properties
--[[ --[[
Allowed properties: Allowed properties:
starting_value = 0: The amount of the item placed into the vlayer on game start, ignores area requirements starting_value : The amount of the item placed into the vlayer on game start, ignores area requirements
required_area = 0: When greater than 0 the items properties are not applied unless their is sufficient surplus surface area required_area : When greater than 0 the items properties are not applied unless their is sufficient surplus surface area
production = 0: The energy production of the item in MW, used for solar panels production : The energy production of the item in MW, used for solar panels
discharge = 0: The energy discharge of the item in MW, used for accumulators discharge : The energy discharge of the item in MW, used for accumulators
capacity = 0: The energy capacity of the item in MJ, used for accumulators capacity : The energy capacity of the item in MJ, used for accumulators
surface_area = 0: The surface area provided by the item, used for landfill surface_area : The surface area provided by the item, used for landfill
]] ]]
["solar-panel"] = { ["solar-panel"] = {
starting_value = 0, starting_value = 0,
@@ -54,7 +54,7 @@ return {
["landfill"] = { ["landfill"] = {
starting_value = 0, starting_value = 0,
required_area = 0, required_area = 0,
surface_area = 6, -- Tiles surface_area = 8, -- Tiles
}, },
["wood"] = { ["wood"] = {
starting_value = 0, starting_value = 0,
@@ -70,31 +70,40 @@ return {
fuel_value = 4, -- MJ fuel_value = 4, -- MJ
power = false, -- turn all coal to power to reduce trash power = false, -- turn all coal to power to reduce trash
}, },
["solid-fuel"] = {
starting_value = 0,
required_area = 0,
surface_area = 0,
fuel_value = 12, -- MJ
power = false, -- turn all solid fuel to power to reduce trash
},
["rocket-fuel"] = {
starting_value = 0,
required_area = 0,
surface_area = 0,
fuel_value = 100, -- MJ
power = false, -- turn all rocket fuel to power to reduce trash
}
--[[ --[[
['iron-ore'] = { ["iron-ore"] = {
starting_value = 0, starting_value = 0,
required_area = 0, required_area = 0,
surface_area = 0 surface_area = 0,
}, },
['copper-ore'] = { ["copper-ore"] = {
starting_value = 0, starting_value = 0,
required_area = 0, required_area = 0,
surface_area = 0 surface_area = 0,
}, },
['coal'] = { ["stone"] = {
starting_value = 0, starting_value = 0,
required_area = 0, required_area = 0,
surface_area = 0 surface_area = 0,
}, },
['stone'] = { ["uranium-ore"] = {
starting_value = 0, starting_value = 0,
required_area = 0, required_area = 0,
surface_area = 0 surface_area = 0,
},
['uranium-ore'] = {
starting_value = 0,
required_area = 0,
surface_area = 0
}, },
]] ]]
}, },
@@ -170,5 +179,5 @@ return {
base_game_equivalent = "accumulator", base_game_equivalent = "accumulator",
multiplier = 16384, multiplier = 16384,
}, },
}, }
} }

View File

@@ -22,6 +22,7 @@ local vlayer_data = {
properties = { properties = {
total_surface_area = 0, total_surface_area = 0,
used_surface_area = 0, used_surface_area = 0,
total_production = 0,
production = 0, production = 0,
discharge = 0, discharge = 0,
capacity = 0, capacity = 0,
@@ -155,7 +156,7 @@ local function get_production_multiplier()
end end
if surface.darkness then if surface.darkness then
-- We are using a real surface, our config does not contain 'darkness' -- We are using a real surface, our config does not contain "darkness"
local brightness = 1 - surface.darkness local brightness = 1 - surface.darkness
if brightness >= surface.min_brightness then if brightness >= surface.min_brightness then
@@ -212,7 +213,9 @@ function vlayer.allocate_item(item_name, count)
assert(item_properties, "Item not allowed in vlayer: " .. tostring(item_name)) assert(item_properties, "Item not allowed in vlayer: " .. tostring(item_name))
if item_properties.production then if item_properties.production then
vlayer_data.properties.production = vlayer_data.properties.production + item_properties.production * count local nc = item_properties.production * count
vlayer_data.properties.production = vlayer_data.properties.production + nc
vlayer_data.properties.total_production = vlayer_data.properties.total_production + nc
end end
if item_properties.capacity then if item_properties.capacity then
@@ -232,6 +235,14 @@ function vlayer.allocate_item(item_name, count)
end end
end end
function vlayer.unable_alloc_item_pwr_calc(item_name, count)
local item_properties = config.allowed_items[item_name]
if item_properties.production then
vlayer_data.properties.total_production = vlayer_data.properties.total_production + item_properties.production * count
end
end
-- For all allowed items, setup their starting values, default 0 -- For all allowed items, setup their starting values, default 0
for item_name, properties in pairs(config.allowed_items) do for item_name, properties in pairs(config.allowed_items) do
vlayer_data.storage.items[item_name] = properties.starting_value or 0 vlayer_data.storage.items[item_name] = properties.starting_value or 0
@@ -260,7 +271,9 @@ function vlayer.insert_item(item_name, count)
vlayer.allocate_item(item_name, allocate_count) vlayer.allocate_item(item_name, allocate_count)
end end
vlayer_data.storage.unallocated[item_name] = vlayer_data.storage.unallocated[item_name] + count - allocate_count local unallocated = count - allocate_count
vlayer_data.storage.unallocated[item_name] = vlayer_data.storage.unallocated[item_name] + unallocated
vlayer.unable_alloc_item_pwr_calc(item_name, unallocated)
else else
vlayer.allocate_item(item_name, count) vlayer.allocate_item(item_name, count)
end end
@@ -456,6 +469,7 @@ local function handle_unallocated()
if allocation_count > 0 then if allocation_count > 0 then
vlayer_data.storage.unallocated[item_name] = vlayer_data.storage.unallocated[item_name] - allocation_count vlayer_data.storage.unallocated[item_name] = vlayer_data.storage.unallocated[item_name] - allocation_count
vlayer.allocate_item(item_name, allocation_count) vlayer.allocate_item(item_name, allocation_count)
vlayer.unable_alloc_item_pwr_calc(item_name, -allocation_count)
end end
end end
end end
@@ -464,15 +478,19 @@ end
function vlayer.get_statistics() function vlayer.get_statistics()
local vdp = vlayer_data.properties.production * mega local vdp = vlayer_data.properties.production * mega
local gdm = get_production_multiplier() local gdm = get_production_multiplier()
local gsm = get_sustained_multiplier()
local gald = get_actual_land_defecit()
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 = get_actual_land_defecit(), remaining_surface_area = gald,
surface_area = vlayer_data.properties.total_surface_area - gald,
production_multiplier = gdm, production_multiplier = gdm,
energy_max = vdp, energy_max = vdp,
energy_production = vdp * gdm, energy_production = vdp * gdm,
energy_sustained = vdp * get_sustained_multiplier(), energy_total_production = vlayer_data.properties.total_production * gsm * mega,
energy_sustained = vdp * gsm,
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_time = math.floor(vlayer_data.surface.daytime * vlayer_data.surface.ticks_per_day), day_time = math.floor(vlayer_data.surface.daytime * vlayer_data.surface.ticks_per_day),

View File

@@ -177,9 +177,9 @@ local vlayer_gui_display_item_accumulator_count =
font = "heading-2", font = "heading-2",
} }
--- Display label for the remaining surface area --- Display label for the surface area
-- @element vlayer_gui_display_signal_remaining_surface_area_name -- @element vlayer_gui_display_signal_surface_area_name
local vlayer_gui_display_signal_remaining_surface_area_name = local vlayer_gui_display_signal_surface_area_name =
Gui.element{ Gui.element{
type = "label", type = "label",
name = "vlayer_display_signal_remaining_surface_area_name", name = "vlayer_display_signal_remaining_surface_area_name",
@@ -190,16 +190,16 @@ local vlayer_gui_display_signal_remaining_surface_area_name =
width = 200, width = 200,
} }
local vlayer_gui_display_signal_remaining_surface_area_count = local vlayer_gui_display_signal_surface_area_count =
Gui.element{ Gui.element{
type = "label", type = "progressbar",
name = "vlayer_display_signal_remaining_surface_area_count", name = "vlayer_display_signal_surface_area_count",
caption = "0", caption = "",
style = "heading_2_label", value = 0,
style = "electric_satisfaction_statistics_progressbar",
}:style{ }:style{
width = 200, width = 200,
height = 28, font = "heading-2",
horizontal_align = "right",
} }
--- Display label for the sustained energy production --- Display label for the sustained energy production
@@ -217,14 +217,14 @@ local vlayer_gui_display_signal_sustained_name =
local vlayer_gui_display_signal_sustained_count = local vlayer_gui_display_signal_sustained_count =
Gui.element{ Gui.element{
type = "label", type = "progressbar",
name = "vlayer_display_signal_sustained_count", name = "vlayer_display_signal_sustained_count",
caption = "0", caption = "",
style = "heading_2_label", value = 0,
style = "electric_satisfaction_statistics_progressbar",
}:style{ }:style{
width = 200, width = 200,
height = 28, font = "heading-2",
horizontal_align = "right",
} }
--- Display label for the current energy production --- Display label for the current energy production
@@ -288,8 +288,8 @@ local vlayer_display_set =
vlayer_gui_display_item_solar_count(disp) vlayer_gui_display_item_solar_count(disp)
vlayer_gui_display_item_accumulator_name(disp) vlayer_gui_display_item_accumulator_name(disp)
vlayer_gui_display_item_accumulator_count(disp) vlayer_gui_display_item_accumulator_count(disp)
vlayer_gui_display_signal_remaining_surface_area_name(disp) vlayer_gui_display_signal_surface_area_name(disp)
vlayer_gui_display_signal_remaining_surface_area_count(disp) vlayer_gui_display_signal_surface_area_count(disp)
vlayer_gui_display_signal_sustained_name(disp) vlayer_gui_display_signal_sustained_name(disp)
vlayer_gui_display_signal_sustained_count(disp) vlayer_gui_display_signal_sustained_count(disp)
vlayer_gui_display_signal_production_name(disp) vlayer_gui_display_signal_production_name(disp)
@@ -489,11 +489,13 @@ Event.on_nth_tick(config.update_tick_gui, function(_)
val = (items_alloc["accumulator"] / math.max(items["accumulator"], 1)), val = (items_alloc["accumulator"] / math.max(items["accumulator"], 1)),
cap = format_number(items_alloc["accumulator"], false) .. " / " .. format_number(items["accumulator"], false), cap = format_number(items_alloc["accumulator"], false) .. " / " .. format_number(items["accumulator"], false),
}, },
[vlayer_gui_display_signal_remaining_surface_area_count.name] = { [vlayer_gui_display_signal_surface_area_count.name] = {
cap = format_number(stats.remaining_surface_area, false), val = (stats.total_surface_area / math.max(stats.surface_area, 1)),
cap = format_number(stats.remaining_surface_area)
}, },
[vlayer_gui_display_signal_sustained_count.name] = { [vlayer_gui_display_signal_sustained_count.name] = {
cap = format_energy(stats.energy_sustained, "W"), val = (stats.energy_sustained / math.max(stats.energy_total_production, 1)),
cap = format_energy(stats.energy_sustained, "W") .. " / " .. format_energy(stats.energy_total_production, "W")
}, },
[vlayer_gui_display_signal_production_count.name] = { [vlayer_gui_display_signal_production_count.name] = {
val = (stats.energy_production / math.max(stats.energy_max, 1)), val = (stats.energy_production / math.max(stats.energy_max, 1)),