1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-10 00:43:27 +02:00
ComfyFactorio/maps/pirates/gui/gui.lua

1201 lines
41 KiB
Lua
Raw Normal View History

2021-10-13 10:21:53 +02:00
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'
2022-03-13 03:44:32 +02:00
local GuiFuel = require 'maps.pirates.gui.fuel'
2021-10-13 10:21:53 +02:00
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'
2022-02-26 20:25:48 +02:00
local Roles = require 'maps.pirates.roles.roles'
2022-03-13 03:44:32 +02:00
local Event = require 'utils.event'
local CustomEvents = require 'maps.pirates.custom_events'
2022-02-26 20:25:48 +02:00
local ComfyPanel = require 'comfy_panel.main'
2021-10-13 10:21:53 +02:00
local Public = {}
2022-03-13 03:44:32 +02:00
local enum = {
PROGRESS = 'progress',
RUNS = 'runs',
CREW = 'crew',
FUEL = 'fuel',
MINIMAP = 'minimap',
INFO = 'info',
COLOR = 'color',
}
Public.enum = enum
2021-10-13 10:21:53 +02:00
Public.progress = require 'maps.pirates.gui.progress'
Public.runs = require 'maps.pirates.gui.runs'
Public.crew = require 'maps.pirates.gui.crew'
2022-03-13 03:44:32 +02:00
Public.fuel = require 'maps.pirates.gui.fuel'
2021-10-13 10:21:53 +02:00
Public.minimap = require 'maps.pirates.gui.minimap'
Public.info = require 'maps.pirates.gui.info'
2022-02-25 02:01:28 +02:00
Public.color = require 'maps.pirates.gui.color'
2021-10-13 10:21:53 +02:00
2022-03-13 03:44:32 +02:00
function Public.update_crew_gui(which_gui)
local players = Common.crew_get_crew_members_and_spectators()
2021-10-13 10:21:53 +02:00
2022-03-13 03:44:32 +02:00
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)
2021-10-13 10:21:53 +02:00
local function create_gui(player)
local flowleft, flow1, flow2, flow3, flow4, tooltip
flow1 = player.gui.top
flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'info_piratebutton')
flow2.caption = '?'
flow2.style.font = 'debug'
flow2.tooltip = 'Notes and updates on Pirate Ship'
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
2022-03-07 11:50:25 +02:00
flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'runs_piratebutton', 70)
2022-03-07 20:41:42 +02:00
flow2.caption = 'Crews'
2022-03-11 00:28:53 +02:00
flow2.tooltip = 'View the ongoing runs, and make proposals for new ones.'
2021-10-13 10:21:53 +02:00
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}
2022-03-07 20:41:42 +02:00
flow2.parent.style.width = 67
2021-10-13 10:21:53 +02:00
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, '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'
2022-02-27 01:33:19 +02:00
flow2.mouse_button_filter = {'middle'} --hack to avoid press visual
2021-10-13 10:21:53 +02:00
flow2.show_percent_for_small_numbers = true
flow2 = GuiCommon.flow_add_floating_sprite_button(flow1, 'minimap_piratebutton')
flow2.tooltip = 'View the outside world.'
flow2.sprite = 'utility/map'
2022-02-24 21:39:03 +02:00
-- 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'
2021-10-13 10:21:53 +02:00
2022-02-26 20:25:48 +02:00
2022-02-24 21:39:03 +02:00
flow2 = GuiCommon.flow_add_floating_button(flow1, 'fuel_piratebutton')
-- flow2.style.right_padding = -100
2021-10-13 10:21:53 +02:00
2022-02-27 01:33:19 +02:00
flow3 = flow2.add({
2022-03-13 12:55:04 +02:00
name = 'fuel_label_0',
2022-02-24 21:39:03 +02:00
type = 'label',
caption = ''
})
2022-02-27 01:33:19 +02:00
flow3.style.font = 'default-large-semibold'
flow3.style.font_color = GuiCommon.bold_font_color
2022-03-13 12:55:04 +02:00
flow3.caption = 'Fuel:'
flow3 = flow2.add({
name = 'fuel_label_1',
type = 'label',
caption = ''
})
flow3.style.font = 'default-large'
flow3.style.font_color = GuiCommon.default_font_color
2022-02-24 21:39:03 +02:00
-- 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
2022-03-13 20:19:59 +02:00
flow3.style.left_margin = -2
2022-02-24 21:39:03 +02:00
2022-02-27 01:33:19 +02:00
flow3 = flow2.add({
2022-02-24 21:39:03 +02:00
name = 'fuel_label_2',
type = 'label',
caption = ''
})
2022-02-27 01:33:19 +02:00
flow3.style.font = 'default-large'
2022-03-13 20:19:59 +02:00
flow3.style.left_margin = 3
2022-02-26 20:25:48 +02:00
2021-10-13 10:21:53 +02:00
2022-02-26 20:25:48 +02:00
flow2 = GuiCommon.flow_add_floating_button(flow1, 'etaframe_piratebutton')
-- flow2.style.right_padding = -100
-- flow2.enabled = false
2022-02-27 01:33:19 +02:00
flow3 = flow2.add({
2022-02-26 20:25:48 +02:00
name = 'etaframe_label_1',
2021-10-13 10:21:53 +02:00
type = 'label',
})
2022-02-27 01:33:19 +02:00
flow3.style.font = 'default-large-semibold'
flow3.style.font_color = GuiCommon.bold_font_color
2021-10-13 10:21:53 +02:00
2022-02-27 01:33:19 +02:00
flow3 = flow2.add({
2022-02-26 20:25:48 +02:00
name = 'etaframe_label_2',
2021-10-13 10:21:53 +02:00
type = 'label',
})
2022-02-27 01:33:19 +02:00
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
2022-02-26 20:25:48 +02:00
2022-03-01 17:57:23 +02:00
flow3 = flow2.add({type = 'table', name = 'cost_table', column_count = #CoreData.cost_items})
for i = 1, #CoreData.cost_items do
2022-02-27 01:33:19 +02:00
flow4 = flow3.add({type = 'sprite-button', name = 'cost_' .. i, number = 0})
-- flow4.mouse_button_filter = {'middle'}
2022-03-04 19:57:58 +02:00
flow4.sprite = CoreData.cost_items[i].sprite_name
2022-02-27 01:33:19 +02:00
flow4.enabled = false
flow4.style.top_margin = -6
flow4.style.right_margin = -6
flow4.style.maximal_height = 38
flow4.visible = false
end
2022-03-04 19:57:58 +02:00
-- 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
2022-02-27 01:33:19 +02:00
flow3.style.left_margin = -1
flow3.style.right_margin = -2 --to get to the end of the button frame
2022-02-26 20:25:48 +02:00
-- 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
2021-10-13 10:21:53 +02:00
-- 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
2022-02-27 01:33:19 +02:00
-- 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
2021-10-13 10:21:53 +02:00
2022-02-27 01:33:19 +02:00
-- -- 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
2021-10-13 10:21:53 +02:00
2022-02-27 01:33:19 +02:00
-- 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
2021-10-13 10:21:53 +02:00
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'
2022-02-27 01:33:19 +02:00
flow3.style.font_color = GuiCommon.bold_font_color
2021-10-13 10:21:53 +02:00
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'
2022-03-09 01:36:03 +02:00
flow3.style.right_margin = 2
flow3 = flow2.add({
name = 'silo_label_3',
type = 'label',
})
flow3.style.font = 'default-large'
2021-10-13 10:21:53 +02:00
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
2022-02-24 21:39:03 +02:00
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
2022-02-27 01:33:19 +02:00
--== SCREEN STUFF
2022-02-24 21:39:03 +02:00
2022-02-27 18:42:25 +02:00
-- 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
2022-02-27 01:33:19 +02:00
2022-02-27 18:42:25 +02:00
-- flow2 = player.gui.screen.add({
2022-02-27 01:33:19 +02:00
-- 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
2021-10-13 10:21:53 +02:00
end
function Public.update_gui(player)
local memory = Memory.get_crew_memory()
local destination = Common.current_destination()
2022-03-13 20:19:59 +02:00
local dynamic_data = destination.dynamic_data --assumes this always exists
2021-10-13 10:21:53 +02:00
local flow1, flow1b, flow2, flow3
local pirates_flow = player.gui.top
if not pirates_flow.info_piratebutton_frame then create_gui(player) end
2022-03-13 20:19:59 +02:00
flow1 = pirates_flow.crew_piratebutton_frame.crew_piratebutton
2021-10-13 10:21:53 +02:00
if memory.id and memory.id ~= 0 then
2022-03-14 23:38:44 +02:00
flow1.tooltip = 'Your Crew\n\nPerform crew actions, such as selecting a class if any are available.'
2022-03-13 20:19:59 +02:00
flow1.mouse_button_filter = {'left','right'}
2021-10-13 10:21:53 +02:00
else
2022-03-13 20:19:59 +02:00
flow1.tooltip = 'Your Crew\n\nYou\'re a free agent, so there\'s nothing to do here.'
flow1.mouse_button_filter = {'middle'} --hack to avoid press visual
2021-10-13 10:21:53 +02:00
if player.gui.screen['crew_piratewindow'] then
player.gui.screen['crew_piratewindow'].destroy()
end
end
2022-03-13 04:09:21 +02:00
GuiEvo.full_update(player)
2022-03-13 03:44:32 +02:00
GuiProgress.regular_update(player) --moved to event
2022-03-13 04:09:21 +02:00
GuiRuns.full_update(player)
GuiCrew.full_update(player)
2022-03-13 03:44:32 +02:00
GuiFuel.regular_update(player)
2022-03-13 04:09:21 +02:00
GuiMinimap.full_update(player)
GuiInfo.full_update(player)
2021-10-13 10:21:53 +02:00
-- 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
2022-03-13 20:19:59 +02:00
flow1 = pirates_flow.fuel_piratebutton_flow_1
flow1.fuel_piratebutton.tooltip = {'pirates.fuel_tooltip', Math.floor(memory.stored_fuel or 0)}
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)
2022-03-13 03:44:32 +02:00
local color_scale = Math.max(Math.min((- (memory.fuel_depletion_rate_memoized or 0))/50, 1),0)
2022-03-13 20:19:59 +02:00
flow2.fuel_label_2.style.font_color = {
2022-02-27 01:33:19 +02:00
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,
}
2022-02-24 21:39:03 +02:00
2022-02-27 01:33:19 +02:00
2022-03-13 20:19:59 +02:00
flow1 = pirates_flow.progress_piratebutton_frame.progress_piratebutton
2022-02-27 01:33:19 +02:00
2022-03-13 20:19:59 +02:00
flow1.number = (memory.overworldx or 0)
flow1.caption = string.format('Progress: %d leagues.\n\nTravel %d leagues to win the game.', memory.overworldx or 0, CoreData.victory_x)
2021-10-13 10:21:53 +02:00
-- pirates_flow.destination_piratebutton_frame.destination_piratebutton.number = memory.destinationsvisited_indices and #memory.destinationsvisited_indices or 0
--== State-checking bools ==--
2022-03-13 03:44:32 +02:00
local in_crowsnest_bool, in_hold_bool, in_cabin_bool, onmap_bool, eta_bool, retreating_bool, approaching_bool, atsea_sailing_bool, landed_bool, quest_bool, silo_bool, charged_bool, launched_bool, captain_bool, atsea_loading_bool, character_on_deck_bool, on_deck_standing_near_loco_bool, on_deck_standing_near_cabin_bool, on_deck_standing_near_crowsnest_bool, cost_bool, cost_includes_rocket_launch, approaching_dock_bool, leaving_dock_bool, leave_anytime_bool
captain_bool = Common.is_captain(player)
2021-10-13 10:21:53 +02:00
2022-03-13 03:44:32 +02:00
in_crowsnest_bool = string.sub(player.surface.name, 9, 17) == 'Crowsnest'
in_hold_bool = string.sub(player.surface.name, 9, 12) == 'Hold'
in_cabin_bool = string.sub(player.surface.name, 9, 13) == 'Cabin'
2021-10-13 10:21:53 +02:00
2022-03-13 12:55:04 +02:00
onmap_bool = destination.surface_name and (player.surface.name == destination.surface_name or (
memory.boat and memory.boat.surface_name == destination.surface_name and (in_crowsnest_bool or in_hold_bool or in_cabin_bool)
))
2022-03-13 20:19:59 +02:00
if destination then
eta_bool = dynamic_data.time_remaining and dynamic_data.time_remaining > 0 and onmap_bool
retreating_bool = memory.boat and memory.boat.state == Boats.enum_state.RETREATING and onmap_bool
approaching_bool = memory.boat and memory.boat.state == Boats.enum_state.APPROACHING
atsea_sailing_bool = memory.boat and memory.boat.state == Boats.enum_state.ATSEA_SAILING
landed_bool = memory.boat and memory.boat.state == Boats.enum_state.LANDED
quest_bool = (dynamic_data.quest_type ~= nil) and onmap_bool
silo_bool = dynamic_data.rocketsilos and dynamic_data.rocketsilos[1] and dynamic_data.rocketsilos[1].valid and onmap_bool
charged_bool = dynamic_data.silocharged
launched_bool = dynamic_data.rocketlaunched
2022-03-13 03:44:32 +02:00
2022-03-14 14:44:30 +02:00
cost_bool = destination.static_params.base_cost_to_undock and (not atsea_sailing_bool) and (not retreating_bool)
cost_includes_rocket_launch = cost_bool and destination.static_params.base_cost_to_undock['launch_rocket']
2022-03-13 03:44:32 +02:00
leave_anytime_bool = (landed_bool and not (eta_bool or cost_bool))
end
2021-10-13 10:21:53 +02:00
2022-03-13 03:44:32 +02:00
if memory.boat then
atsea_loading_bool = memory.boat.state == Boats.enum_state.ATSEA_LOADING_MAP and memory.loadingticks
2021-10-13 10:21:53 +02:00
2022-03-13 03:44:32 +02:00
character_on_deck_bool = player.character and player.character.position and player.surface.name and player.surface.name == memory.boat.surface_name
2021-10-13 10:21:53 +02:00
2022-03-13 03:44:32 +02:00
if character_on_deck_bool then
local BoatData = Boats.get_scope(memory.boat).Data
2021-10-13 10:21:53 +02:00
2022-03-13 03:44:32 +02:00
on_deck_standing_near_loco_bool = Math.distance(player.character.position, Math.vector_sum(memory.boat.position, BoatData.loco_pos)) < 3
on_deck_standing_near_cabin_bool = Math.distance(player.character.position, Math.vector_sum(memory.boat.position, BoatData.cabin_car)) < 2.5
on_deck_standing_near_crowsnest_bool = Math.distance(player.character.position, Math.vector_sum(memory.boat.position, BoatData.crowsnest_center)) < 2.7
end
approaching_dock_bool = destination.type == Surfaces.enum.DOCK and memory.boat.state == Boats.enum_state.APPROACHING
leaving_dock_bool = destination.type == Surfaces.enum.DOCK and memory.boat.state == Boats.enum_state.LEAVING_DOCK
end
2021-10-13 10:21:53 +02:00
--== Update Gui ==--
2022-03-13 20:19:59 +02:00
2022-02-27 01:33:19 +02:00
flow1 = pirates_flow.fuel_piratebutton_flow_1
2022-03-13 20:19:59 +02:00
2022-02-24 21:39:03 +02:00
if memory.crewstatus == nil then
flow1.visible = false
else
flow1.visible = true
end
2021-10-13 10:21:53 +02:00
2022-02-27 01:33:19 +02:00
flow1 = pirates_flow.etaframe_piratebutton_flow_1
2021-10-13 10:21:53 +02:00
2021-10-13 21:14:43 +02:00
if flow1 then
2022-02-27 01:33:19 +02:00
if cost_bool or atsea_loading_bool or eta_bool or retreating_bool or leave_anytime_bool then
2021-10-13 21:14:43 +02:00
flow1.visible = true
2022-02-27 01:33:19 +02:00
local tooltip = ''
2021-10-13 10:21:53 +02:00
2022-02-27 01:33:19 +02:00
flow2 = flow1.etaframe_piratebutton_flow_2
2021-10-13 10:21:53 +02:00
2022-02-27 01:33:19 +02:00
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
2021-10-13 10:21:53 +02:00
2021-10-13 21:14:43 +02:00
if retreating_bool then
2022-02-27 01:33:19 +02:00
flow2.etaframe_label_1.visible = true
flow2.etaframe_label_2.visible = false
2021-10-13 21:14:43 +02:00
2022-02-27 01:33:19 +02:00
tooltip = 'Probably time to board...'
2021-10-13 10:21:53 +02:00
2022-02-27 01:33:19 +02:00
flow2.etaframe_label_1.caption = 'RETURN TO SHIP'
2021-10-13 10:21:53 +02:00
2021-10-13 21:14:43 +02:00
elseif eta_bool then
2022-02-27 01:33:19 +02:00
flow2.etaframe_label_1.visible = true
flow2.etaframe_label_2.visible = true
2021-10-13 21:14:43 +02:00
2022-02-27 01:33:19 +02:00
tooltip = {'pirates.auto_undock_tooltip'}
2021-10-13 21:14:43 +02:00
2022-03-13 20:19:59 +02:00
local passive_eta = dynamic_data.time_remaining
2021-10-13 21:14:43 +02:00
2022-02-27 01:33:19 +02:00
flow2.etaframe_label_1.caption = 'Auto-undock:'
flow2.etaframe_label_2.caption = Utils.standard_string_form_of_time_in_seconds(passive_eta)
2021-10-13 10:21:53 +02:00
2021-10-13 21:14:43 +02:00
elseif atsea_loading_bool then
2022-02-27 01:33:19 +02:00
flow2.etaframe_label_1.visible = true
flow2.etaframe_label_2.visible = true
2021-10-13 21:14:43 +02:00
2022-02-27 01:33:19 +02:00
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
2022-03-04 19:57:58 +02:00
elseif destination.type == Surfaces.enum.ISLAND and destination.subtype == Surfaces.Island.enum.MAZE then
total = Common.map_loading_ticks_atsea_maze
2022-02-27 01:33:19 +02:00
end
2021-10-13 21:14:43 +02:00
2022-02-27 01:33:19 +02:00
local eta_ticks = total + (memory.extra_time_at_sea or 0) - memory.loadingticks
2021-10-13 21:14:43 +02:00
2022-02-27 01:33:19 +02:00
flow2.etaframe_label_1.caption = 'Arriving in'
flow2.etaframe_label_2.caption = Utils.standard_string_form_of_time_in_seconds(eta_ticks / 60)
2021-10-13 21:14:43 +02:00
elseif leave_anytime_bool then
2022-02-27 01:33:19 +02:00
flow2.etaframe_label_1.visible = true
flow2.etaframe_label_2.visible = true
2021-10-13 21:14:43 +02:00
2022-02-27 01:33:19 +02:00
tooltip = {'pirates.leave_anytime_tooltip'}
flow2.etaframe_label_1.caption = 'Undock:'
flow2.etaframe_label_2.caption = 'Anytime'
end
if cost_bool then
2022-03-14 14:44:30 +02:00
local costs = destination.static_params.base_cost_to_undock
local adjusted_costs = Common.time_adjusted_departure_cost(costs)
2022-03-13 20:19:59 +02:00
local cost_table = flow2.cost_table
2022-02-27 01:33:19 +02:00
flow2.etaframe_label_3.visible = true
2022-03-13 20:19:59 +02:00
cost_table.visible = true
2022-02-27 01:33:19 +02:00
if flow2.etaframe_label_2.visible then
flow2.etaframe_label_2.caption = flow2.etaframe_label_2.caption .. '.'
end
local caption
if atsea_loading_bool then
flow2.etaframe_label_3.caption = 'Next escape cost:'
2022-03-04 19:57:58 +02:00
if cost_includes_rocket_launch then
tooltip = {'pirates.resources_needed_tooltip_1_rocketvariant'}
else
tooltip = {'pirates.resources_needed_tooltip_1'}
end
2022-02-27 01:33:19 +02:00
elseif (not eta_bool) then
flow2.etaframe_label_3.visible = false
flow2.etaframe_label_1.visible = true
flow2.etaframe_label_1.caption = 'To escape, store'
2022-03-14 14:44:30 +02:00
2022-03-04 19:57:58 +02:00
if cost_includes_rocket_launch then
tooltip = {'pirates.resources_needed_tooltip_3_rocketvariant'}
else
tooltip = {'pirates.resources_needed_tooltip_3'}
end
2022-02-27 01:33:19 +02:00
else
2022-03-14 14:44:30 +02:00
flow2.etaframe_label_3.caption = 'Or store'
local adjusted_costs_resources_strings = Common.time_adjusted_departure_cost_resources_strings(memory)
2022-03-04 19:57:58 +02:00
if cost_includes_rocket_launch then
2022-03-14 14:44:30 +02:00
tooltip = {'pirates.resources_needed_tooltip_2_rocketvariant', adjusted_costs_resources_strings[1], adjusted_costs_resources_strings[2]}
2022-03-04 19:57:58 +02:00
else
2022-03-14 14:44:30 +02:00
--@Future reference: localisation handling
tooltip = {'pirates.resources_needed_tooltip_2', adjusted_costs_resources_strings[1], adjusted_costs_resources_strings[2]}
2022-03-04 19:57:58 +02:00
end
2022-02-27 01:33:19 +02:00
end
for i = 1, #CoreData.cost_items do
local item_name = CoreData.cost_items[i].name
2021-10-13 21:14:43 +02:00
2022-03-14 14:44:30 +02:00
if adjusted_costs[item_name] and cost_table['cost_' .. i] then
2022-02-27 01:33:19 +02:00
local stored = (memory.boat.stored_resources and memory.boat.stored_resources[item_name]) or 0
if atsea_loading_bool then
2022-03-14 14:44:30 +02:00
cost_table['cost_' .. i].number = adjusted_costs[item_name]
2022-02-27 01:33:19 +02:00
else --subtract off the amount we've stored
2022-03-14 14:44:30 +02:00
cost_table['cost_' .. i].number = Math.max(adjusted_costs[item_name] - stored, 0)
2022-02-27 01:33:19 +02:00
end
2022-03-13 20:19:59 +02:00
cost_table['cost_' .. i].tooltip = CoreData.cost_items[i].display_name
cost_table['cost_' .. i].visible = true
2022-02-27 01:33:19 +02:00
else
2022-03-13 20:19:59 +02:00
cost_table['cost_' .. i].visible = false
2022-02-27 01:33:19 +02:00
end
end
2022-03-04 19:57:58 +02:00
2022-03-14 14:44:30 +02:00
if adjusted_costs['launch_rocket'] and cost_table['cost_launch_rocket'] then
2022-03-13 20:19:59 +02:00
if atsea_loading_bool or (not dynamic_data.rocketlaunched) then
cost_table['cost_launch_rocket'].number = 1
2022-03-04 19:57:58 +02:00
else
2022-03-13 20:19:59 +02:00
cost_table['cost_launch_rocket'].number = 0
2022-03-04 19:57:58 +02:00
end
2022-03-13 20:19:59 +02:00
cost_table['cost_launch_rocket'].tooltip = 'Launch a rocket'
cost_table['cost_launch_rocket'].visible = true
2022-03-04 19:57:58 +02:00
else
2022-03-13 20:19:59 +02:00
cost_table['cost_launch_rocket'].visible = false
2022-03-04 19:57:58 +02:00
end
2022-02-27 01:33:19 +02:00
end
flow1.etaframe_piratebutton.tooltip = tooltip
flow2.tooltip = tooltip
if captain_bool and (not retreating_bool) and (leave_anytime_bool or eta_bool or (cost_bool and (not 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 = '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
2021-10-13 21:14:43 +02:00
end
else
flow1.visible = false
2021-10-13 10:21:53 +02:00
end
end
2022-02-27 01:33:19 +02:00
-- flow1 = pirates_flow.cost_frame
-- if flow1 then
-- if cost_bool then
-- flow1.visible = true
2022-03-14 14:44:30 +02:00
-- -- local costs = destination.static_params.base_cost_to_undock
2022-02-27 01:33:19 +02:00
-- -- 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 captain_bool and landed_bool and (not memory.captain_acceptance_timer) then
-- flow1.visible = true
2022-03-04 19:57:58 +02:00
-- local enabled = Common.query_can_pay_cost_to_leave()
2022-02-27 01:33:19 +02:00
-- flow1.enabled = enabled
-- if enabled then
-- flow1.tooltip = ''
-- else
-- flow1.tooltip = 'Store more resources in the captain\'s cabin before leaving.'
-- end
-- elseif 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
2021-10-13 10:21:53 +02:00
flow1 = pirates_flow.silo_frame
local active_eta
2021-10-13 21:14:43 +02:00
if flow1 then
if silo_bool then
flow1.visible = true
if charged_bool then
if launched_bool then
flow1.silo_progressbar.visible = false
2022-03-09 01:36:03 +02:00
flow1.silo_label_2.visible = false
flow1.silo_label_3.visible = true
2021-10-13 21:14:43 +02:00
2022-03-13 20:19:59 +02:00
-- flow1.silo_label_1.caption = string.format('[achievement=there-is-no-spoon]: +%.0f[item=sulfur]', dynamic_data.rocketcoalreward)
2022-03-13 03:44:32 +02:00
flow1.silo_label_1.caption = string.format('Launched:')
2022-03-13 20:19:59 +02:00
-- flow1.silo_label_1.caption = string.format('Launched for %.0f[item=coal] , ' .. Balance.rocket_launch_coin_reward .. '[item=coin]', dynamic_data.rocketcoalreward)
2021-10-13 21:14:43 +02:00
flow1.silo_label_1.style.font_color = GuiCommon.achieved_font_color
2022-03-09 01:36:03 +02:00
2022-03-13 20:19:59 +02:00
flow1.silo_label_3.caption = Math.floor(dynamic_data.rocketcoalreward/100)/10 .. 'k[item=coal], ' .. Math.floor(Balance.rocket_launch_coin_reward/100)/10 .. 'k[item=coin]'
2022-03-09 01:36:03 +02:00
local tooltip = 'The rocket has launched, and this is the reward.'
flow1.tooltip = tooltip
flow1.silo_label_1.tooltip = tooltip
flow1.silo_label_3.tooltip = tooltip
2021-10-13 21:14:43 +02:00
else
local tooltip = 'The rocket is launching...'
flow1.tooltip = tooltip
flow1.silo_label_1.tooltip = tooltip
flow1.silo_progressbar.tooltip = tooltip
flow1.silo_label_1.caption = 'Charge:'
2022-02-27 01:33:19 +02:00
flow1.silo_label_1.style.font_color = GuiCommon.bold_font_color
2021-10-13 21:14:43 +02:00
flow1.silo_label_2.visible = false
2022-03-09 01:36:03 +02:00
flow1.silo_label_3.visible = false
2021-10-13 21:14:43 +02:00
flow1.silo_progressbar.visible = true
flow1.silo_progressbar.value = 1
end
2021-10-13 10:21:53 +02:00
else
flow1.silo_label_1.caption = 'Charge:'
2022-02-27 01:33:19 +02:00
flow1.silo_label_1.style.font_color = GuiCommon.bold_font_color
2021-10-13 21:14:43 +02:00
flow1.silo_label_2.visible = true
2021-10-13 10:21:53 +02:00
flow1.silo_progressbar.visible = true
2022-03-09 01:36:03 +02:00
flow1.silo_label_3.visible = false
2021-10-13 10:21:53 +02:00
2022-03-13 20:19:59 +02:00
local consumed = dynamic_data.rocketsiloenergyconsumed
local needed = dynamic_data.rocketsiloenergyneeded
local recent = (dynamic_data.rocketsiloenergyconsumedwithinlasthalfsecond * 2)
2021-10-13 21:14:43 +02:00
flow1.silo_progressbar.value = consumed/needed
2022-03-11 12:40:55 +02:00
local tooltip = string.format('Rocket silo charge\n\nCharge the silo to launch a rocket, gaining both doubloons and fuel.\n\nCurrent charge: %.1f/%.1f GJ', Math.floor(consumed / 100000000)/10, Math.floor(needed / 100000000)/10)
2021-10-13 21:14:43 +02:00
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)
2022-03-13 20:19:59 +02:00
if active_eta < dynamic_data.time_remaining or (not eta_bool) then
2021-10-13 21:14:43 +02:00
flow1.silo_label_2.style.font_color = GuiCommon.sufficient_font_color
2022-03-09 01:36:03 +02:00
else
flow1.silo_label_2.style.font_color = GuiCommon.insufficient_font_color
2021-10-13 21:14:43 +02:00
end
2021-10-13 10:21:53 +02:00
else
2021-10-13 21:14:43 +02:00
flow1.silo_label_2.caption = ''
flow1.silo_label_2.style.font_color = GuiCommon.insufficient_font_color
2021-10-13 10:21:53 +02:00
end
end
2021-10-13 21:14:43 +02:00
else
2022-03-09 01:36:03 +02:00
flow1.visible = false
2021-10-13 10:21:53 +02:00
end
end
flow1 = pirates_flow.quest_frame
2021-10-13 21:14:43 +02:00
if flow1 then
if quest_bool then
flow1.visible = true
2022-03-13 20:19:59 +02:00
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
2021-10-13 21:14:43 +02:00
if quest_type then
local tooltip = ''
if quest_complete then
tooltip = 'The quest is complete, and this is the reward.'
2022-03-09 23:39:47 +02:00
flow1.quest_label_1.caption = 'Quest:'
2022-03-13 03:44:32 +02:00
flow1.quest_label_1.style.font_color = GuiCommon.achieved_font_color
2022-03-09 23:39:47 +02:00
flow1.quest_label_2.visible = true
2021-10-13 21:14:43 +02:00
flow1.quest_label_3.visible = false
flow1.quest_label_4.visible = false
2022-03-09 23:39:47 +02:00
flow1.quest_label_2.caption = quest_reward.display_amount .. ' ' .. quest_reward.display_sprite
2022-03-11 18:46:02 +02:00
else
if quest_progress < quest_progressneeded then
flow1.quest_label_1.caption = 'Quest:'
2022-03-13 03:44:32 +02:00
flow1.quest_label_1.style.font_color = GuiCommon.bold_font_color
2022-03-11 18:46:02 +02:00
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 = 'Quest: Time\n\nLaunch a rocket before the countdown completes for a bonus.' 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
2021-10-13 21:14:43 +02:00
else
2022-03-11 18:46:02 +02:00
if 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
2021-10-13 21:14:43 +02:00
end
2021-10-13 10:21:53 +02:00
else
2022-03-11 18:46:02 +02:00
flow1.quest_label_3.caption = string.format('Fail')
flow1.quest_label_3.style.font_color = GuiCommon.insufficient_font_color
end
elseif quest_type == Quest.enum.WORMS then
if tooltip == '' then tooltip = 'Quest: Worms\n\nKill enough worms for a bonus.' end
elseif quest_type == Quest.enum.FIND then
if tooltip == '' then tooltip = 'Quest: Ghosts\n\nFind the ghosts for a bonus.' end
elseif quest_type == Quest.enum.RESOURCEFLOW then
if tooltip == '' then tooltip = 'Quest: Resource Flow\n\nAchieve a production rate of a particular item for a bonus.' 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 = 'Quest: Item Production\n\nProduce a particular number of items for a bonus.' end
flow1.quest_label_2.caption = string.format('%s ', '[item=' .. quest_params.item .. ']')
elseif quest_type == Quest.enum.NODAMAGE then
if tooltip == '' then tooltip = 'Quest: No Damage\n\nLaunch a rocket without the silo taking damage.' end
2022-03-13 20:19:59 +02:00
if (memory.boat and memory.boat.state == Boats.enum_state.APPROACHING) or (dynamic_data.rocketsilos and dynamic_data.rocketsilos[1] and dynamic_data.rocketsilos[1].valid and dynamic_data.rocketsilohp == dynamic_data.rocketsilomaxhp) then
2022-03-11 18:46:02 +02:00
flow1.quest_label_3.caption = string.format('OK')
flow1.quest_label_3.style.font_color = GuiCommon.sufficient_font_color
else
flow1.quest_label_3.caption = string.format('Fail')
flow1.quest_label_3.style.font_color = GuiCommon.insufficient_font_color
2021-10-13 10:21:53 +02:00
end
end
end
2022-03-11 18:46:02 +02:00
2021-10-13 21:14:43 +02:00
flow1.tooltip = tooltip
flow1.quest_label_1.tooltip = tooltip
flow1.quest_label_2.tooltip = tooltip
flow1.quest_label_3.tooltip = tooltip
2022-03-11 18:46:02 +02:00
flow1.quest_label_4.tooltip = tooltip
2021-10-13 10:21:53 +02:00
end
2021-10-13 21:14:43 +02:00
else
flow1.visible = false
2021-10-13 10:21:53 +02:00
end
end
flow1 = pirates_flow.covering_line_frame
2021-10-13 21:14:43 +02:00
if flow1 then
2022-03-14 23:38:44 +02:00
-- if not eta_bool and not retreating_bool and not quest_bool and not silo_bool and not atsea_loading_bool and not leave_anytime_bool and not cost_bool and not approaching_dock_bool and not leaving_dock_bool then
if not eta_bool and not retreating_bool and not quest_bool and not silo_bool and not atsea_loading_bool and not leave_anytime_bool and not cost_bool and not approaching_dock_bool and not leaving_dock_bool and not atsea_sailing_bool then
2021-10-13 21:14:43 +02:00
flow1.visible = true
else
flow1.visible = false
end
2021-10-13 10:21:53 +02:00
end
2022-03-14 23:38:44 +02:00
2021-10-13 21:14:43 +02:00
flow1 = pirates_flow.minimap_piratebutton_frame
2021-10-13 10:21:53 +02:00
2021-10-13 21:14:43 +02:00
if flow1 then
if in_hold_bool then
flow1.visible = true
else
flow1.visible = false
end
end
2021-10-13 10:21:53 +02:00
2022-02-26 20:25:48 +02:00
flow1 = player.gui.screen.pirates_spontaneous_camera
2021-10-13 21:14:43 +02:00
2022-02-27 18:42:25 +02:00
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
2021-10-13 21:14:43 +02:00
if flow1 then
flow1.visible = false
2022-02-27 01:33:19 +02:00
flow1.location = {x = 8, y = 48}
2021-10-13 21:14:43 +02:00
if on_deck_standing_near_loco_bool then
flow1.visible = true
flow1.surface_index = Hold.get_hold_surface(1).index
flow1.zoom = 0.18
flow1.style.minimal_height = 268
flow1.style.minimal_width = 532
flow1.position = {x=0,y=0}
elseif 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 = 416
flow1.style.minimal_width = 260
flow1.position = {x=0,y=-1.3}
elseif 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 in_cabin_bool or 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
2021-10-13 10:21:53 +02:00
end
end
end
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 = tonumber(string.sub(player.force.name, -3, -1)) or nil
Memory.set_working_id(crew_id)
2022-02-27 01:33:19 +02:00
local memory = Memory.get_crew_memory()
2021-10-13 10:21:53 +02:00
2022-02-27 01:33:19 +02:00
if event.element.name and event.element.name == 'etaframe_piratebutton' and (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
2021-10-13 10:21:53 +02:00
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
2022-03-12 13:51:11 +02:00
Progression.undock_from_dock(true)
2022-02-27 01:33:19 +02:00
elseif memory.boat.state == Boats.enum_state.LANDED then
2022-03-14 14:44:30 +02:00
Progression.try_retreat_from_island(player, true)
2021-10-13 10:21:53 +02:00
end
else
memory.undock_shortcut_are_you_sure_data[player.index] = game.tick
end
end
2022-02-27 01:33:19 +02:00
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)
2022-03-13 03:44:32 +02:00
Public[name].full_update(player)
2022-02-27 01:33:19 +02:00
end
-- elseif event.element.name == 'fuel_label_1' or event.element.name == 'fuel_label_2' then
-- Public.fuel.toggle_window(player)
2022-03-13 03:44:32 +02:00
-- Public.fuel.full_update(player)
2021-10-13 10:21:53 +02:00
else
GuiRuns.click(event)
GuiCrew.click(event)
2022-03-13 03:44:32 +02:00
GuiFuel.click(event)
2021-10-13 10:21:53 +02:00
GuiMinimap.click(event)
GuiInfo.click(event)
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
2022-03-13 03:44:32 +02:00
2021-10-13 10:21:53 +02:00
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