745 lines
39 KiB
Lua
745 lines
39 KiB
Lua
-------------------------------------------------------------------------------
|
|
---Class to help to build GuiTooltip
|
|
---@class GuiTooltip
|
|
GuiTooltip = newclass(GuiElement,function(base,...)
|
|
GuiElement.init(base,...)
|
|
base.classname = "HMGuiTooltip"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set element
|
|
---@param element table
|
|
---@return GuiTooltip
|
|
function GuiTooltip:element(element)
|
|
self.m_element = element
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set with logistic information
|
|
---@return GuiTooltip
|
|
function GuiTooltip:withLogistic()
|
|
self.m_with_logistic = true
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set with energy information
|
|
---@return GuiTooltip
|
|
function GuiTooltip:withEnergy()
|
|
self.m_with_energy = true
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set with effect information
|
|
---@return GuiTooltip
|
|
function GuiTooltip:withEffectInfo(value)
|
|
self.m_with_effect_info = value
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set with product information
|
|
---@return GuiTooltip
|
|
function GuiTooltip:withProductInfo()
|
|
self.m_with_product_info = true
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set with control information
|
|
---@param control_info string
|
|
---@return GuiTooltip
|
|
function GuiTooltip:withControlInfo(control_info)
|
|
self.m_with_control_info = control_info
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add control information
|
|
---@param tooltip table
|
|
---@param element table
|
|
function GuiTooltip:appendControlInfo(tooltip, element)
|
|
if self.m_with_control_info ~= nil then
|
|
local tooltip_section = {""}
|
|
table.insert(tooltip_section, {"", "\n", "----------------------"})
|
|
table.insert(tooltip_section, {"", "\n", helmod_tag.font.default_bold, {"tooltip.info-control"}, helmod_tag.font.close})
|
|
if self.m_with_control_info == "contraint" then
|
|
table.insert(tooltip_section, {"", "\n", "[img=helmod-tooltip-blank]", " ", {"controls.contraint-plus"}})
|
|
table.insert(tooltip_section, {"", "\n", "[img=helmod-tooltip-blank]", " ", {"controls.contraint-minus"}})
|
|
end
|
|
if self.m_with_control_info == "link-intermediate" then
|
|
table.insert(tooltip_section, {"", "\n", "[img=helmod-tooltip-blank]", " ", {"controls.link-intermediate"}})
|
|
end
|
|
if self.m_with_control_info == "module-add" then
|
|
table.insert(tooltip_section, {"", "\n", "[img=helmod-tooltip-blank]", " ", {"controls.module-add"}})
|
|
end
|
|
if self.m_with_control_info == "module-remove" then
|
|
table.insert(tooltip_section, {"", "\n", "[img=helmod-tooltip-blank]", " ", {"controls.module-remove"}})
|
|
end
|
|
if self.m_with_control_info == "crafting-add" then
|
|
table.insert(tooltip_section, {"", "\n", "[img=helmod-tooltip-blank]", " ", {"controls.crafting-add"}})
|
|
end
|
|
table.insert(tooltip, tooltip_section)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add energy information
|
|
---@param tooltip table
|
|
---@param element table
|
|
function GuiTooltip:appendEnergyConsumption(tooltip, element)
|
|
if self.m_with_energy == true then
|
|
---energy
|
|
local total_power = Format.formatNumberKilo(element.energy_total, "W")
|
|
if element.limit_energy ~= nil then
|
|
local limit_power = Format.formatNumberKilo(element.limit_energy, "W")
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.energy-consumption"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, limit_power or 0, "/", total_power, helmod_tag.font.close})
|
|
else
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.energy-consumption"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, total_power or 0, helmod_tag.font.close})
|
|
end
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add flow information
|
|
---@param tooltip table
|
|
---@param element table
|
|
function GuiTooltip:appendFlow(tooltip, element)
|
|
if self.m_with_logistic == true then
|
|
if element.type == "item" then
|
|
local item_prototype = ItemPrototype(element.name)
|
|
local stack_size = 0
|
|
if item_prototype ~= nil then
|
|
stack_size = item_prototype:stackSize()
|
|
end
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.stack-size"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, stack_size or 0, helmod_tag.font.close})
|
|
end
|
|
|
|
local total_flow = Format.formatNumberElement(element.count/((element.time or 1)/60))
|
|
if element.limit_count ~= nil then
|
|
local limit_flow = Format.formatNumberElement(element.limit_count/((element.time or 1)/60))
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.outflow"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, limit_flow or 0, "/", {"helmod_si.per-minute",total_flow or 0}, helmod_tag.font.close})
|
|
else
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.outflow"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, {"helmod_si.per-minute",total_flow or 0}, helmod_tag.font.close})
|
|
end
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add flow information
|
|
---@param tooltip table
|
|
---@param element table
|
|
function GuiTooltip:appendEffectInfo(tooltip, element)
|
|
if self.m_with_effect_info == true then
|
|
---energy
|
|
local sign = ""
|
|
if element.effects.consumption > 0 then sign = "+" end
|
|
local energy = Format.formatNumberKilo(element.energy, "W").." ("..sign..Format.formatPercent(element.effects.consumption).."%)"
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_label.energy"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, energy or 0, helmod_tag.font.close})
|
|
|
|
---speed
|
|
local sign = ""
|
|
if element.effects.speed > 0 then sign = "+" end
|
|
local speed = Format.formatNumber(element.speed).." ("..sign..Format.formatPercent(element.effects.speed).."%)"
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_label.speed"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, speed or 0, helmod_tag.font.close})
|
|
|
|
---productivity
|
|
local sign = ""
|
|
if element.effects.productivity > 0 then sign = "+" end
|
|
local productivity = sign..Format.formatPercent(element.effects.productivity).."%"
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_label.productivity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, productivity or 0, helmod_tag.font.close})
|
|
|
|
---pollution
|
|
local pollution = Format.formatNumberElement((element.pollution or 0)*60 )
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_label.pollution"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, pollution or 0, helmod_tag.font.close})
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add logistic information
|
|
---@param tooltip table
|
|
---@param element table
|
|
function GuiTooltip:appendLogistic(tooltip, element)
|
|
if self.m_with_logistic == true then
|
|
local tooltip_section = {""}
|
|
table.insert(tooltip_section, {"", "\n", "----------------------"})
|
|
table.insert(tooltip_section, {"", "\n", helmod_tag.font.default_bold, {"tooltip.info-logistic"}, helmod_tag.font.close})
|
|
---solid logistic
|
|
if element.type == 0 or element.type == "item" then
|
|
for _,type in pairs({"inserter", "belt", "container", "transport"}) do
|
|
local item_logistic = Player.getDefaultItemLogistic(type)
|
|
local item_prototype = Product(element)
|
|
local total_value = item_prototype:countContainer(element.count, item_logistic, element.time)
|
|
local formated_total_value = Format.formatNumberElement(total_value)
|
|
local info = ""
|
|
if type == "inserter" then
|
|
info = {"", " (", {"helmod_common.capacity"}, string.format(":%s", EntityPrototype(item_logistic):getInserterCapacity()), ")"}
|
|
end
|
|
if element.limit_count ~= nil and element.limit_count > 0 then
|
|
local limit_value = Format.formatNumberElement(item_prototype:countContainer(element.limit_count, item_logistic, element.time))
|
|
table.insert(tooltip_section, {"", "\n", string.format("[%s=%s]", "entity", item_logistic), " ", helmod_tag.font.default_bold, " x ", limit_value, "/", formated_total_value, helmod_tag.font.close, info})
|
|
else
|
|
table.insert(tooltip_section, {"", "\n", string.format("[%s=%s]", "entity", item_logistic), " ", helmod_tag.font.default_bold, " x ", formated_total_value, helmod_tag.font.close, info})
|
|
end
|
|
end
|
|
end
|
|
---fluid logistic
|
|
if element.type == 1 or element.type == "fluid" then
|
|
for _,type in pairs({"pipe", "container", "transport"}) do
|
|
local fluid_logistic = Player.getDefaultFluidLogistic(type)
|
|
local fluid_prototype = Product(element)
|
|
local count = element.count
|
|
if type == "pipe" then count = count / element.time end
|
|
local total_value = fluid_prototype:countContainer(count, fluid_logistic, element.time)
|
|
local formated_total_value = Format.formatNumberElement(total_value)
|
|
if element.limit_count ~= nil and element.limit_count > 0 then
|
|
local limit_count = element.limit_count
|
|
if type == "pipe" then limit_count = limit_count / element.time end
|
|
local limit_value = Format.formatNumberElement(fluid_prototype:countContainer(limit_count, fluid_logistic, element.time))
|
|
table.insert(tooltip_section, {"", "\n", string.format("[%s=%s]", "entity", fluid_logistic), " ", helmod_tag.font.default_bold, " x ", limit_value, "/", formated_total_value, helmod_tag.font.close})
|
|
else
|
|
table.insert(tooltip_section, {"", "\n", string.format("[%s=%s]", "entity", fluid_logistic), " ", helmod_tag.font.default_bold, " x ", formated_total_value, helmod_tag.font.close})
|
|
end
|
|
end
|
|
end
|
|
table.insert(tooltip, tooltip_section)
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add product information
|
|
---@param tooltip table
|
|
---@param element table
|
|
function GuiTooltip:appendProductInfo(tooltip, element)
|
|
if self.m_with_product_info == true then
|
|
---solid logistic
|
|
if element.type == 0 or element.type == "item" then
|
|
local item_prototype = ItemPrototype(element)
|
|
if item_prototype:getFuelValue() > 0 then
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.fuel-value"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, Format.formatNumberKilo(item_prototype:getFuelValue() or 0, "J"), helmod_tag.font.close})
|
|
end
|
|
end
|
|
---fluid logistic
|
|
if element.type == 1 or element.type == "fluid" then
|
|
local fluid_prototype = FluidPrototype(element)
|
|
if fluid_prototype:getHeatCapacity() > 0 then
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.heat-capacity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, fluid_prototype:getHeatCapacity() or 0, "J", helmod_tag.font.close})
|
|
end
|
|
if fluid_prototype:getFuelValue() > 0 then
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.fuel-value"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, Format.formatNumberKilo(fluid_prototype:getFuelValue() or 0, "J"), helmod_tag.font.close})
|
|
end
|
|
if element.temperature then
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.temperature"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.temperature or 0, "°c", helmod_tag.font.close})
|
|
end
|
|
if element.minimum_temperature and (element.minimum_temperature >= -1e300) then
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.temperature-min"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.minimum_temperature or 0, "°c", helmod_tag.font.close})
|
|
end
|
|
if element.maximum_temperature and (element.maximum_temperature <= 1e300) then
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.temperature-max"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.maximum_temperature or 0, "°c", helmod_tag.font.close})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add debug information
|
|
---@param tooltip table
|
|
---@param element table
|
|
function GuiTooltip:appendDebug(tooltip, element)
|
|
---debug
|
|
if User.getModGlobalSetting("debug_solver") == true then
|
|
table.insert(tooltip, {"", "\n", "----------------------"})
|
|
table.insert(tooltip, {"", "\n", "[img=developer]", " ", "Name", ": ", helmod_tag.font.default_bold, self.m_element.name or "nil", helmod_tag.font.close})
|
|
table.insert(tooltip, {"", "\n", "[img=developer]", " ", "Type", ": ", helmod_tag.font.default_bold, self.m_element.type or "nil", helmod_tag.font.close})
|
|
table.insert(tooltip, {"", "\n", "[img=developer]", " ", "State", ": ", helmod_tag.font.default_bold, self.m_element.state or 0, helmod_tag.font.close})
|
|
table.insert(tooltip, {"", "\n", "[img=developer]", " ", "Amount", ": ", helmod_tag.font.default_bold, self.m_element.amount or 0, helmod_tag.font.close})
|
|
table.insert(tooltip, {"", "\n", "[img=developer]", " ", "Count", ": ", helmod_tag.font.default_bold, self.m_element.count or 0, helmod_tag.font.close})
|
|
table.insert(tooltip, {"", "\n", "[img=developer]", " ", "Count limit", ": ", helmod_tag.font.default_bold, self.m_element.limit_count or 0, helmod_tag.font.close})
|
|
end
|
|
end
|
|
-------------------------------------------------------------------------------
|
|
---Create tooltip
|
|
---@return table
|
|
function GuiTooltip:create()
|
|
local tooltip = {""}
|
|
if string.find(self.name[1], "edit[-]") then
|
|
local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.edit)
|
|
table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close})
|
|
elseif string.find(self.name[1], "add[-]") then
|
|
local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.add)
|
|
table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close})
|
|
elseif string.find(self.name[1], "remove[-]") then
|
|
local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.remove)
|
|
table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close})
|
|
elseif string.find(self.name[1], "info[-]") then
|
|
local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.info)
|
|
table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.white, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close})
|
|
elseif string.find(self.name[1], "set[-]default") then
|
|
local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.favorite)
|
|
table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close})
|
|
elseif string.find(self.name[1], "apply[-]block") then
|
|
local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.expand_right)
|
|
table.insert(self.name, {self.options.tooltip})
|
|
table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close})
|
|
elseif string.find(self.name[1], "apply[-]line") then
|
|
local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.expand_right_group)
|
|
table.insert(self.name, {self.options.tooltip})
|
|
table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close})
|
|
elseif string.find(self.name[1], "module[-]clear") then
|
|
local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.erase)
|
|
table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close})
|
|
elseif string.find(self.name[1], "pipette") then
|
|
local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.pipette)
|
|
table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close})
|
|
else
|
|
table.insert(tooltip, {"", "[img=helmod-tooltip-blank]", " ", helmod_tag.font.default_bold, self.name, helmod_tag.font.close})
|
|
end
|
|
return tooltip
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiTooltipModel
|
|
GuiTooltipModel = newclass(GuiTooltip,function(base,...)
|
|
GuiTooltip.init(base,...)
|
|
base.classname = "HMGuiTooltip"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create tooltip
|
|
---@return table
|
|
function GuiTooltipModel:create()
|
|
local tooltip = self._super.create(self)
|
|
local element = self.m_element
|
|
local first_block = Model.firstRecipe(element.blocks or {})
|
|
if first_block ~= nil then
|
|
local type = first_block.type
|
|
if type == nil then type = "entity" end
|
|
if type == "resource" or type == "energy" then type = "entity" end
|
|
if type == "rocket" then type = "item" end
|
|
if type == "recipe-burnt" then type = "recipe" end
|
|
local element_sprite = GuiElement.getSprite(type, first_block.name, "[%s=%s]")
|
|
table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.color.gold, helmod_tag.font.default_bold, Player.getLocalisedName({type=type, name=first_block.name}), helmod_tag.font.close, helmod_tag.color.close})
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_result-panel.col-header-owner"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.owner or "", helmod_tag.font.close})
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.group"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.group or "", helmod_tag.font.close})
|
|
if element.note ~= nil and element.note ~= "" then
|
|
table.insert(tooltip, {"", "\n", "----------------------"})
|
|
table.insert(tooltip, {"", "\n", helmod_tag.font.default_bold, {"helmod_common.note"}, helmod_tag.font.close})
|
|
table.insert(tooltip, {"", "\n", element.note or ""})
|
|
end
|
|
end
|
|
return tooltip
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiTooltipRecipe
|
|
GuiTooltipRecipe = newclass(GuiTooltip,function(base,...)
|
|
GuiTooltip.init(base,...)
|
|
base.classname = "HMGuiTooltip"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create tooltip
|
|
---@return table
|
|
function GuiTooltipRecipe:create()
|
|
local tooltip = self._super.create(self)
|
|
local element = self.m_element
|
|
if element ~= nil then
|
|
local recipe_prototype = RecipePrototype(element)
|
|
local icon_name, icon_type = recipe_prototype:getIcon()
|
|
local element_sprite = GuiElement.getSprite(icon_type, icon_name, "[%s=%s]")
|
|
table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.color.gold, helmod_tag.font.default_bold, Player.getLocalisedName({type=icon_type, name=icon_name}), helmod_tag.font.close, helmod_tag.color.close})
|
|
---quantity
|
|
local total_count = Format.formatNumberElement(element.count)
|
|
if element.limit_count ~= nil then
|
|
local limit_count = Format.formatNumberElement(element.limit_count)
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.quantity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, limit_count or 0, "/", total_count, helmod_tag.font.close})
|
|
else
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.quantity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, total_count or 0, helmod_tag.font.close})
|
|
end
|
|
|
|
self:appendProductInfo(tooltip, element);
|
|
self:appendEnergyConsumption(tooltip, element);
|
|
self:appendFlow(tooltip, element);
|
|
self:appendLogistic(tooltip, element);
|
|
self:appendControlInfo(tooltip, element);
|
|
self:appendDebug(tooltip, element)
|
|
|
|
end
|
|
return tooltip
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiTooltipElement
|
|
GuiTooltipElement = newclass(GuiTooltip,function(base,...)
|
|
GuiTooltip.init(base,...)
|
|
base.classname = "HMGuiTooltip"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create tooltip
|
|
---@return table
|
|
function GuiTooltipElement:create()
|
|
local tooltip = self._super.create(self)
|
|
local element = self.m_element
|
|
if element ~= nil then
|
|
local type = element.type
|
|
if type == nil then type = "entity" end
|
|
if type == "resource" or type == "energy" then type = "entity" end
|
|
if type == "rocket" then type = "item" end
|
|
if type == "recipe-burnt" then type = "recipe" end
|
|
if type == "boiler" then type = "fluid" end
|
|
local element_icon = GuiElement.getSprite(type, element.name, "[%s=%s]")
|
|
table.insert(tooltip, {"", "\n", element_icon, " ", helmod_tag.color.gold, helmod_tag.font.default_bold, Player.getLocalisedName({type=type, name=element.name}), helmod_tag.font.close, helmod_tag.color.close})
|
|
---quantity
|
|
local total_count = Format.formatNumberElement(element.count)
|
|
if element.limit_count ~= nil then
|
|
local limit_count = Format.formatNumberElement(element.limit_count)
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.quantity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, limit_count or 0, "/", total_count, helmod_tag.font.close})
|
|
else
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.quantity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, total_count or 0, helmod_tag.font.close})
|
|
end
|
|
|
|
self:appendProductInfo(tooltip, element);
|
|
self:appendEnergyConsumption(tooltip, element);
|
|
self:appendEffectInfo(tooltip, element);
|
|
self:appendFlow(tooltip, element);
|
|
self:appendLogistic(tooltip, element);
|
|
self:appendControlInfo(tooltip, element);
|
|
self:appendDebug(tooltip, element)
|
|
|
|
end
|
|
return tooltip
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiTooltipEnergy
|
|
GuiTooltipEnergy = newclass(GuiTooltip,function(base,...)
|
|
GuiTooltip.init(base,...)
|
|
base.classname = "HMGuiTooltip"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create tooltip
|
|
---@return table
|
|
function GuiTooltipEnergy:create()
|
|
local tooltip = self._super.create(self)
|
|
local element = self.m_element
|
|
if element ~= nil then
|
|
local type = element.type
|
|
if type == nil then type = "entity" end
|
|
if element == "resource" then type = "entity" end
|
|
local element_icon = GuiElement.getSprite(type, element.name, "[%s=%s]")
|
|
if defines.sprite_tooltips[element.name] ~= nil then
|
|
local sprite = GuiElement.getSprite(defines.sprite_tooltips[element.name])
|
|
element_icon = string.format("[img=%s]", sprite)
|
|
end
|
|
table.insert(tooltip, {"", "\n", element_icon, " ", helmod_tag.color.gold, helmod_tag.font.default_bold, Player.getLocalisedName({type=type, name=element.name}), helmod_tag.font.close, helmod_tag.color.close})
|
|
---quantity
|
|
local total_count = Format.formatNumberKilo(element.count, "J")
|
|
if element.limit_count ~= nil then
|
|
local limit_count = Format.formatNumberElement(element.limit_count)
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.quantity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, limit_count or 0, "/", total_count, helmod_tag.font.close})
|
|
else
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.quantity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, total_count or 0, helmod_tag.font.close})
|
|
end
|
|
|
|
self:appendEnergyConsumption(tooltip, element);
|
|
self:appendDebug(tooltip, element)
|
|
end
|
|
return tooltip
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiTooltipFactory
|
|
GuiTooltipFactory = newclass(GuiTooltip,function(base,...)
|
|
GuiTooltip.init(base,...)
|
|
base.classname = "HMGuiTooltip"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create tooltip
|
|
---@return table
|
|
function GuiTooltipFactory:create()
|
|
local tooltip = self._super.create(self)
|
|
if self.m_element then
|
|
GuiTooltipFactory.AppendFactory(tooltip, self.m_element)
|
|
end
|
|
return tooltip
|
|
end
|
|
|
|
function GuiTooltipFactory.AppendFactory(tooltip, element)
|
|
local type = "entity"
|
|
local prototype = EntityPrototype(element)
|
|
local element_sprite = GuiElement.getSprite(type, element.name, "[%s=%s]")
|
|
table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.color.gold, helmod_tag.font.default_bold, prototype:getLocalisedName(), helmod_tag.font.close, helmod_tag.color.close})
|
|
if element.combo then
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_label.beacon-on-factory"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.combo, helmod_tag.font.close})
|
|
end
|
|
if element.per_factory then
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_label.beacon-per-factory"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.per_factory, helmod_tag.font.close})
|
|
end
|
|
if element.per_factory_constant then
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_label.beacon-per-factory-constant"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.per_factory_constant, helmod_tag.font.close})
|
|
end
|
|
local fuel = prototype:getFluel()
|
|
if fuel ~= nil then
|
|
if fuel.temperature then
|
|
table.insert(tooltip, {"", "\n", string.format("[%s=%s] %s °C", fuel.type, fuel.name, fuel.temperature), " ", helmod_tag.color.gold, helmod_tag.font.default_bold, Player.getLocalisedName(fuel), helmod_tag.font.close, helmod_tag.color.close})
|
|
else
|
|
table.insert(tooltip, {"", "\n", string.format("[%s=%s]", fuel.type, fuel.name), " ", helmod_tag.color.gold, helmod_tag.font.default_bold, Player.getLocalisedName(fuel), helmod_tag.font.close, helmod_tag.color.close})
|
|
end
|
|
end
|
|
if element.module_priority then
|
|
for _, module_priority in pairs(element.module_priority) do
|
|
local module_prototype = ItemPrototype(module_priority.name)
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", string.format("[%s=%s]", "item", module_priority.name), " ", helmod_tag.font.default_bold, module_priority.value, " x ", helmod_tag.font.close, " ", helmod_tag.color.gold, module_prototype:getLocalisedName(), helmod_tag.color.close})
|
|
end
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiTooltipBeacons
|
|
GuiTooltipBeacons = newclass(GuiTooltip,function(base,...)
|
|
GuiTooltip.init(base,...)
|
|
base.classname = "HMGuiTooltip"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create tooltip
|
|
---@return table
|
|
function GuiTooltipBeacons:create()
|
|
local tooltip = self._super.create(self)
|
|
if self.m_element then
|
|
for _, beacon in pairs(self.m_element) do
|
|
local beacon_tooltip = {""}
|
|
table.insert(tooltip, beacon_tooltip)
|
|
GuiTooltipFactory.AppendFactory(beacon_tooltip, beacon)
|
|
end
|
|
end
|
|
return tooltip
|
|
end
|
|
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiTooltipEnergyConsumption
|
|
GuiTooltipEnergyConsumption = newclass(GuiTooltip,function(base,...)
|
|
GuiTooltip.init(base,...)
|
|
base.classname = "HMGuiTooltip"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create tooltip
|
|
---@return table
|
|
function GuiTooltipEnergyConsumption:create()
|
|
local tooltip = self._super.create(self)
|
|
if self.m_element then
|
|
local power = Format.formatNumberKilo(self.m_element.energy_total or self.m_element.power, "J")
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.energy-consumption"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, power, helmod_tag.font.close})
|
|
end
|
|
return tooltip
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiTooltipPollution
|
|
GuiTooltipPollution = newclass(GuiTooltip,function(base,...)
|
|
GuiTooltip.init(base,...)
|
|
base.classname = "HMGuiTooltip"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create tooltip
|
|
---@return table
|
|
function GuiTooltipPollution:create()
|
|
local tooltip = self._super.create(self)
|
|
if self.m_element then
|
|
local total_pollution = Format.formatNumberElement(self.m_element.pollution_total)
|
|
local total_flow = Format.formatNumberElement(self.m_element.pollution_total/((self.m_element.time or 1)/60))
|
|
if self.m_element.limit_count ~= nil then
|
|
local limit_flow = Format.formatNumberElement(self.m_element.limit_pollution/((self.m_element.time or 1)/60))
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.pollution"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, total_pollution, helmod_tag.font.close})
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.outflow"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, limit_flow or 0, "/", {"helmod_si.per-minute",total_flow or 0}, helmod_tag.font.close})
|
|
else
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.pollution"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, total_pollution, helmod_tag.font.close})
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.outflow"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, {"helmod_si.per-minute",total_flow or 0}, helmod_tag.font.close})
|
|
end
|
|
end
|
|
return tooltip
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiTooltipBuilding
|
|
GuiTooltipBuilding = newclass(GuiTooltip,function(base,...)
|
|
GuiTooltip.init(base,...)
|
|
base.classname = "HMGuiTooltip"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create tooltip
|
|
---@return table
|
|
function GuiTooltipBuilding:create()
|
|
local tooltip = self._super.create(self)
|
|
if self.m_element then
|
|
local block = self.m_element
|
|
local overflow = false
|
|
if block.summary ~= nil then
|
|
---factories
|
|
for _, element in pairs(block.summary.factories) do
|
|
if #tooltip < 19 then
|
|
local element_sprite = GuiElement.getSprite(element.type, element.name, "[%s=%s]")
|
|
table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.font.default_bold, "x ", element.count, helmod_tag.font.close})
|
|
else
|
|
overflow = true
|
|
end
|
|
end
|
|
|
|
---beacons
|
|
for _, element in pairs(block.summary.beacons) do
|
|
if #tooltip < 19 then
|
|
local element_sprite = GuiElement.getSprite(element.type, element.name, "[%s=%s]")
|
|
table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.font.default_bold, "x ", element.count, helmod_tag.font.close})
|
|
else
|
|
overflow = true
|
|
end
|
|
end
|
|
|
|
for _, element in pairs(block.summary.modules) do
|
|
if #tooltip < 19 then
|
|
local element_sprite = GuiElement.getSprite(element.type, element.name, "[%s=%s]")
|
|
table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.font.default_bold, "x ", element.count, helmod_tag.font.close})
|
|
else
|
|
overflow = true
|
|
end
|
|
end
|
|
if overflow then
|
|
table.insert(tooltip, {"", "\n", "..."})
|
|
end
|
|
end
|
|
end
|
|
return tooltip
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiTooltipBlock
|
|
GuiTooltipBlock = newclass(GuiTooltip,function(base,...)
|
|
GuiTooltip.init(base,...)
|
|
base.classname = "HMGuiTooltip"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create tooltip
|
|
---@return table
|
|
function GuiTooltipBlock:create()
|
|
local tooltip = self._super.create(self)
|
|
if self.m_element then
|
|
local quantity = self.m_element.count
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.quantity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, quantity, helmod_tag.font.close})
|
|
end
|
|
return tooltip
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiTooltipModule
|
|
GuiTooltipModule = newclass(GuiTooltip,function(base,...)
|
|
GuiTooltip.init(base,...)
|
|
base.classname = "HMGuiTooltip"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create tooltip
|
|
---@return table
|
|
function GuiTooltipModule:create()
|
|
local tooltip = self._super.create(self)
|
|
if self.m_element then
|
|
local module_prototype = ItemPrototype(self.m_element.name)
|
|
local module = module_prototype:native()
|
|
if module ~= nil then
|
|
local element_sprite = GuiElement.getSprite(self.m_element.type, self.m_element.name, "[%s=%s]")
|
|
table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.color.gold, helmod_tag.font.default_bold, module_prototype:getLocalisedName(), helmod_tag.font.close, helmod_tag.color.close})
|
|
local bonus_consumption = Player.getModuleBonus(module.name, "consumption")
|
|
local bonus_speed = Player.getModuleBonus(module.name, "speed")
|
|
local bonus_productivity = Player.getModuleBonus(module.name, "productivity")
|
|
local bonus_pollution = Player.getModuleBonus(module.name, "pollution")
|
|
|
|
local bonus_consumption_positive = "+"
|
|
if bonus_consumption <= 0 then bonus_consumption_positive = "" end
|
|
if bonus_consumption ~= 0 then
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"description.consumption-bonus"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, bonus_consumption_positive, Format.formatPercent(bonus_consumption), "%", helmod_tag.font.close})
|
|
end
|
|
local bonus_speed_positive = "+"
|
|
if bonus_speed <= 0 then bonus_speed_positive = "" end
|
|
if bonus_speed ~= 0 then
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"description.speed-bonus"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, bonus_speed_positive, Format.formatPercent(bonus_speed), "%", helmod_tag.font.close})
|
|
end
|
|
local bonus_productivity_positive = "+"
|
|
if bonus_productivity <= 0 then bonus_productivity_positive = "" end
|
|
if bonus_productivity ~= 0 then
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"description.productivity-bonus"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, bonus_productivity_positive, Format.formatPercent(bonus_productivity), "%", helmod_tag.font.close})
|
|
end
|
|
local bonus_pollution_positive = "+"
|
|
if bonus_pollution <= 0 then bonus_pollution_positive = "" end
|
|
if bonus_pollution ~= 0 then
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"description.pollution-bonus"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, bonus_pollution_positive, Format.formatPercent(bonus_pollution), "%", helmod_tag.font.close})
|
|
end
|
|
self:appendControlInfo(tooltip, self.m_element.name);
|
|
end
|
|
end
|
|
return tooltip
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiTooltipPriority
|
|
GuiTooltipPriority = newclass(GuiTooltip,function(base,...)
|
|
GuiTooltip.init(base,...)
|
|
base.classname = "HMGuiTooltip"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create tooltip
|
|
---@return table
|
|
function GuiTooltipPriority:create()
|
|
local tooltip = self._super.create(self)
|
|
if self.m_element then
|
|
for i,priority in pairs(self.m_element) do
|
|
local module_prototype = ItemPrototype(priority.name)
|
|
local element_sprite = GuiElement.getSprite("item", priority.name, "[%s=%s]")
|
|
table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.font.default_bold, priority.value, " x ", helmod_tag.font.close, helmod_tag.color.gold, module_prototype:getLocalisedName(), helmod_tag.color.close})
|
|
end
|
|
end
|
|
return tooltip
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiTooltipPriorities
|
|
GuiTooltipPriorities = newclass(GuiTooltip,function(base,...)
|
|
GuiTooltip.init(base,...)
|
|
base.classname = "HMGuiTooltip"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create tooltip
|
|
---@return table
|
|
function GuiTooltipPriorities:create()
|
|
local tooltip = self._super.create(self)
|
|
if self.m_element then
|
|
for i,factory in pairs(self.m_element) do
|
|
GuiTooltipPriorities.AppendPriority(tooltip, factory)
|
|
end
|
|
end
|
|
return tooltip
|
|
end
|
|
|
|
function GuiTooltipPriorities.AppendPriority(tooltip, element)
|
|
local type = "entity"
|
|
local prototype = EntityPrototype(element)
|
|
local element_sprite = GuiElement.getSprite(type, element.name, "[%s=%s]")
|
|
table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.color.gold, helmod_tag.font.default_bold, prototype:getLocalisedName(), helmod_tag.font.close, helmod_tag.color.close})
|
|
if element.module_priority then
|
|
for _, module_priority in pairs(element.module_priority) do
|
|
local module_prototype = ItemPrototype(module_priority.name)
|
|
table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", string.format("[%s=%s]", "item", module_priority.name), " ", helmod_tag.font.default_bold, module_priority.value, " x ", helmod_tag.font.close, " ", helmod_tag.color.gold, module_prototype:getLocalisedName(), helmod_tag.color.close})
|
|
end
|
|
end
|
|
end
|