mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-08 00:39:30 +02:00
174f2c6ccc
Changes: - Fixed an issue where sometimes returning to lobby when finished spectating the crew, would create duplicate character in the lobby.
1295 lines
44 KiB
Lua
1295 lines
44 KiB
Lua
-- This file is part of thesixthroc's Pirate Ship softmod, licensed under GPLv3 and stored at 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 GuiFuel = require 'maps.pirates.gui.fuel'
|
|
local GuiMinimap = require 'maps.pirates.gui.minimap'
|
|
local GuiInfo = require 'maps.pirates.gui.info'
|
|
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 Event = require 'utils.event'
|
|
local CustomEvents = require 'maps.pirates.custom_events'
|
|
local IslandEnum = require 'maps.pirates.surfaces.islands.island_enum'
|
|
local Kraken = require 'maps.pirates.surfaces.sea.kraken'
|
|
|
|
local ComfyGui = require 'utils.gui'
|
|
ComfyGui.set_disabled_tab('Scoreboard', true)
|
|
ComfyGui.set_disabled_tab('Groups', true)
|
|
|
|
|
|
local Public = {}
|
|
-- this seems to be never used
|
|
local enum = {
|
|
PROGRESS = 'progress',
|
|
RUNS = 'runs',
|
|
CREW = 'crew',
|
|
CLASSES = 'classes',
|
|
FUEL = 'fuel',
|
|
MINIMAP = 'minimap',
|
|
INFO = 'info',
|
|
COLOR = 'color',
|
|
}
|
|
Public.enum = enum
|
|
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.fuel = require 'maps.pirates.gui.fuel'
|
|
Public.minimap = require 'maps.pirates.gui.minimap'
|
|
Public.info = require 'maps.pirates.gui.info'
|
|
Public.color = require 'maps.pirates.gui.color'
|
|
|
|
|
|
function Public.update_crew_gui(which_gui)
|
|
if not Public[which_gui] then return end
|
|
|
|
local players = Common.crew_get_crew_members_and_spectators()
|
|
|
|
for _, player in pairs(players) do
|
|
Public[which_gui].full_update(player)
|
|
end
|
|
end
|
|
|
|
function Public.update_crew_progress_gui()
|
|
return Public.update_crew_gui('progress')
|
|
end
|
|
Event.add(CustomEvents.enum['update_crew_progress_gui'], Public.update_crew_progress_gui)
|
|
-- script.raise_event(CustomEvents.enum['update_crew_progress_gui'], {})
|
|
function Public.update_crew_fuel_gui()
|
|
return Public.update_crew_gui('fuel')
|
|
end
|
|
Event.add(CustomEvents.enum['update_crew_fuel_gui'], Public.update_crew_fuel_gui)
|
|
|
|
|
|
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, '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.eta_bool or bools.retreating_bool or bools.leave_anytime_bool then
|
|
flow1.visible = true
|
|
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() > 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.loadingticks
|
|
|
|
flow2.etaframe_label_1.caption = {'pirates.gui_etaframe_arriving_in'}
|
|
flow2.etaframe_label_2.caption = 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'}
|
|
|
|
flow2.etaframe_label_1.caption = {'pirates.gui_etaframe_atsea_waiting'}
|
|
|
|
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() == 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.rocketlaunched) 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.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.rocketsiloenergyconsumed
|
|
local needed = dynamic_data.rocketsiloenergyneeded
|
|
local recent = (dynamic_data.rocketsiloenergyconsumedwithinlasthalfsecond * 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
|
|
|
|
local tooltip = ''
|
|
|
|
if quest_complete and quest_reward then
|
|
tooltip = {'pirates.gui_questframe_complete_tooltip'}
|
|
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.regular_update then GuiProgress.regular_update(player) end --moved to event
|
|
if GuiRuns.full_update then GuiRuns.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 GuiFuel.regular_update then GuiFuel.regular_update(player) end --moved to event
|
|
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/effectivity-module'
|
|
-- button.number = 1
|
|
-- elseif lives == 2 then
|
|
-- button.sprite = 'item/effectivity-module-2'
|
|
-- button.number = 2
|
|
-- elseif lives == 3 then
|
|
-- button.sprite = 'item/effectivity-module-3'
|
|
-- button.number = 3
|
|
-- end
|
|
|
|
flow1 = pirates_flow.fuel_flow
|
|
-- flow1 = pirates_flow.fuel_piratebutton_flow_1
|
|
|
|
local tooltip = {'pirates.fuel_tooltip', 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', memory.overworldx or 0, CoreData.victory_x}
|
|
-- pirates_flow.destination_piratebutton_frame.destination_piratebutton.number = memory.destinationsvisited_indices and #memory.destinationsvisited_indices or 0
|
|
|
|
|
|
--== 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) 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 Roles.player_privilege_level(player) >= Roles.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 Roles.player_privilege_level(player) >= Roles.privilege_levels.CAPTAIN then
|
|
Progression.at_sea_begin_to_set_sail()
|
|
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 GuiRuns.click then GuiRuns.click(event) end
|
|
if GuiCrew.click then GuiCrew.click(event) end
|
|
if GuiClasses.click then GuiClasses.click(event) end
|
|
if GuiFuel.click then GuiFuel.click(event) end
|
|
if GuiMinimap.click then GuiMinimap.click(event) end
|
|
if GuiInfo.click then GuiInfo.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 |