350 lines
18 KiB
Lua
350 lines
18 KiB
Lua
-------------------------------------------------------------------------------
|
|
---Class to build UnitTestPanel panel
|
|
---@class UnitTestPanel
|
|
UnitTestPanel = newclass(Form,function(base,classname)
|
|
Form.init(base,classname)
|
|
base.add_special_button = true
|
|
end)
|
|
|
|
local data = require "unit_test.Data"
|
|
local data_pyanodons = require "unit_test.DataPyanodons"
|
|
local data_bob_angel = require "unit_test.DataBobAngel"
|
|
local data_krastorio2 = require "unit_test.DataKrastorio2"
|
|
local data_space_ecploration = require "unit_test.DataSpaceExploration"
|
|
-------------------------------------------------------------------------------
|
|
---On initialization
|
|
function UnitTestPanel:onInit()
|
|
self.panelCaption = ({"helmod_result-panel.tab-button-unittest"})
|
|
self.help_button = false
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Get Button Sprites
|
|
---@return boolean
|
|
function UnitTestPanel:getButtonSprites()
|
|
return defines.sprites.database_test.white,defines.sprites.database_test.black
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Is visible
|
|
---@return boolean
|
|
function UnitTestPanel:isVisible()
|
|
return User.getModGlobalSetting("hidden_panels")
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Is special
|
|
---@return boolean
|
|
function UnitTestPanel:isSpecial()
|
|
return true
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Get or create tab panel
|
|
---@return LuaGuiElement
|
|
function UnitTestPanel:getTabPane()
|
|
local content_panel = self:getFrameDeepPanel("panel")
|
|
local panel_name = "tab_panel"
|
|
if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then
|
|
return content_panel[panel_name]
|
|
end
|
|
local panel = GuiElement.add(content_panel, GuiTabPane(panel_name))
|
|
return panel
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Get or create tab panel
|
|
---@return LuaGuiElement
|
|
function UnitTestPanel:getTab(panel_name, caption)
|
|
local content_panel = self:getTabPane()
|
|
local scroll_name = "scroll-" .. panel_name
|
|
if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then
|
|
return content_panel[scroll_name]
|
|
end
|
|
local tab_panel = GuiElement.add(content_panel, GuiTab(panel_name):caption(caption))
|
|
local scroll_panel = GuiElement.add(content_panel, GuiScroll(scroll_name):style("helmod_scroll_pane"):policy(true))
|
|
content_panel.add_tab(tab_panel,scroll_panel)
|
|
scroll_panel.style.horizontally_stretchable = true
|
|
scroll_panel.style.vertically_stretchable = true
|
|
return scroll_panel
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Get or create energy tab panel
|
|
---@return LuaGuiElement
|
|
function UnitTestPanel:getEnergyTab()
|
|
return self:getTab("energy-tab-panel", {"helmod_unittest.energy-title"})
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Get or create sprite tab panel
|
|
---@return LuaGuiElement
|
|
function UnitTestPanel:getSpriteTab()
|
|
return self:getTab("sprite-tab-panel", {"helmod_unittest.sprite-title"})
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On event
|
|
---@param event LuaEvent
|
|
function UnitTestPanel:onEvent(event)
|
|
if not(User.isAdmin()) then return end
|
|
if event.action == "reload-script" then
|
|
game.reload_script()
|
|
Controller:send("on_gui_update", event)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On update
|
|
---@param event LuaEvent
|
|
function UnitTestPanel:onUpdate(event)
|
|
if game.active_mods["boblibrary"] then
|
|
data = data_bob_angel
|
|
end
|
|
if game.active_mods["pyrawores"] then
|
|
data = data_pyanodons
|
|
end
|
|
if game.active_mods["Krastorio2"] then
|
|
data = data_krastorio2
|
|
end
|
|
if game.active_mods["space-exploration"] then
|
|
data = data_space_ecploration
|
|
end
|
|
self:updateMenu()
|
|
self:updateEnergy()
|
|
self:updateSprite()
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Update menu
|
|
function UnitTestPanel:updateMenu()
|
|
local menu_panel = self:getMenuPanel()
|
|
---pin info
|
|
local group1 = GuiElement.add(menu_panel, GuiFlowH("group1"))
|
|
GuiElement.add(group1, GuiButton("HMUnitTestPanel", "reload-script"):sprite("menu", defines.sprites.refresh.black, defines.sprites.refresh.black):style("helmod_button_menu"):tooltip("Reload script"))
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Update energy
|
|
function UnitTestPanel:updateSprite()
|
|
local tab_panel = self:getSpriteTab()
|
|
local table_panel = GuiElement.add(tab_panel, GuiTable("list-table"):column(2))
|
|
for sprite_name, sprites in pairs(defines.sprites) do
|
|
local col1 = GuiElement.add(table_panel, GuiFrameH("info", sprite_name):style(helmod_frame_style.hidden))
|
|
GuiElement.add(col1, GuiLabel("label"):caption(sprite_name))
|
|
local col2 = GuiElement.add(table_panel, GuiFrameH("buttons", sprite_name):style(helmod_frame_style.hidden))
|
|
for color_name, sprite in pairs(sprites) do
|
|
GuiElement.add(col2, GuiButton("do_noting", sprite_name, color_name):sprite("menu", sprite, sprite):style("helmod_button_menu"):tooltip(string.format("defines.sprites.%s.%s", sprite_name, color_name)))
|
|
end
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Update energy
|
|
function UnitTestPanel:updateEnergy()
|
|
local tab_panel = self:getEnergyTab()
|
|
GuiElement.add(tab_panel, GuiLabel("label"):caption(data.mod):style("heading_1_label"))
|
|
|
|
local table_panel = GuiElement.add(tab_panel, GuiTable("list-table"):column(23))
|
|
table_panel.vertical_centering = false
|
|
table_panel.style.horizontal_spacing = 10
|
|
|
|
self:addEnergyListHeader(table_panel)
|
|
|
|
for entity, test_data in spairs(data.energy, function(t,a,b) return t[b]["energy_type_input"] < t[a]["energy_type_input"] end) do
|
|
self:addEnergyListRow(table_panel, entity, test_data)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add cell header with tooltip
|
|
---@param itable LuaGuiElement
|
|
---@param name string
|
|
---@param caption string
|
|
---@param tooltip table
|
|
function UnitTestPanel:addCellHeaderTooltip(itable, name, caption, tooltip)
|
|
local cell = GuiElement.add(itable, GuiFrameH("header", name):style(helmod_frame_style.hidden))
|
|
GuiElement.add(cell, GuiLabel("label"):caption(caption):tooltip(tooltip))
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add energy List header
|
|
---@param itable LuaGuiElement
|
|
function UnitTestPanel:addEnergyListHeader(itable)
|
|
---col action
|
|
self:addCellHeaderTooltip(itable, "entity", "Entity")
|
|
---data
|
|
self:addCellHeaderTooltip(itable, "type", "Type")
|
|
self:addCellHeaderTooltip(itable, "name", "Name")
|
|
|
|
---**** Attributes ***
|
|
self:addCellHeaderTooltip(itable, "energy-type", "ET", "Energy Type")
|
|
self:addCellHeaderTooltip(itable, "energy-usage-min", "EUmin", "Min Energy Usage")
|
|
self:addCellHeaderTooltip(itable, "energy-usage-max", "EUmax", "Max Energy Usage")
|
|
self:addCellHeaderTooltip(itable, "energy-usage-priority", "EUP", "Energy Usage Priority")
|
|
self:addCellHeaderTooltip(itable, "fluid-usage", "FU", "Fluid Usage /s")
|
|
self:addCellHeaderTooltip(itable, "fluid-burns", "FB", "Fluid Burns")
|
|
self:addCellHeaderTooltip(itable, "effectivity", "E", "Effectivity")
|
|
self:addCellHeaderTooltip(itable, "target-temperature", "TT", "Target Temperature")
|
|
self:addCellHeaderTooltip(itable, "maximum-temperature", "MT", "Maximum Temperature")
|
|
---**** Computed ***
|
|
self:addCellHeaderTooltip(itable, "energy-type-input", "ETI", "Energy Type Input")
|
|
self:addCellHeaderTooltip(itable, "energy-consumption", "EC", "Energy Consumption")
|
|
self:addCellHeaderTooltip(itable, "fluid-consumption", "FC", "Fluid Consumption /s")
|
|
self:addCellHeaderTooltip(itable, "fluid-fuel", "FF", "Fluid Fuel")
|
|
self:addCellHeaderTooltip(itable, "fluid-capacity", "FJ", "Fluid Capacity J")
|
|
self:addCellHeaderTooltip(itable, "energy-type-output", "ETO", "Energy Type Output")
|
|
self:addCellHeaderTooltip(itable, "fluid-production", "FP", "Fluid Production /s")
|
|
self:addCellHeaderTooltip(itable, "fluid-production-prototype", "FPP", "Fluid Production Prototype")
|
|
self:addCellHeaderTooltip(itable, "energy-production", "EP", "Energy Production")
|
|
self:addCellHeaderTooltip(itable, "pollution", "P", "Pollution")
|
|
self:addCellHeaderTooltip(itable, "speed", "S", "Speed")
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add row energy List
|
|
---@param itable LuaGuiElement
|
|
---@param entity table
|
|
---@param test_data table
|
|
function UnitTestPanel:addEnergyListRow(itable, entity, test_data)
|
|
local prototype = EntityPrototype(entity)
|
|
local lua_prototype = prototype:native()
|
|
if lua_prototype ~= nil then
|
|
---col Entity
|
|
local button = GuiElement.add(itable, GuiButtonSelectSprite("entity", entity):choose("entity", lua_prototype.name))
|
|
button.locked = true
|
|
---col Type
|
|
GuiElement.add(itable, GuiLabel("type", entity):caption(lua_prototype.type))
|
|
---col Name
|
|
GuiElement.add(itable, GuiLabel("name", entity):caption(lua_prototype.name))
|
|
|
|
local energy_source = prototype:getEnergySource()
|
|
---**** Attributes ***
|
|
---col Energy Type
|
|
local energy_type = "none"
|
|
if energy_source ~= nil then
|
|
energy_type = energy_source:getType()
|
|
end
|
|
local tag_color, tooltip = self:valueEquals(energy_type, test_data.energy_type, true)
|
|
GuiElement.add(itable, GuiLabel("energy-type", entity):caption({"", helmod_tag.font.default_bold, tag_color, energy_type, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Energy Usage Min
|
|
local energy_usage_min = math.floor(prototype:getMinEnergyUsage())
|
|
local tag_color, tooltip = self:valueEquals(energy_usage_min, test_data.energy_usage_min, true)
|
|
GuiElement.add(itable, GuiLabel("energy-usage-min", entity):caption({"", helmod_tag.font.default_bold, tag_color, Format.formatNumberKilo(energy_usage_min, "W"), helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Energy Usage Max
|
|
local energy_usage_max = math.floor(prototype:getMaxEnergyUsage())
|
|
local tag_color, tooltip = self:valueEquals(energy_usage_max, test_data.energy_usage_max, true)
|
|
GuiElement.add(itable, GuiLabel("energy-usage-max", entity):caption({"", helmod_tag.font.default_bold, tag_color, Format.formatNumberKilo(energy_usage_max, "W"), helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Energy Usage Priority
|
|
local energy_usage_priority = "none"
|
|
if energy_source ~= nil then
|
|
energy_usage_priority = energy_source:getUsagePriority()
|
|
end
|
|
local tag_color, tooltip = self:valueEquals(energy_usage_priority, test_data.energy_usage_priority, true)
|
|
GuiElement.add(itable, GuiLabel("energy-usage-priority", entity):caption({"", helmod_tag.font.default_bold, tag_color, energy_usage_priority, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Fluid Usage /s
|
|
local fluid_usage = math.floor(prototype:getFluidUsage())
|
|
local tag_color, tooltip = self:valueEquals(fluid_usage, test_data.fluid_usage, true)
|
|
GuiElement.add(itable, GuiLabel("fluid-usage", entity):caption({"", helmod_tag.font.default_bold, tag_color, fluid_usage, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Fluid Burns
|
|
local fluid_burns = "none"
|
|
if energy_source ~= nil and prototype:getEnergyTypeInput() == "fluid" then
|
|
fluid_burns = prototype:getBurnsFluid()
|
|
end
|
|
local tag_color, tooltip = self:valueEquals(fluid_burns, test_data.fluid_burns, true)
|
|
GuiElement.add(itable, GuiLabel("fluid-burns", entity):caption({"", helmod_tag.font.default_bold, tag_color, fluid_burns, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Effectivity
|
|
local effectivity = prototype:getEffectivity()
|
|
local tag_color, tooltip = self:valueEquals(effectivity, test_data.effectivity, true)
|
|
GuiElement.add(itable, GuiLabel("effectivity", entity):caption({"", helmod_tag.font.default_bold, tag_color, effectivity, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Target Temperature
|
|
local target_temperature = prototype:getTargetTemperature()
|
|
local tag_color, tooltip = self:valueEquals(target_temperature, test_data.target_temperature, true)
|
|
GuiElement.add(itable, GuiLabel("target-temperature", entity):caption({"", helmod_tag.font.default_bold, tag_color, target_temperature, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Maximum Temperature
|
|
local maximum_temperature = prototype:getMaximumTemperature()
|
|
local tag_color, tooltip = self:valueEquals(maximum_temperature, test_data.maximum_temperature, true)
|
|
GuiElement.add(itable, GuiLabel("maximum-temperature", entity):caption({"", helmod_tag.font.default_bold, tag_color, maximum_temperature, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
|
|
---**** Computed ***
|
|
---col Energy Type
|
|
local energy_type_input = prototype:getEnergyTypeInput()
|
|
local tag_color, tooltip = self:valueEquals(energy_type_input, test_data.energy_type_input)
|
|
GuiElement.add(itable, GuiLabel("energy-type-input", entity):caption({"", helmod_tag.font.default_bold, tag_color, energy_type_input, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Energy Consumption
|
|
local energy_consumption = math.floor(prototype:getEnergyConsumption() + prototype:getMinEnergyUsage())
|
|
local tag_color, tooltip = self:valueEquals(energy_consumption, test_data.energy_consumption)
|
|
GuiElement.add(itable, GuiLabel("energy-consumption", entity):caption({"", helmod_tag.font.default_bold, tag_color, Format.formatNumberKilo(energy_consumption, "W"), helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Fluid Consumption /s
|
|
local fluid_consumption = Format.round(prototype:getFluidConsumption(),-2)
|
|
local tag_color, tooltip = self:valueEquals(fluid_consumption, test_data.fluid_consumption)
|
|
GuiElement.add(itable, GuiLabel("fluid-consumption", entity):caption({"", helmod_tag.font.default_bold, tag_color, fluid_consumption, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Fluid Fuel
|
|
local fuel_prototype = prototype:getFluidFuelPrototype()
|
|
local fluid_fuel = {name="none", capacity=0}
|
|
if fuel_prototype ~= nil and fuel_prototype:native() ~= nil then
|
|
fluid_fuel = {name=fuel_prototype:native().name, capacity=fuel_prototype:getHeatCapacity()}
|
|
end
|
|
local tag_color, tooltip = self:valueEquals(fluid_fuel.name, test_data.fluid_fuel.name)
|
|
GuiElement.add(itable, GuiLabel("fluid-fuel", entity):caption({"", helmod_tag.font.default_bold, tag_color, fluid_fuel.name, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Fluid Capacity
|
|
local tag_color, tooltip = self:valueEquals(fluid_fuel.capacity, test_data.fluid_fuel.capacity)
|
|
GuiElement.add(itable, GuiLabel("fluid-capacity", entity):caption({"", helmod_tag.font.default_bold, tag_color, fluid_fuel.capacity, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Energy Type Output
|
|
local energy_type_output = prototype:getEnergyTypeOutput()
|
|
local tag_color, tooltip = self:valueEquals(energy_type_output, test_data.energy_type_output)
|
|
GuiElement.add(itable, GuiLabel("energy-type-output", entity):caption({"", helmod_tag.font.default_bold, tag_color, energy_type_output, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Fluid Production /s
|
|
local fluid_production = {name="none", amount=math.floor(prototype:getFluidProduction())}
|
|
local fluid_production_filter = prototype:getFluidProductionFilter()
|
|
if fluid_production_filter ~= nil then fluid_production.name = fluid_production_filter.name end
|
|
local tag_color, tooltip = self:valueEquals(fluid_production.amount, test_data.fluid_production.amount)
|
|
GuiElement.add(itable, GuiLabel("fluid-production", entity):caption({"", helmod_tag.font.default_bold, tag_color, fluid_production.amount, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Fluid Production Prototype
|
|
local tag_color, tooltip = self:valueEquals(fluid_production.name, test_data.fluid_production.name)
|
|
GuiElement.add(itable, GuiLabel("fluid-production-prototype", entity):caption({"", helmod_tag.font.default_bold, tag_color, fluid_production.name, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Energy Production
|
|
local energy_production = math.floor(prototype:getEnergyProduction())
|
|
local tag_color, tooltip = self:valueEquals(energy_production, test_data.energy_production)
|
|
GuiElement.add(itable, GuiLabel("energy-production", entity):caption({"", helmod_tag.font.default_bold, tag_color, Format.formatNumberKilo(energy_production, "W"), helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Pollution
|
|
local pollution = Format.round(prototype:getPollution() * 60, -2)
|
|
local tag_color, tooltip = self:valueEquals(pollution, test_data.pollution)
|
|
GuiElement.add(itable, GuiLabel("pollution", entity):caption({"", helmod_tag.font.default_bold, tag_color, Format.formatNumber(pollution), helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
---col Speed
|
|
local speed = Format.round(prototype:speedFactory(test_data.recipe), -2)
|
|
local tag_color, tooltip = self:valueEquals(speed, test_data.speed)
|
|
GuiElement.add(itable, GuiLabel("speed", entity):caption({"", helmod_tag.font.default_bold, tag_color, Format.formatNumber(speed), helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip))
|
|
end
|
|
|
|
end
|
|
|
|
function UnitTestPanel:valueEquals(current_value, target_value, attribute)
|
|
if current_value == target_value then
|
|
local tag_color = helmod_tag.color.green_light
|
|
if attribute then
|
|
tag_color = helmod_tag.color.blue_light
|
|
end
|
|
if current_value == "none" then
|
|
tag_color = helmod_tag.color.white
|
|
end
|
|
local tooltip = {"","Success"}
|
|
return tag_color, tooltip
|
|
else
|
|
local tag_color = helmod_tag.color.red_light
|
|
if attribute then
|
|
tag_color = helmod_tag.color.orange
|
|
end
|
|
local display_current = current_value
|
|
if type(current_value) == "number" then
|
|
display_current = Format.formatNumber(current_value)
|
|
end
|
|
local display_target = target_value
|
|
if type(target_value) == "number" then
|
|
display_target = Format.formatNumber(target_value)
|
|
end
|
|
local tooltip = {"",string.format("Failed, value %s must be %s", display_current, display_target)}
|
|
return tag_color, tooltip
|
|
end
|
|
end
|