z_mirror/TaskList

git clone https://git.raiguard.me/z_mirror/TaskList

Caleb HeuerUpdate to Factorio 2.1083a3ed

trunk
2.1 KiB73 linesraw
1local flib_table = require("__flib__.table")
2
3local util = {}
4
5--- Create a local flying text with an error sound.
6--- @param player LuaPlayer
7--- @param text LocalisedString
8function util.error_text(player, text)
9  player.create_local_flying_text({ create_at_cursor = true, text = text })
10  player.play_sound({ path = "utility/cannot_build" })
11end
12
13--- Get the force for the player, accounting for Editor Extensions.
14--- @param player LuaPlayer
15--- @return LuaForce
16function util.get_force(player)
17  local interface = remote.interfaces["EditorExtensions"]
18  if interface and interface.get_player_proper_force then
19    return remote.call("EditorExtensions", "get_player_proper_force", player)
20  end
21  local force = player.force --[[@as LuaForce]]
22  if string.find(force.name, "bpsb%-") then
23    local proper_name = string.match(force.name, "bpsb%-sb%-f%-(.*)")
24    if proper_name then
25      force = game.forces[proper_name]
26    end
27  end
28  return force
29end
30
31--- @class GuiIdent
32--- @field name string
33--- @field id string|number
34
35--- Safely retrieve the GUI for the given player.
36--- @param player_index number
37--- @param gui_name string
38--- @return EditTaskGui|TasksGui?
39function util.get_gui(player_index, gui_name)
40  local player_table = storage.players[player_index]
41  if player_table then
42    local Gui = player_table.guis[gui_name]
43    if Gui and Gui.refs.window.valid then
44      return Gui
45    end
46  end
47end
48
49--- Update completed visibility for all subtasks
50--- @param flow LuaGuiElement
51--- @param to_state boolean
52function util.recursive_show_completed(flow, to_state)
53  for _, row in pairs(flow.incompleted.children) do --- @diagnostic disable-line
54    util.recursive_show_completed(row.details_flow.subtasks_flow, to_state)
55  end
56
57  local completed_flow = flow.completed --[[@as LuaGuiElement]]
58  if to_state and #completed_flow.children > 0 then
59    completed_flow.visible = true
60
61    for _, row in pairs(completed_flow.children) do
62      util.recursive_show_completed(row.details_flow.subtasks_flow, to_state)
63    end
64  else
65    completed_flow.visible = false
66  end
67end
68
69function util.remove_task(source, task_id)
70  table.remove(source, flib_table.find(source, task_id))
71end
72
73return util