z_mirror/EditorExtensions

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

Patrick 'Quezler' MounierMerge branch 'master' into patch-1e65a4b6

Quezler/patch-1
4.2 KiB139 linesraw
1local util = require("scripts.util")
2
3local editor_gui_width = 474
4
5--- @param player LuaPlayer
6--- @return boolean
7local function se_check_in_spaceship(player)
8  local se_interface = remote.interfaces["space-exploration"]
9  if not se_interface or not se_interface.get_surface_type then
10    return false
11  end
12  local surface_type = remote.call("space-exploration", "get_surface_type", { surface_index = player.surface_index }) --- @diagnostic disable-line: missing-fields
13  return surface_type == "spaceship"
14end
15
16--- @param e EventData.CustomInputEvent|EventData.on_lua_shortcut
17local function on_toggle_editor(e)
18  local input = e.prototype_name or e.input_name
19  if input ~= "ee-toggle-map-editor" then
20    return
21  end
22
23  local player = game.get_player(e.player_index)
24  if not player then
25    return
26  end
27
28  local group = player.permission_group
29  if not player.admin or (group and not group.allows_action(defines.input_action.toggle_map_editor)) then
30    player.print({ "message.ee-cannot-use-map-editor" })
31    return
32  end
33
34  local lab_setting = player.mod_settings["ee-testing-lab"].value
35  if lab_setting ~= "off" and se_check_in_spaceship(player) then
36    player.print({ "message.ee-cannot-use-testing-lab-spaceship" })
37    return
38  end
39
40  player.toggle_map_editor()
41end
42
43--- @param e EventData.on_player_toggled_map_editor
44local function on_player_toggled_map_editor(e)
45  local player = game.get_player(e.player_index)
46  if not player then
47    return
48  end
49
50  player.set_shortcut_toggled("ee-toggle-map-editor", player.physical_controller_type == defines.controllers.editor)
51
52  if storage.editor_toggled or not game.tick_paused then
53    return
54  end
55  storage.editor_toggled = true
56  if game.tick_paused and settings.global["ee-prevent-initial-pause"].value then
57    game.tick_paused = false
58  end
59end
60
61--- @param e EventData.on_player_created
62local function on_player_created(e)
63  local player = game.get_player(e.player_index)
64  if not player then
65    return
66  end
67
68  util.player_can_use_editor(player)
69
70  if player.mod_settings["ee-auto-alt-mode"].value then
71    local game_view_settings = player.game_view_settings
72    game_view_settings.show_entity_info = true
73    player.game_view_settings = game_view_settings
74  end
75
76  if not util.in_debug_world() and not util.in_testing_scenario() then
77    player.print({ "message.ee-welcome" })
78  end
79end
80
81--- @param e EventData.on_permission_group_edited
82local function on_permission_group_edited(e)
83  if string.find(e.type, "permission") and e.action ~= defines.input_action.toggle_map_editor then
84    return
85  end
86  for _, player in pairs(e.group.players) do
87    util.player_can_use_editor(player)
88  end
89end
90
91--- @class SERemoteViewToggledEventData: EventData
92--- @field player_index uint
93
94local function register_se_events()
95  local se = remote.interfaces["space-exploration"]
96  if not se then
97    return
98  end
99  if se.get_on_remote_view_started_event then
100    script.on_event(remote.call("space-exploration", "get_on_remote_view_started_event") --[[@as uint]], function(e)
101      --- @cast e SERemoteViewToggledEventData
102      game.get_player(e.player_index).set_shortcut_available("ee-toggle-map-editor", false)
103    end)
104  end
105  if se.get_on_remote_view_stopped_event then
106    script.on_event(remote.call("space-exploration", "get_on_remote_view_stopped_event") --[[@as uint]], function(e)
107      --- @cast e SERemoteViewToggledEventData
108      util.player_can_use_editor(game.get_player(e.player_index) --[[@as LuaPlayer]])
109    end)
110  end
111end
112
113local editor = {}
114
115editor.on_init = function()
116  for player_index in pairs(game.players) do
117    --- @cast player_index uint
118    on_player_created({ player_index = player_index }) --- @diagnostic disable-line: missing-fields
119  end
120  register_se_events()
121end
122
123editor.on_load = register_se_events
124
125editor.on_configuration_changed = function()
126  for _, player in pairs(game.players) do
127    util.player_can_use_editor(player)
128  end
129end
130
131editor.events = {
132  [defines.events.on_lua_shortcut] = on_toggle_editor,
133  [defines.events.on_permission_group_edited] = on_permission_group_edited,
134  [defines.events.on_player_created] = on_player_created,
135  [defines.events.on_player_toggled_map_editor] = on_player_toggled_map_editor,
136  ["ee-toggle-map-editor"] = on_toggle_editor,
137}
138
139return editor