mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-03-29 21:47:08 +02:00
1366 lines
46 KiB
Lua
1366 lines
46 KiB
Lua
-- This file is part of thesixthroc's Pirate Ship softmod, licensed under GPLv3 and stored at https://github.com/ComfyFactory/ComfyFactorio and https://github.com/danielmartin0/ComfyFactorio-Pirates.
|
|
|
|
local Memory = require('maps.pirates.memory')
|
|
local Math = require('maps.pirates.math')
|
|
local Common = require('maps.pirates.common')
|
|
local CoreData = require('maps.pirates.coredata')
|
|
local Utils = require('maps.pirates.utils_local')
|
|
local GuiEvo = require('maps.pirates.gui.evo')
|
|
local GuiProgress = require('maps.pirates.gui.progress')
|
|
local GuiRuns = require('maps.pirates.gui.runs')
|
|
local GuiCrew = require('maps.pirates.gui.crew')
|
|
local GuiClasses = require('maps.pirates.gui.classes')
|
|
local GuiMinimap = require('maps.pirates.gui.minimap')
|
|
local GuiInfo = require('maps.pirates.gui.info')
|
|
local GuiTreasure = require('maps.pirates.gui.treasure')
|
|
local Quest = require('maps.pirates.quest')
|
|
local Balance = require('maps.pirates.balance')
|
|
local _inspect = require('utils.inspect').inspect
|
|
local GuiCommon = require('maps.pirates.gui.common')
|
|
local Boats = require('maps.pirates.structures.boats.boats')
|
|
local Hold = require('maps.pirates.surfaces.hold')
|
|
local Cabin = require('maps.pirates.surfaces.cabin')
|
|
local Crowsnest = require('maps.pirates.surfaces.crowsnest')
|
|
local Progression = require('maps.pirates.progression')
|
|
local Surfaces = require('maps.pirates.surfaces.surfaces')
|
|
-- local Roles = require 'maps.pirates.roles.roles'
|
|
local Permissions = require('maps.pirates.permissions')
|
|
local IslandEnum = require('maps.pirates.surfaces.islands.island_enum')
|
|
local Kraken = require('maps.pirates.surfaces.sea.kraken')
|
|
local GuiWelcome = require('maps.pirates.gui.welcome')
|
|
local ComfyGui = require('utils.gui')
|
|
local BuriedTreasure = require('maps.pirates.buried_treasure')
|
|
ComfyGui.set_disabled_tab('Scoreboard', true)
|
|
ComfyGui.set_disabled_tab('Groups', true)
|
|
|
|
local Public = {}
|
|
|
|
Public.progress = require('maps.pirates.gui.progress')
|
|
Public.runs = require('maps.pirates.gui.runs')
|
|
Public.crew = require('maps.pirates.gui.crew')
|
|
Public.classes = require('maps.pirates.gui.classes')
|
|
Public.minimap = require('maps.pirates.gui.minimap')
|
|
Public.info = require('maps.pirates.gui.info')
|
|
Public.color = require('maps.pirates.gui.color')
|
|
Public.treasure = require('maps.pirates.gui.treasure')
|
|
local function create_gui(player)
|
|
local flow1, flow2, flow3, flow4
|
|
|
|
flow1 = player.gui.top
|
|
|
|
flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'info_piratebutton')
|
|
flow2.caption = '?'
|
|
flow2.style.font = 'debug'
|
|
flow2.tooltip = { 'pirates.gui_info_main_tooltip' }
|
|
flow2.style.font_color = { r = 1, g = 1, b = 1 }
|
|
flow2.style.hovered_font_color = { r = 1, g = 1, b = 1 }
|
|
flow2.style.clicked_font_color = { r = 1, g = 1, b = 1 }
|
|
flow2.parent.style.left_padding = -6
|
|
|
|
flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'runs_piratebutton', 70)
|
|
flow2.caption = { 'pirates.gui_crews' }
|
|
flow2.tooltip = { 'pirates.gui_crews_main_tooltip' }
|
|
flow2.style.font = 'debug'
|
|
flow2.style.font_color = { r = 1, g = 1, b = 1 }
|
|
flow2.style.hovered_font_color = { r = 1, g = 1, b = 1 }
|
|
flow2.style.clicked_font_color = { r = 1, g = 1, b = 1 }
|
|
flow2.parent.style.width = 67
|
|
flow2.parent.style.left_padding = -6
|
|
|
|
-- optional use of left gui:
|
|
-- flowleft = player.gui.left
|
|
-- flow2 = GuiCommon.flow_add_floating_sprite_button(flowleft, 'crew_piratebutton')
|
|
-- flow2.sprite = 'utility/spawn_flag'
|
|
flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'crew_piratebutton')
|
|
flow2.sprite = 'utility/spawn_flag'
|
|
|
|
flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'classes_piratebutton')
|
|
flow2.sprite = 'item/light-armor'
|
|
|
|
-- flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'lives_piratebutton')
|
|
-- flow2.tooltip = 'Lives\n\nWhen a silo is destroyed before its rocket is launched, you lose a life.\n\nLosing all your lives is one way to lose the game.'
|
|
-- flow2.mouse_button_filter = {'middle'}
|
|
|
|
-- flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'distance_travelled_piratebutton')
|
|
-- flow2.tooltip = 'Leagues travelled in the overworld\n\nCrews progress through the game by travelling in the overworld. Travel ' .. CoreData.victory_x/40 .. ' leagues = victory.'
|
|
-- flow2.sprite = 'item/rail'
|
|
-- flow2.mouse_button_filter = {'middle'}
|
|
|
|
-- flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'destination_piratebutton')
|
|
-- flow2.tooltip = 'Location window\n\nWhere am I?'
|
|
-- flow2.sprite = 'item/landfill'
|
|
|
|
flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'progress_piratebutton')
|
|
flow2.sprite = 'item/rail'
|
|
|
|
flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'evo_piratebutton')
|
|
flow2.sprite = 'entity/small-biter'
|
|
flow2.mouse_button_filter = { 'middle' } --hack to avoid press visual
|
|
flow2.show_percent_for_small_numbers = true --as of factorio v1.1.59, there is a bug in which 1.002 displays as like 1e-2% or something. but after 1.01 it's ok
|
|
|
|
flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'treasure_piratebutton')
|
|
flow2.tooltip = { 'pirates.gui_treasure_main_tooltip' }
|
|
flow2.sprite = 'utility/gps_map_icon'
|
|
|
|
flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'minimap_piratebutton')
|
|
flow2.tooltip = { 'pirates.gui_minimap_main_tooltip' }
|
|
flow2.sprite = 'utility/map'
|
|
|
|
-- flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'shop_piratebutton')
|
|
-- flow2.tooltip = "Coal/Officer's Shop\n\nThe captain and their officers are authorised to spend coal in the shop."
|
|
-- flow2.sprite = 'item/coal'
|
|
|
|
flow2 = flow1.add({
|
|
name = 'fuel_flow',
|
|
type = 'frame',
|
|
})
|
|
flow2.style.minimal_width = 80
|
|
flow2.style.natural_width = 80
|
|
flow2.style.minimal_height = 40
|
|
flow2.style.maximal_height = 40
|
|
flow2.style.left_padding = 4
|
|
flow2.style.right_padding = 4
|
|
flow2.style.top_padding = 3
|
|
|
|
-- interactive version:
|
|
-- flow2 = GuiCommon.flow_add_floating_button(flow1, 'fuel_piratebutton')
|
|
|
|
flow3 = flow2.add({
|
|
name = 'fuel_label_0',
|
|
type = 'label',
|
|
caption = '',
|
|
})
|
|
flow3.style.font = 'default-large-semibold'
|
|
flow3.style.font_color = GuiCommon.bold_font_color
|
|
flow3.caption = { 'pirates.gui_fuel_1' }
|
|
|
|
flow3 = flow2.add({
|
|
name = 'fuel_label_1',
|
|
type = 'label',
|
|
caption = '',
|
|
})
|
|
flow3.style.font = 'default-large'
|
|
flow3.style.font_color = GuiCommon.default_font_color
|
|
-- flow3.style.font_color = GuiCommon.bold_font_color
|
|
-- flow4.style.top_margin = -36
|
|
-- flow4.style.left_margin = -100
|
|
-- flow3.style.horizontal_align = 'center'
|
|
-- flow4.style.left_padding = -5
|
|
flow3.style.left_margin = -2
|
|
|
|
flow3 = flow2.add({
|
|
name = 'fuel_label_2',
|
|
type = 'label',
|
|
caption = '',
|
|
})
|
|
flow3.style.font = 'default-large'
|
|
flow3.style.left_margin = 3
|
|
|
|
flow2 = GuiCommon.flow_add_floating_button(flow1, 'etaframe_piratebutton')
|
|
-- flow2.style.right_padding = -100
|
|
-- flow2.enabled = false
|
|
|
|
flow3 = flow2.add({
|
|
name = 'etaframe_label_1',
|
|
type = 'label',
|
|
})
|
|
flow3.style.font = 'default-large-semibold'
|
|
flow3.style.font_color = GuiCommon.bold_font_color
|
|
|
|
flow3 = flow2.add({
|
|
name = 'etaframe_label_2',
|
|
type = 'label',
|
|
})
|
|
flow3.style.left_margin = 1
|
|
flow3.style.font = 'default-large'
|
|
flow3.style.font_color = GuiCommon.default_font_color
|
|
|
|
flow3 = flow2.add({
|
|
name = 'etaframe_label_3',
|
|
type = 'label',
|
|
})
|
|
flow3.style.left_margin = 3
|
|
flow3.style.font = 'default-large-semibold'
|
|
flow3.style.font_color = GuiCommon.bold_font_color
|
|
|
|
flow3 = flow2.add({ type = 'table', name = 'cost_table', column_count = #CoreData.cost_items })
|
|
for i = 1, #CoreData.cost_items do
|
|
flow4 = flow3.add({ type = 'sprite-button', name = 'cost_' .. i, number = 0 })
|
|
-- flow4.mouse_button_filter = {'middle'}
|
|
flow4.sprite = CoreData.cost_items[i].sprite_name
|
|
flow4.enabled = false
|
|
flow4.style.top_margin = -6
|
|
flow4.style.right_margin = -6
|
|
flow4.style.maximal_height = 38
|
|
flow4.visible = false
|
|
end
|
|
-- and
|
|
flow4 = flow3.add({ type = 'sprite-button', name = 'cost_launch_rocket' })
|
|
-- flow4.mouse_button_filter = {'middle'}
|
|
flow4.sprite = 'item/rocket-silo'
|
|
flow4.enabled = false
|
|
flow4.style.top_margin = -6
|
|
flow4.style.right_margin = -6
|
|
flow4.style.maximal_height = 38
|
|
flow4.visible = false
|
|
|
|
flow3.style.left_margin = -1
|
|
flow3.style.right_margin = -2 --to get to the end of the button frame
|
|
|
|
-- flow2 = flow1.add({
|
|
-- name = 'time_remaining_frame',
|
|
-- type = 'frame',
|
|
-- })
|
|
-- flow2.style.minimal_width = 100
|
|
-- flow2.style.natural_width = 100
|
|
-- flow2.style.minimal_height = 40
|
|
-- flow2.style.maximal_height = 40
|
|
-- flow2.style.left_padding = 4
|
|
-- flow2.style.right_padding = 4
|
|
-- flow2.style.top_padding = 3
|
|
-- flow2.tooltip = tooltip
|
|
|
|
-- flow3 = flow2.add({
|
|
-- name = 'time_remaining_label_1',
|
|
-- type = 'label',
|
|
-- caption = 'Max Time:'
|
|
-- })
|
|
-- flow3.style.font = 'default-large-semibold'
|
|
-- flow3.style.font_color = GuiCommon.bold_font_color
|
|
-- flow3.tooltip = tooltip
|
|
|
|
-- flow3 = flow2.add({
|
|
-- name = 'time_remaining_label_2',
|
|
-- type = 'label',
|
|
-- })
|
|
-- flow3.style.left_margin = 2
|
|
-- flow3.style.font = 'default-large'
|
|
-- flow3.style.font_color = GuiCommon.default_font_color
|
|
-- flow3.tooltip = tooltip
|
|
|
|
-- flow3 = flow2.add({
|
|
-- name = 'rage_table',
|
|
-- type = 'table',
|
|
-- column_count = 5,
|
|
-- })
|
|
-- flow3.style.top_margin = 6
|
|
-- flow3.style.left_margin = 4
|
|
-- for i = 1, 6 do
|
|
-- flow4 = flow3.add({type = 'progressbar', name = 'bar_' .. i, value = 0.5})
|
|
-- flow4.style.width = 18
|
|
-- flow4.style.height = 5
|
|
-- end
|
|
|
|
-- flow2 = flow1.add({
|
|
-- name = 'cost_frame',
|
|
-- type = 'frame',
|
|
-- })
|
|
-- flow2.style.minimal_width = 100
|
|
-- flow2.style.natural_width = 100
|
|
-- flow2.style.minimal_height = 40
|
|
-- flow2.style.maximal_height = 40
|
|
-- flow2.style.left_padding = 4
|
|
-- flow2.style.right_padding = 4
|
|
-- flow2.style.top_padding = 3
|
|
|
|
-- -- flow3 = flow2.add({
|
|
-- -- name = 'cost_label_1',
|
|
-- -- type = 'label',
|
|
-- -- })
|
|
-- -- flow3.style.font = 'default-large-semibold'
|
|
-- -- flow3.style.font_color = GuiCommon.bold_font_color
|
|
|
|
-- -- flow3 = flow2.add({
|
|
-- -- name = 'cost_label_2',
|
|
-- -- type = 'label',
|
|
-- -- })
|
|
-- -- flow3.style.font = 'default-large'
|
|
-- -- flow3.style.font_color = GuiCommon.default_font_color
|
|
|
|
-- flow3 = flow2.add({type = 'table', name = 'cost_table', column_count = 5})
|
|
-- for i = 1, 5 do
|
|
-- flow4 = flow3.add({type = 'sprite-button', name = 'cost_' .. i, number = 0})
|
|
-- -- flow4.mouse_button_filter = {'middle'}
|
|
-- flow4.enabled = false
|
|
-- flow4.style.top_margin = -6
|
|
-- flow4.style.right_margin = -6
|
|
-- flow4.style.maximal_height = 38
|
|
-- flow4.visible = false
|
|
-- end
|
|
-- flow3.style.right_margin = -3
|
|
|
|
flow2 = flow1.add({
|
|
name = 'silo_frame',
|
|
type = 'frame',
|
|
})
|
|
flow2.style.minimal_width = 80
|
|
flow2.style.natural_width = 80
|
|
flow2.style.minimal_height = 40
|
|
flow2.style.maximal_height = 40
|
|
flow2.style.left_padding = 4
|
|
flow2.style.right_padding = 4
|
|
flow2.style.top_padding = 3
|
|
|
|
flow3 = flow2.add({
|
|
name = 'silo_label_1',
|
|
type = 'label',
|
|
})
|
|
flow3.style.font = 'default-large-semibold'
|
|
flow3.style.font_color = GuiCommon.bold_font_color
|
|
flow3.style.right_margin = 2
|
|
|
|
flow3 = flow2.add({
|
|
type = 'progressbar',
|
|
name = 'silo_progressbar',
|
|
value = 0,
|
|
})
|
|
flow3.style.top_margin = 9
|
|
flow3.style.right_margin = 2
|
|
flow3.style.width = 72
|
|
flow3.style.height = 11
|
|
|
|
flow3 = flow2.add({
|
|
name = 'silo_label_2',
|
|
type = 'label',
|
|
})
|
|
flow3.style.font = 'default-large-semibold'
|
|
flow3.style.right_margin = 2
|
|
|
|
flow3 = flow2.add({
|
|
name = 'silo_label_3',
|
|
type = 'label',
|
|
})
|
|
flow3.style.font = 'default-large'
|
|
flow3.style.font_color = GuiCommon.default_font_color
|
|
flow3.style.right_margin = 2
|
|
|
|
-- flow3 = flow2.add({
|
|
-- type = 'sprite',
|
|
-- name = 'silo_charging_indicator',
|
|
-- })
|
|
-- flow3.tooltip = tooltip
|
|
|
|
-- old font color: {r=0.33, g=0.66, b=0.9}
|
|
|
|
flow2 = flow1.add({
|
|
name = 'quest_frame',
|
|
type = 'frame',
|
|
})
|
|
flow2.style.minimal_width = 80
|
|
flow2.style.natural_width = 80
|
|
flow2.style.minimal_height = 40
|
|
flow2.style.maximal_height = 40
|
|
flow2.style.left_padding = 4
|
|
flow2.style.right_padding = 4
|
|
flow2.style.top_padding = 3
|
|
|
|
flow3 = flow2.add({
|
|
name = 'quest_label_1',
|
|
type = 'label',
|
|
})
|
|
flow3.style.font = 'default-large-semibold'
|
|
flow3.style.right_margin = 2
|
|
|
|
flow3 = flow2.add({
|
|
name = 'quest_label_2',
|
|
type = 'label',
|
|
})
|
|
flow3.style.font = 'default-large'
|
|
flow3.style.font_color = Common.default_font_color
|
|
|
|
flow3 = flow2.add({
|
|
name = 'quest_label_3',
|
|
type = 'label',
|
|
})
|
|
-- flow3.style.font = 'default-large'
|
|
flow3.style.font = 'default-large-semibold'
|
|
flow3.style.left_margin = -4
|
|
flow3.style.right_margin = -4
|
|
flow3.style.font_color = Common.default_font_color
|
|
|
|
flow3 = flow2.add({
|
|
name = 'quest_label_4',
|
|
type = 'label',
|
|
})
|
|
flow3.style.font = 'default-large'
|
|
flow3.style.font_color = Common.default_font_color
|
|
|
|
flow2 = flow1.add({
|
|
name = 'covering_line_frame',
|
|
type = 'frame',
|
|
})
|
|
flow2.style.minimal_width = 40
|
|
flow2.style.natural_width = 40
|
|
flow2.style.minimal_height = 40
|
|
flow2.style.maximal_height = 40
|
|
flow2.style.left_padding = 3
|
|
flow2.style.right_padding = 3
|
|
|
|
flow3 = flow2.add({
|
|
name = 'covering_line',
|
|
type = 'line',
|
|
direction = 'horizontal',
|
|
})
|
|
flow3.style.top_margin = 9
|
|
flow3.style.minimal_width = 320
|
|
flow3.style.maximal_width = 320
|
|
|
|
--== SCREEN STUFF
|
|
|
|
-- spontaneous inside view of the hold:
|
|
flow1 = player.gui.screen.add({
|
|
type = 'camera',
|
|
name = 'pirates_spontaneous_camera',
|
|
position = { x = 0, y = 0 },
|
|
})
|
|
flow1.visible = false
|
|
flow1.style.margin = 8
|
|
-- flow2.style.minimal_height = 64
|
|
-- flow2.style.minimal_width = 64
|
|
-- flow2.style.maximal_height = 640
|
|
-- flow2.style.maximal_width = 640
|
|
|
|
-- flow2 = player.gui.screen.add({
|
|
-- name = 'pirates_undock_shortcut_button',
|
|
-- type = 'sprite-button',
|
|
-- enabled = false,
|
|
-- })
|
|
-- flow2.style.minimal_width = 80
|
|
-- flow2.style.natural_width = 80
|
|
-- flow2.style.maximal_width = 150
|
|
-- flow2.style.minimal_height = 40
|
|
-- flow2.style.maximal_height = 40
|
|
-- flow2.style.left_margin = 1
|
|
-- flow2.style.top_margin = 1
|
|
-- flow2.style.left_padding = 4
|
|
-- flow2.style.right_padding = 4
|
|
-- flow2.style.top_padding = 3
|
|
-- flow2.style.font = 'default-large-semibold'
|
|
-- flow2.style.font_color = GuiCommon.default_font_color
|
|
end
|
|
|
|
function Public.process_etaframe_update(player, flow1, bools)
|
|
if not flow1 then
|
|
return
|
|
end
|
|
|
|
local memory = Memory.get_crew_memory()
|
|
local destination = Common.current_destination()
|
|
local dynamic_data = destination.dynamic_data --assumes this always exists
|
|
|
|
local flow2
|
|
|
|
if
|
|
bools.cost_bool
|
|
or bools.atsea_loading_bool
|
|
or bools.atsea_waiting_bool
|
|
or bools.atsea_victorious_bool
|
|
or bools.eta_bool
|
|
or bools.retreating_bool
|
|
or bools.leave_anytime_bool
|
|
then
|
|
flow1.visible = true
|
|
|
|
---@type string|table
|
|
local tooltip = ''
|
|
|
|
flow2 = flow1.etaframe_piratebutton_flow_2
|
|
|
|
flow2.etaframe_label_1.visible = false --start off
|
|
flow2.etaframe_label_2.visible = false --start off
|
|
flow2.etaframe_label_3.visible = false --start off
|
|
flow2.cost_table.visible = false --start off
|
|
|
|
if bools.retreating_bool then
|
|
flow2.etaframe_label_1.visible = true
|
|
flow2.etaframe_label_2.visible = false
|
|
|
|
tooltip = { 'pirates.gui_etaframe_board_warning_tooltip' }
|
|
|
|
flow2.etaframe_label_1.caption = { 'pirates.gui_etaframe_board_warning' }
|
|
elseif bools.eta_bool then
|
|
flow2.etaframe_label_1.visible = true
|
|
flow2.etaframe_label_2.visible = true
|
|
|
|
tooltip = { 'pirates.auto_undock_tooltip' }
|
|
|
|
local passive_eta = dynamic_data.time_remaining
|
|
|
|
flow2.etaframe_label_1.caption = { 'pirates.gui_etaframe_autoundock' }
|
|
flow2.etaframe_label_2.caption = Utils.standard_string_form_of_time_in_seconds(passive_eta)
|
|
elseif bools.atsea_loading_bool then
|
|
if Kraken.get_active_kraken_count(memory.id) > 0 then
|
|
flow2.etaframe_label_1.visible = true
|
|
flow2.etaframe_label_2.visible = false
|
|
|
|
tooltip = { 'pirates.defeat_krakens_tooltip' }
|
|
|
|
flow2.etaframe_label_1.caption = { 'pirates.gui_etaframe_defeat_krakens' }
|
|
else
|
|
flow2.etaframe_label_1.visible = true
|
|
flow2.etaframe_label_2.visible = true
|
|
|
|
tooltip = { 'pirates.atsea_loading_tooltip' }
|
|
|
|
local total = Common.map_loading_ticks_atsea
|
|
if destination.type == Surfaces.enum.DOCK then
|
|
total = Common.map_loading_ticks_atsea_dock
|
|
elseif destination.type == Surfaces.enum.ISLAND and destination.subtype == IslandEnum.enum.MAZE then
|
|
total = Common.map_loading_ticks_atsea_maze
|
|
end
|
|
|
|
local eta_ticks = total + (memory.extra_time_at_sea or 0) - memory.loading_ticks
|
|
|
|
flow2.etaframe_label_1.caption = { 'pirates.gui_etaframe_loading' }
|
|
flow2.etaframe_label_2.caption = 'for ' .. Utils.standard_string_form_of_time_in_seconds(eta_ticks / 60)
|
|
end
|
|
elseif bools.atsea_waiting_bool then
|
|
flow2.etaframe_label_1.visible = true
|
|
flow2.etaframe_label_2.visible = false
|
|
|
|
tooltip = { 'pirates.atsea_waiting_tooltip' }
|
|
|
|
if
|
|
memory.proceed_are_you_sure_data
|
|
and memory.proceed_are_you_sure_data[player.index]
|
|
and memory.proceed_are_you_sure_data[player.index] > game.tick - 60 * 4
|
|
then
|
|
flow2.etaframe_label_1.caption = { 'pirates.gui_etaframe_atsea_waiting_are_you_sure' }
|
|
else
|
|
flow2.etaframe_label_1.caption = { 'pirates.gui_etaframe_atsea_waiting' }
|
|
end
|
|
elseif bools.atsea_victorious_bool then
|
|
flow2.etaframe_label_1.visible = true
|
|
flow2.etaframe_label_2.visible = false
|
|
|
|
tooltip = { 'pirates.atsea_victorious_tooltip' }
|
|
|
|
flow2.etaframe_label_1.caption = { 'pirates.gui_etaframe_atsea_victorious' }
|
|
elseif bools.leave_anytime_bool then
|
|
flow2.etaframe_label_1.visible = true
|
|
flow2.etaframe_label_2.visible = true
|
|
|
|
tooltip = { 'pirates.leave_anytime_tooltip' }
|
|
|
|
flow2.etaframe_label_1.caption = { 'pirates.gui_etaframe_undock' }
|
|
flow2.etaframe_label_2.caption = { 'pirates.gui_etaframe_anytime' }
|
|
end
|
|
|
|
if bools.cost_bool and Kraken.get_active_kraken_count(memory.id) == 0 then
|
|
local costs = destination.static_params.base_cost_to_undock
|
|
local adjusted_costs = Common.time_adjusted_departure_cost(costs)
|
|
|
|
local cost_table = flow2.cost_table
|
|
|
|
flow2.etaframe_label_3.visible = true
|
|
cost_table.visible = true
|
|
|
|
if flow2.etaframe_label_2.visible then
|
|
flow2.etaframe_label_2.caption = flow2.etaframe_label_2.caption .. '.'
|
|
end
|
|
|
|
-- local caption
|
|
if bools.atsea_loading_bool then
|
|
flow2.etaframe_label_3.caption = { 'pirates.gui_etaframe_next_escape_cost' }
|
|
if Boats.need_resources_to_undock(Common.overworldx(), destination.subtype) then
|
|
if bools.cost_includes_rocket_launch_bool then
|
|
tooltip = { 'pirates.resources_needed_tooltip_4_rocketvariant' }
|
|
else
|
|
tooltip = { 'pirates.resources_needed_tooltip_4' }
|
|
end
|
|
elseif destination.static_params.undock_cost_decreases == true then
|
|
if bools.cost_includes_rocket_launch_bool then
|
|
tooltip = { 'pirates.resources_needed_tooltip_1_rocketvariant' }
|
|
else
|
|
tooltip = { 'pirates.resources_needed_tooltip_1' }
|
|
end
|
|
else
|
|
if bools.cost_includes_rocket_launch_bool then
|
|
tooltip = { 'pirates.resources_needed_tooltip_0a_rocketvariant' }
|
|
else
|
|
tooltip = { 'pirates.resources_needed_tooltip_0a' }
|
|
end
|
|
end
|
|
elseif not bools.eta_bool then -- Shown when ship doesn't have auto undock timer
|
|
flow2.etaframe_label_3.visible = false
|
|
flow2.etaframe_label_1.visible = true
|
|
flow2.etaframe_label_1.caption = { 'pirates.gui_etaframe_to_escape_store' }
|
|
|
|
if bools.cost_includes_rocket_launch_bool then
|
|
tooltip = { 'pirates.resources_needed_tooltip_3_rocketvariant' }
|
|
else
|
|
tooltip = { 'pirates.resources_needed_tooltip_3' }
|
|
end
|
|
else -- Shown when at island
|
|
if Boats.need_resources_to_undock(Common.overworldx(), destination.subtype) then
|
|
flow2.etaframe_label_3.visible = false
|
|
|
|
if bools.cost_includes_rocket_launch_bool then
|
|
tooltip = { 'pirates.resources_needed_tooltip_5_rocketvariant' }
|
|
else
|
|
tooltip = { 'pirates.resources_needed_tooltip_5' }
|
|
end
|
|
elseif destination.static_params.undock_cost_decreases == true then
|
|
flow2.etaframe_label_3.caption = { 'pirates.gui_etaframe_or_store' }
|
|
|
|
local adjusted_costs_resources_strings =
|
|
Common.time_adjusted_departure_cost_resources_strings(memory)
|
|
if bools.cost_includes_rocket_launch_bool then
|
|
tooltip = {
|
|
'pirates.resources_needed_tooltip_2_rocketvariant',
|
|
adjusted_costs_resources_strings[1],
|
|
adjusted_costs_resources_strings[2],
|
|
}
|
|
else
|
|
--@Future reference: localisation handling
|
|
tooltip = {
|
|
'pirates.resources_needed_tooltip_2',
|
|
adjusted_costs_resources_strings[1],
|
|
adjusted_costs_resources_strings[2],
|
|
}
|
|
end
|
|
else
|
|
if bools.cost_includes_rocket_launch_bool then
|
|
tooltip = { 'pirates.resources_needed_tooltip_3_rocketvariant' }
|
|
else
|
|
tooltip = { 'pirates.resources_needed_tooltip_3' }
|
|
end
|
|
end
|
|
end
|
|
|
|
for i = 1, #CoreData.cost_items do
|
|
local item_name = CoreData.cost_items[i].name
|
|
|
|
if adjusted_costs[item_name] and cost_table['cost_' .. i] then
|
|
local stored = (memory.boat.stored_resources and memory.boat.stored_resources[item_name]) or 0
|
|
if bools.atsea_loading_bool then
|
|
cost_table['cost_' .. i].number = adjusted_costs[item_name]
|
|
else --subtract off the amount we've stored
|
|
cost_table['cost_' .. i].number = Math.max(adjusted_costs[item_name] - stored, 0)
|
|
end
|
|
cost_table['cost_' .. i].tooltip = CoreData.cost_items[i].display_name
|
|
cost_table['cost_' .. i].visible = true
|
|
else
|
|
cost_table['cost_' .. i].visible = false
|
|
end
|
|
end
|
|
|
|
if adjusted_costs['launch_rocket'] and cost_table['cost_launch_rocket'] then
|
|
if bools.atsea_loading_bool or not dynamic_data.rocket_launched then
|
|
cost_table['cost_launch_rocket'].number = 1
|
|
else
|
|
cost_table['cost_launch_rocket'].number = 0
|
|
end
|
|
cost_table['cost_launch_rocket'].tooltip = { 'pirates.gui_etaframe_rocket_requirement_tooltip' }
|
|
cost_table['cost_launch_rocket'].visible = true
|
|
else
|
|
cost_table['cost_launch_rocket'].visible = false
|
|
end
|
|
end
|
|
|
|
flow1.etaframe_piratebutton.tooltip = tooltip
|
|
flow2.tooltip = tooltip
|
|
|
|
if
|
|
bools.captain_bool
|
|
and not bools.retreating_bool
|
|
and (
|
|
bools.leave_anytime_bool
|
|
or bools.atsea_waiting_bool
|
|
or bools.atsea_victorious_bool
|
|
or bools.eta_bool
|
|
or (bools.cost_bool and not bools.atsea_loading_bool)
|
|
)
|
|
then
|
|
flow1.etaframe_piratebutton.mouse_button_filter = { 'left' }
|
|
if
|
|
memory.undock_shortcut_are_you_sure_data
|
|
and memory.undock_shortcut_are_you_sure_data[player.index]
|
|
and memory.undock_shortcut_are_you_sure_data[player.index] > game.tick - 60 * 4
|
|
then
|
|
flow2.etaframe_label_1.visible = true
|
|
flow2.etaframe_label_1.caption = { 'pirates.gui_etaframe_undock_are_you_sure' }
|
|
flow2.etaframe_label_2.visible = false
|
|
flow2.etaframe_label_3.visible = false
|
|
end
|
|
else
|
|
flow1.etaframe_piratebutton.mouse_button_filter = { 'middle' } --hack to avoid press visual
|
|
end
|
|
else
|
|
flow1.visible = false
|
|
end
|
|
end
|
|
|
|
function Public.process_siloframe_and_questframe_updates(flowsilo, flowquest, bools)
|
|
local destination = Common.current_destination()
|
|
local dynamic_data = destination.dynamic_data --assumes this always exists
|
|
|
|
local active_eta
|
|
local flow1
|
|
|
|
flow1 = flowsilo
|
|
if flow1 then
|
|
if bools.silo_bool then
|
|
flow1.visible = true
|
|
|
|
if bools.charged_bool then
|
|
if bools.launched_bool then
|
|
flow1.silo_progressbar.visible = false
|
|
|
|
flow1.silo_label_2.visible = false
|
|
flow1.silo_label_3.visible = true
|
|
|
|
-- flow1.silo_label_1.caption = string.format('[achievement=there-is-no-spoon]: +%.0f[item=sulfur]', dynamic_data.rocketcoalreward)
|
|
flow1.silo_label_1.caption = { 'pirates.gui_etaframe_launched' }
|
|
-- flow1.silo_label_1.caption = string.format('Launched for %.0f[item=coal] , ' .. Balance.rocket_launch_coin_reward .. '[item=coin]', dynamic_data.rocketcoalreward)
|
|
flow1.silo_label_1.style.font_color = GuiCommon.achieved_font_color
|
|
|
|
local rocket_launch_coal_reward = Balance.rocket_launch_fuel_reward()
|
|
local rocket_launch_coin_reward = Balance.rocket_launch_coin_reward()
|
|
|
|
flow1.silo_label_3.caption = Math.floor(rocket_launch_coal_reward / 100) / 10
|
|
.. 'k[item=coal], '
|
|
.. Math.floor(rocket_launch_coin_reward / 100) / 10
|
|
.. 'k[item=coin]'
|
|
|
|
local tooltip = { 'pirates.gui_etaframe_launched_tooltip' }
|
|
flow1.tooltip = tooltip
|
|
flow1.silo_label_1.tooltip = tooltip
|
|
flow1.silo_label_3.tooltip = tooltip
|
|
else
|
|
local tooltip = { 'pirates.gui_etaframe_launching' }
|
|
flow1.tooltip = tooltip
|
|
flow1.silo_label_1.tooltip = tooltip
|
|
flow1.silo_progressbar.tooltip = tooltip
|
|
|
|
flow1.silo_label_1.caption = { 'pirates.gui_etaframe_charge' }
|
|
flow1.silo_label_1.style.font_color = GuiCommon.bold_font_color
|
|
flow1.silo_label_2.visible = false
|
|
flow1.silo_label_3.visible = false
|
|
flow1.silo_progressbar.visible = true
|
|
|
|
flow1.silo_progressbar.value = 1
|
|
end
|
|
else
|
|
flow1.silo_label_1.caption = { 'pirates.gui_etaframe_charge' }
|
|
flow1.silo_label_1.style.font_color = GuiCommon.bold_font_color
|
|
flow1.silo_label_2.visible = true
|
|
flow1.silo_progressbar.visible = true
|
|
flow1.silo_label_3.visible = false
|
|
|
|
local consumed = dynamic_data.rocket_silo_energy_consumed
|
|
local needed = dynamic_data.rocket_silo_energy_needed
|
|
local recent = (dynamic_data.rocket_silo_energy_consumed_within_last_half_second * 2)
|
|
|
|
flow1.silo_progressbar.value = consumed / needed
|
|
|
|
local tooltip = {
|
|
'pirates.gui_etaframe_charge_tooltip',
|
|
string.format('%.1f', Math.floor(consumed / 100000000) / 10),
|
|
string.format('%.1f', Math.floor(needed / 100000000) / 10),
|
|
}
|
|
flow1.tooltip = tooltip
|
|
flow1.silo_label_1.tooltip = tooltip
|
|
flow1.silo_label_2.tooltip = tooltip
|
|
flow1.silo_progressbar.tooltip = tooltip
|
|
|
|
if recent ~= 0 then
|
|
active_eta = (needed - consumed) / recent
|
|
flow1.silo_label_2.caption = Utils.standard_string_form_of_time_in_seconds(active_eta)
|
|
if active_eta < dynamic_data.time_remaining or not bools.eta_bool then
|
|
flow1.silo_label_2.style.font_color = GuiCommon.sufficient_font_color
|
|
else
|
|
flow1.silo_label_2.style.font_color = GuiCommon.insufficient_font_color
|
|
end
|
|
else
|
|
flow1.silo_label_2.caption = '∞'
|
|
flow1.silo_label_2.style.font_color = GuiCommon.insufficient_font_color
|
|
end
|
|
end
|
|
else
|
|
flow1.visible = false
|
|
end
|
|
end
|
|
|
|
flow1 = flowquest
|
|
if flow1 then
|
|
if bools.quest_bool then
|
|
flow1.visible = true
|
|
|
|
local quest_type = dynamic_data.quest_type or nil
|
|
local quest_params = dynamic_data.quest_params or {}
|
|
local quest_reward = dynamic_data.quest_reward or nil
|
|
local quest_progress = dynamic_data.quest_progress or 0
|
|
local quest_progressneeded = dynamic_data.quest_progressneeded or 0
|
|
local quest_complete = dynamic_data.quest_complete or false
|
|
|
|
if quest_type then
|
|
---@type string|table
|
|
local tooltip = ''
|
|
|
|
if quest_complete and quest_reward then
|
|
tooltip = { 'pirates.gui_questframe_complete_tooltip', quest_type }
|
|
flow1.quest_label_1.caption = { 'pirates.gui_questframe' }
|
|
flow1.quest_label_1.style.font_color = GuiCommon.achieved_font_color
|
|
flow1.quest_label_2.visible = true
|
|
flow1.quest_label_3.visible = false
|
|
flow1.quest_label_4.visible = false
|
|
flow1.quest_label_2.caption = quest_reward.display_amount .. ' ' .. quest_reward.display_sprite
|
|
elseif quest_reward then
|
|
if quest_progress < quest_progressneeded then
|
|
flow1.quest_label_1.caption = { 'pirates.gui_questframe' }
|
|
flow1.quest_label_1.style.font_color = GuiCommon.bold_font_color
|
|
flow1.quest_label_2.visible = true
|
|
flow1.quest_label_3.visible = true
|
|
flow1.quest_label_4.visible = true
|
|
-- defaults, to be overwritten:
|
|
flow1.quest_label_2.caption = string.format('%s ', Quest.quest_icons[quest_type])
|
|
flow1.quest_label_3.caption = string.format('%.0f/%.0f', quest_progress, quest_progressneeded)
|
|
flow1.quest_label_3.style.font_color = GuiCommon.insufficient_font_color
|
|
flow1.quest_label_4.caption = string.format(' for %s', quest_reward.display_sprite)
|
|
flow1.quest_label_4.style.font_color = Common.default_font_color
|
|
end
|
|
|
|
if quest_type == Quest.enum.TIME then
|
|
if tooltip == '' then
|
|
tooltip = { 'pirates.gui_questframe_time' }
|
|
end
|
|
|
|
if quest_progress >= 0 then
|
|
flow1.quest_label_3.caption =
|
|
string.format('%.0fm%.0fs', Math.floor(quest_progress / 60), quest_progress % 60)
|
|
if active_eta then
|
|
if active_eta < quest_progress - 35 then --35 is roughly the number of seconds between charge and launch
|
|
flow1.quest_label_3.style.font_color = GuiCommon.sufficient_font_color
|
|
else
|
|
flow1.quest_label_3.style.font_color = GuiCommon.insufficient_font_color
|
|
end
|
|
else
|
|
if bools.charged_bool and quest_progress > 35 then
|
|
flow1.quest_label_3.style.font_color = GuiCommon.sufficient_font_color
|
|
else
|
|
flow1.quest_label_3.style.font_color = GuiCommon.insufficient_font_color
|
|
end
|
|
end
|
|
else
|
|
flow1.quest_label_3.caption = { 'pirates.gui_questframe_fail' }
|
|
flow1.quest_label_3.style.font_color = GuiCommon.insufficient_font_color
|
|
end
|
|
elseif quest_type == Quest.enum.WORMS then
|
|
if tooltip == '' then
|
|
tooltip = { 'pirates.gui_questframe_worms' }
|
|
end
|
|
elseif quest_type == Quest.enum.FIND then
|
|
if tooltip == '' then
|
|
tooltip = { 'pirates.gui_questframe_find' }
|
|
end
|
|
elseif quest_type == Quest.enum.RESOURCEFLOW then
|
|
if tooltip == '' then
|
|
tooltip = { 'pirates.gui_questframe_resourceflow' }
|
|
end
|
|
|
|
-- out of date:
|
|
if quest_progressneeded / 60 % 1 == 0 then
|
|
flow1.quest_label_2.caption = string.format(
|
|
'%s %.1f/%.0f /s',
|
|
'[item=' .. quest_params.item .. ']',
|
|
quest_progress / 60,
|
|
quest_progressneeded / 60
|
|
)
|
|
flow1.quest_label_3.caption = string.format(' for %s', quest_reward.display_sprite)
|
|
else
|
|
flow1.quest_label_2.caption = string.format(
|
|
'%s %.1f/%.1f /s',
|
|
'[item=' .. quest_params.item .. ']',
|
|
quest_progress / 60,
|
|
quest_progressneeded / 60
|
|
)
|
|
flow1.quest_label_3.caption = string.format(' for %s', quest_reward.display_sprite)
|
|
end
|
|
elseif quest_type == Quest.enum.RESOURCECOUNT then
|
|
if tooltip == '' then
|
|
tooltip = { 'pirates.gui_questframe_resourcecount' }
|
|
end
|
|
|
|
flow1.quest_label_2.caption = string.format('%s ', '[item=' .. quest_params.item .. ']')
|
|
elseif quest_type == Quest.enum.NODAMAGE then
|
|
if tooltip == '' then
|
|
tooltip = { 'pirates.gui_questframe_nodamage' }
|
|
end
|
|
|
|
if
|
|
bools.approaching_bool
|
|
or (
|
|
dynamic_data.rocketsilos
|
|
and dynamic_data.rocketsilos[1]
|
|
and dynamic_data.rocketsilos[1].valid
|
|
and dynamic_data.rocketsilohp == dynamic_data.rocketsilomaxhp
|
|
)
|
|
then
|
|
flow1.quest_label_3.caption = { 'pirates.gui_questframe_ok' }
|
|
flow1.quest_label_3.style.font_color = GuiCommon.sufficient_font_color
|
|
else
|
|
flow1.quest_label_3.caption = { 'pirates.gui_questframe_fail' }
|
|
flow1.quest_label_3.style.font_color = GuiCommon.insufficient_font_color
|
|
end
|
|
elseif quest_type == Quest.enum.FISH then
|
|
if tooltip == '' then
|
|
tooltip = { 'pirates.gui_questframe_fish' }
|
|
end
|
|
elseif quest_type == Quest.enum.COMPILATRON then
|
|
if tooltip == '' then
|
|
tooltip = { 'pirates.gui_questframe_compilatron' }
|
|
end
|
|
end
|
|
end
|
|
|
|
flow1.tooltip = tooltip
|
|
flow1.quest_label_1.tooltip = tooltip
|
|
flow1.quest_label_2.tooltip = tooltip
|
|
flow1.quest_label_3.tooltip = tooltip
|
|
flow1.quest_label_4.tooltip = tooltip
|
|
end
|
|
else
|
|
flow1.visible = false
|
|
end
|
|
end
|
|
end
|
|
|
|
-- local function create_gui_2()
|
|
|
|
-- end
|
|
|
|
-- Event.add(defines.events.on_player_joined_game, create_gui_2)
|
|
|
|
function Public.update_gui(player)
|
|
local memory = Memory.get_crew_memory()
|
|
local destination = Common.current_destination()
|
|
|
|
local flow1, flow2
|
|
|
|
local pirates_flow = player.gui.top
|
|
|
|
if not pirates_flow.info_piratebutton_frame then
|
|
create_gui(player)
|
|
end
|
|
|
|
flow1 = pirates_flow.crew_piratebutton_frame.crew_piratebutton
|
|
|
|
if Common.is_id_valid(memory.id) then
|
|
flow1.tooltip = { 'pirates.gui_crew_tooltip_1' }
|
|
flow1.mouse_button_filter = { 'left', 'right' }
|
|
else
|
|
flow1.tooltip = { 'pirates.gui_crew_tooltip_2' }
|
|
flow1.mouse_button_filter = { 'middle' } --hack to avoid press visual
|
|
if player.gui.screen['crew_piratewindow'] then
|
|
player.gui.screen['crew_piratewindow'].destroy()
|
|
end
|
|
end
|
|
|
|
flow1 = pirates_flow.classes_piratebutton_frame.classes_piratebutton
|
|
|
|
if Common.is_id_valid(memory.id) then
|
|
flow1.tooltip = { 'pirates.gui_classes_tooltip_1' }
|
|
flow1.mouse_button_filter = { 'left', 'right' }
|
|
else
|
|
flow1.tooltip = { 'pirates.gui_classes_tooltip_2' }
|
|
flow1.mouse_button_filter = { 'middle' } --hack to avoid press visual
|
|
if player.gui.screen['classes_piratewindow'] then
|
|
player.gui.screen['classes_piratewindow'].destroy()
|
|
end
|
|
end
|
|
|
|
if GuiEvo.full_update then
|
|
GuiEvo.full_update(player)
|
|
end
|
|
if GuiProgress.full_update then
|
|
GuiProgress.full_update(player)
|
|
end
|
|
if GuiRuns.full_update then
|
|
GuiRuns.full_update(player)
|
|
end
|
|
if GuiTreasure.full_update then
|
|
GuiTreasure.full_update(player)
|
|
end
|
|
if GuiCrew.full_update then
|
|
GuiCrew.full_update(player)
|
|
end
|
|
if GuiClasses.full_update then
|
|
GuiClasses.full_update(player)
|
|
end
|
|
if GuiMinimap.full_update then
|
|
GuiMinimap.full_update(player)
|
|
end
|
|
if GuiInfo.full_update then
|
|
GuiInfo.full_update(player)
|
|
end
|
|
|
|
-- local lives = memory.lives or 1
|
|
-- local button = pirates_flow.lives_piratebutton_frame.lives_piratebutton
|
|
-- if lives == 1 then
|
|
-- button.sprite = 'item/efficiency-module'
|
|
-- button.number = 1
|
|
-- elseif lives == 2 then
|
|
-- button.sprite = 'item/efficiency-module-2'
|
|
-- button.number = 2
|
|
-- elseif lives == 3 then
|
|
-- button.sprite = 'item/efficiency-module-3'
|
|
-- button.number = 3
|
|
-- end
|
|
|
|
flow1 = pirates_flow.fuel_flow
|
|
-- flow1 = pirates_flow.fuel_piratebutton_flow_1
|
|
|
|
local tooltip = { 'pirates.fuel_tooltip', tostring(Math.floor(memory.stored_fuel or 0)) }
|
|
flow1.tooltip = tooltip
|
|
-- flow1.fuel_piratebutton.tooltip = {'pirates.fuel_tooltip', Math.floor(memory.stored_fuel or 0)}
|
|
|
|
flow2 = flow1
|
|
-- flow2 = flow1.fuel_piratebutton_flow_2
|
|
|
|
flow2.fuel_label_1.caption = Utils.bignumber_abbrevform(memory.stored_fuel or 0) .. '[item=coal]'
|
|
flow2.fuel_label_2.caption = Utils.negative_rate_abbrevform(memory.fuel_depletion_rate_memoized or 0)
|
|
local color_scale = Math.clamp(0, 1, -(memory.fuel_depletion_rate_memoized or 0) / 30)
|
|
flow2.fuel_label_2.style.font_color = {
|
|
r = GuiCommon.fuel_color_1.r * (1 - color_scale) + GuiCommon.fuel_color_2.r * color_scale,
|
|
g = GuiCommon.fuel_color_1.g * (1 - color_scale) + GuiCommon.fuel_color_2.g * color_scale,
|
|
b = GuiCommon.fuel_color_1.b * (1 - color_scale) + GuiCommon.fuel_color_2.b * color_scale,
|
|
}
|
|
flow2.fuel_label_0.tooltip = tooltip
|
|
flow2.fuel_label_1.tooltip = tooltip
|
|
flow2.fuel_label_2.tooltip = tooltip
|
|
|
|
flow1 = pirates_flow.progress_piratebutton_frame.progress_piratebutton
|
|
|
|
flow1.number = (memory.overworldx or 0)
|
|
flow1.tooltip = { 'pirates.gui_progress_tooltip', tostring(memory.overworldx or 0), tostring(CoreData.victory_x) }
|
|
-- pirates_flow.destination_piratebutton_frame.destination_piratebutton.number = memory.destinationsvisited_indices and #memory.destinationsvisited_indices or 0
|
|
|
|
flow1 = pirates_flow.treasure_piratebutton_frame
|
|
local maps = BuriedTreasure.get_picked_up_treasure_maps()
|
|
flow1.visible = #maps > 0
|
|
|
|
flow2 = flow1.treasure_piratebutton
|
|
flow2.tooltip = { 'pirates.gui_treasure_tooltip', #maps }
|
|
flow2.number = #maps
|
|
|
|
--== State-checking bools ==--
|
|
|
|
-- this is nonsense to temporarily avoid function complexity for luacheck:
|
|
local bools = GuiCommon.player_and_crew_state_bools(player)
|
|
|
|
--== Update Gui ==--
|
|
|
|
flow1 = pirates_flow.fuel_flow
|
|
-- flow1 = pirates_flow.fuel_piratebutton_flow_1
|
|
|
|
if memory.crewstatus == nil then
|
|
flow1.visible = false
|
|
else
|
|
flow1.visible = true
|
|
end
|
|
|
|
flow1 = pirates_flow.etaframe_piratebutton_flow_1
|
|
Public.process_etaframe_update(player, flow1, bools)
|
|
|
|
-- flow1 = pirates_flow.cost_frame
|
|
-- if flow1 then
|
|
-- if bools.cost_bool then
|
|
-- flow1.visible = true
|
|
|
|
-- -- local costs = destination.static_params.base_cost_to_undock
|
|
|
|
-- -- for i = 1, #CoreData.cost_items do
|
|
-- -- local item_name = CoreData.cost_items[i].name
|
|
|
|
-- -- if costs[item_name] then
|
|
-- -- local stored = (memory.boat.stored_resources and memory.boat.stored_resources[item_name]) or 0
|
|
-- -- flow1.cost_table['cost_' .. i].sprite = CoreData.cost_items[i].sprite_name
|
|
-- -- flow1.cost_table['cost_' .. i].number = Math.max(costs[item_name] - stored, 0)
|
|
-- -- flow1.cost_table['cost_' .. i].tooltip = CoreData.cost_items[i].display_name
|
|
-- -- flow1.cost_table['cost_' .. i].visible = true
|
|
-- -- else
|
|
-- -- flow1.cost_table['cost_' .. i].visible = false
|
|
-- -- end
|
|
-- -- end
|
|
|
|
-- -- local total_rage = time_rage + silo_rage
|
|
|
|
-- -- flow1.rage_label_2.caption = total_rage .. '/10'
|
|
-- -- if total_rage <= 4 then
|
|
-- -- flow1.rage_label_2.style.font_color = GuiCommon.rage_font_color_1
|
|
-- -- flow1.rage_label_2.style.font = 'default-large'
|
|
-- -- elseif total_rage <= 7 then
|
|
-- -- flow1.rage_label_2.style.font_color = GuiCommon.rage_font_color_2
|
|
-- -- flow1.rage_label_2.style.font = 'default-large-semibold'
|
|
-- -- else
|
|
-- -- flow1.rage_label_2.style.font_color = GuiCommon.rage_font_color_3
|
|
-- -- flow1.rage_label_2.style.font = 'default-dialog-button'
|
|
-- -- end
|
|
|
|
-- -- -- flow1.rage_table.bar_1.value = time_rage >= 1 and 1 or 0
|
|
-- -- -- flow1.rage_table.bar_2.value = time_rage >= 2 and 1 or 0
|
|
-- -- -- flow1.rage_table.bar_3.value = time_rage >= 3 and 1 or 0
|
|
-- -- -- flow1.rage_table.bar_4.value = time_rage >= 4 and 1 or 0
|
|
-- -- -- flow1.rage_table.bar_5.value = silo_rage >= 1 and 1 or 0
|
|
-- -- -- flow1.rage_table.bar_6.value = silo_rage >= 2 and 1 or 0
|
|
-- else
|
|
-- flow1.visible = false
|
|
-- end
|
|
-- end
|
|
|
|
-- flow1 = player.gui.screen.pirates_undock_shortcut_button
|
|
|
|
-- if flow1 then
|
|
-- flow1.location = GuiCommon.default_window_positions.undock_shortcut_button
|
|
-- if bools.captain_bool and bools.landed_bool and (not memory.captain_acceptance_timer) then
|
|
-- flow1.visible = true
|
|
-- local enabled = Common.query_can_pay_cost_to_leave()
|
|
-- flow1.enabled = enabled
|
|
-- if enabled then
|
|
-- flow1.tooltip = ''
|
|
-- else
|
|
-- flow1.tooltip = 'Store more resources in the captain\'s cabin before leaving.'
|
|
-- end
|
|
-- elseif bools.captain_bool and destination and destination.type and destination.type == Surfaces.enum.DOCK and (not (memory.boat.state and memory.boat.state == Boats.enum_state.LEAVING_DOCK)) then
|
|
-- flow1.visible = true
|
|
-- flow1.enabled = memory.boat and memory.boat.state and memory.boat.state == Boats.enum_state.DOCKED
|
|
-- flow1.tooltip = ''
|
|
-- else
|
|
-- flow1.visible = false
|
|
-- end
|
|
|
|
-- if flow1.visible then
|
|
-- if (not memory.undock_shortcut_are_you_sure_data) then memory.undock_shortcut_are_you_sure_data = {} end
|
|
-- if memory.undock_shortcut_are_you_sure_data[player.index] and memory.undock_shortcut_are_you_sure_data[player.index] > game.tick - 60 * 4 then
|
|
-- flow1.caption = 'Are you sure?'
|
|
-- else
|
|
-- flow1.caption = 'Undock'
|
|
-- end
|
|
-- end
|
|
-- end
|
|
|
|
local flowsilo = pirates_flow.silo_frame
|
|
local flowquest = pirates_flow.quest_frame
|
|
Public.process_siloframe_and_questframe_updates(flowsilo, flowquest, bools)
|
|
|
|
flow1 = pirates_flow.covering_line_frame
|
|
|
|
if flow1 then
|
|
-- if not bools.eta_bool and not bools.retreating_bool and not bools.quest_bool and not bools.silo_bool and not bools.atsea_loading_bool and not bools.leave_anytime_bool and not bools.cost_bool and not bools.approaching_dock_bool and not bools.leaving_dock_bool then
|
|
if
|
|
not (
|
|
bools.eta_bool
|
|
or bools.retreating_bool
|
|
or bools.quest_bool
|
|
or bools.silo_bool
|
|
or bools.atsea_loading_bool
|
|
or bools.leave_anytime_bool
|
|
or bools.cost_bool
|
|
or bools.approaching_dock_bool
|
|
or bools.leaving_dock_bool
|
|
or bools.atsea_sailing_bool
|
|
or bools.atsea_waiting_bool
|
|
or bools.atsea_victorious_bool
|
|
)
|
|
then
|
|
flow1.visible = true
|
|
else
|
|
flow1.visible = false
|
|
end
|
|
end
|
|
|
|
flow1 = pirates_flow.minimap_piratebutton_frame
|
|
|
|
if flow1 then
|
|
if bools.in_hold_bool or bools.in_cabin_bool then
|
|
flow1.visible = true
|
|
else
|
|
flow1.visible = false
|
|
end
|
|
end
|
|
|
|
flow1 = player.gui.screen.pirates_spontaneous_camera
|
|
|
|
if not flow1 then --comfy panel might possibly destroy this, so this puts it back
|
|
flow1 = player.gui.screen.add({
|
|
type = 'camera',
|
|
name = 'pirates_spontaneous_camera',
|
|
position = { x = 0, y = 0 },
|
|
})
|
|
flow1.visible = false
|
|
flow1.style.margin = 8
|
|
end
|
|
|
|
if flow1 then
|
|
flow1.visible = false
|
|
flow1.location = { x = 8, y = 48 }
|
|
if bools.on_deck_standing_near_loco_bool then
|
|
flow1.visible = true
|
|
flow1.surface_index = Hold.get_hold_surface(1).index
|
|
flow1.zoom = 0.182
|
|
flow1.style.minimal_height = 292
|
|
flow1.style.minimal_width = 540
|
|
flow1.position = { x = 0, y = -2 }
|
|
elseif bools.on_deck_standing_near_cabin_bool then
|
|
flow1.visible = true
|
|
flow1.surface_index = Cabin.get_cabin_surface().index
|
|
flow1.zoom = 0.468
|
|
flow1.style.minimal_height = 400
|
|
flow1.style.minimal_width = 280
|
|
flow1.position = { x = 0, y = -1 }
|
|
elseif bools.on_deck_standing_near_crowsnest_bool then
|
|
flow1.visible = true
|
|
flow1.surface_index = Crowsnest.get_crowsnest_surface().index
|
|
flow1.zoom = 0.21
|
|
flow1.style.minimal_height = 384
|
|
flow1.style.minimal_width = 384
|
|
flow1.position = { x = memory.overworldx, y = memory.overworldy }
|
|
elseif bools.in_crowsnest_bool then
|
|
flow1.visible = true
|
|
flow1.surface_index = game.surfaces[memory.boat.surface_name].index
|
|
flow1.zoom = 0.09
|
|
flow1.style.minimal_height = 312
|
|
flow1.style.minimal_width = 312
|
|
|
|
local position = memory.boat.position
|
|
if
|
|
destination
|
|
and destination.type
|
|
and destination.type == Surfaces.enum.ISLAND
|
|
and memory.boat.surface_name
|
|
and memory.boat.surface_name == destination.surface_name
|
|
and destination.static_params
|
|
and destination.static_params.boat_starting_xposition
|
|
then
|
|
-- nicer viewing position:
|
|
position = {
|
|
x = destination.static_params.boat_starting_xposition + 50,
|
|
y = destination.static_params.boat_starting_yposition or 0,
|
|
}
|
|
end
|
|
flow1.position = position
|
|
end
|
|
end
|
|
end
|
|
|
|
-- ATTENTION: Giving same names to GUI elements can cause issues, because click events are dispatched to all GUI windows!
|
|
local function on_gui_click(event)
|
|
if not event then
|
|
return
|
|
end
|
|
if not event.element then
|
|
return
|
|
end
|
|
if not event.element.valid then
|
|
return
|
|
end
|
|
|
|
local player = game.players[event.element.player_index]
|
|
|
|
local crew_id = Common.get_id_from_force_name(player.force.name)
|
|
Memory.set_working_id(crew_id)
|
|
local memory = Memory.get_crew_memory()
|
|
|
|
if event.element.name and event.element.name == 'etaframe_piratebutton' then
|
|
if memory.boat.state == Boats.enum_state.DOCKED or memory.boat.state == Boats.enum_state.LANDED then
|
|
if Permissions.player_privilege_level(player) >= Permissions.privilege_levels.CAPTAIN then
|
|
if not memory.undock_shortcut_are_you_sure_data then
|
|
memory.undock_shortcut_are_you_sure_data = {}
|
|
end
|
|
if
|
|
memory.undock_shortcut_are_you_sure_data[player.index]
|
|
and memory.undock_shortcut_are_you_sure_data[player.index] > game.tick - 60 * 4
|
|
then
|
|
if memory.boat.state == Boats.enum_state.DOCKED then
|
|
Progression.undock_from_dock(true)
|
|
elseif memory.boat.state == Boats.enum_state.LANDED then
|
|
Progression.try_retreat_from_island(player, true)
|
|
end
|
|
else
|
|
memory.undock_shortcut_are_you_sure_data[player.index] = game.tick
|
|
end
|
|
end
|
|
elseif memory.boat.state == Boats.enum_state.ATSEA_WAITING_TO_SAIL then
|
|
if Permissions.player_privilege_level(player) >= Permissions.privilege_levels.CAPTAIN then
|
|
if not memory.proceed_are_you_sure_data then
|
|
memory.proceed_are_you_sure_data = {}
|
|
end
|
|
if
|
|
memory.proceed_are_you_sure_data[player.index]
|
|
and memory.proceed_are_you_sure_data[player.index] > game.tick - 60 * 4
|
|
then
|
|
local destination_index = memory.map_being_loaded_destination_index
|
|
|
|
Progression.progress_to_destination(destination_index)
|
|
else
|
|
memory.proceed_are_you_sure_data[player.index] = game.tick
|
|
end
|
|
end
|
|
elseif memory.boat.state == Boats.enum_state.ATSEA_VICTORIOUS then
|
|
if Permissions.player_privilege_level(player) >= Permissions.privilege_levels.CAPTAIN then
|
|
memory.boat.state = Boats.enum_state.ATSEA_SAILING
|
|
|
|
local force = memory.force
|
|
if not (force and force.valid) then
|
|
return
|
|
end
|
|
if memory.victory_continue_message then
|
|
memory.victory_continue_message = false
|
|
Common.notify_force(force, { 'pirates.crew_continue_on_freeplay' }, CoreData.colors.notify_victory)
|
|
end
|
|
end
|
|
end
|
|
elseif string.sub(event.element.name, -13, -1) and string.sub(event.element.name, -13, -1) == '_piratebutton' then
|
|
local name = string.sub(event.element.name, 1, -14)
|
|
if Public[name] then
|
|
Public[name].toggle_window(player)
|
|
Public[name].full_update(player)
|
|
end
|
|
-- elseif event.element.name == 'fuel_label_1' or event.element.name == 'fuel_label_2' then
|
|
-- Public.fuel.toggle_window(player)
|
|
-- Public.fuel.full_update(player)
|
|
else
|
|
if GuiWelcome.handle_click then
|
|
GuiWelcome.handle_click(event)
|
|
end
|
|
if GuiRuns.click then
|
|
GuiRuns.click(event)
|
|
end
|
|
if GuiCrew.click then
|
|
GuiCrew.click(event)
|
|
end
|
|
if GuiClasses.click then
|
|
GuiClasses.click(event)
|
|
end
|
|
if GuiMinimap.click then
|
|
GuiMinimap.click(event)
|
|
end
|
|
if GuiInfo.click then
|
|
GuiInfo.click(event)
|
|
end
|
|
if GuiTreasure.click then
|
|
GuiTreasure.click(event)
|
|
end
|
|
end
|
|
end
|
|
|
|
local function on_gui_location_changed(event)
|
|
if not event and event.element and event.element.valid then
|
|
return
|
|
end
|
|
|
|
if string.sub(event.element.name, -13, -1) and string.sub(event.element.name, -13, -1) == '_piratewindow' then
|
|
local name = string.sub(event.element.name, 1, -14)
|
|
local player = game.players[event.element.player_index]
|
|
|
|
GuiCommon.update_gui_memory(player, name, 'position', event.element.location)
|
|
end
|
|
end
|
|
|
|
local event = require('utils.event')
|
|
event.add(defines.events.on_gui_click, on_gui_click)
|
|
event.add(defines.events.on_gui_location_changed, on_gui_location_changed)
|
|
|
|
return Public
|