z_mirror/EditorExtensions

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

Caleb HeuerOnly restrict testing lab on spaceship, not whole editord620480

hidden-items
4.3 KiB144 linesraw
1local util = require("__EditorExtensions__/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 })
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.controller_type == defines.controllers.editor)
51
52  local in_editor = player.controller_type == defines.controllers.editor
53  local margin = in_editor and editor_gui_width or 0
54  player.gui.top.style.left_margin = margin
55  player.gui.left.style.left_margin = margin
56
57  if global.editor_toggled or not game.tick_paused then
58    return
59  end
60  global.editor_toggled = true
61  if game.tick_paused and settings.global["ee-prevent-initial-pause"].value then
62    game.tick_paused = false
63  end
64end
65
66--- @param e EventData.on_player_created
67local function on_player_created(e)
68  local player = game.get_player(e.player_index)
69  if not player then
70    return
71  end
72
73  util.player_can_use_editor(player)
74
75  if player.mod_settings["ee-auto-alt-mode"].value then
76    local game_view_settings = player.game_view_settings
77    game_view_settings.show_entity_info = true
78    player.game_view_settings = game_view_settings
79  end
80
81  if not util.in_debug_world() and not util.in_testing_scenario() then
82    player.print({ "message.ee-welcome" })
83  end
84end
85
86--- @param e EventData.on_permission_group_edited
87local function on_permission_group_edited(e)
88  if string.find(e.type, "permission") and e.action ~= defines.input_action.toggle_map_editor then
89    return
90  end
91  for _, player in pairs(e.group.players) do
92    util.player_can_use_editor(player)
93  end
94end
95
96--- @class SERemoteViewToggledEventData: EventData
97--- @field player_index uint
98
99local function register_se_events()
100  local se = remote.interfaces["space-exploration"]
101  if not se then
102    return
103  end
104  if se.get_on_remote_view_started_event then
105    script.on_event(remote.call("space-exploration", "get_on_remote_view_started_event"), function(e)
106      --- @cast e SERemoteViewToggledEventData
107      game.get_player(e.player_index).set_shortcut_available("ee-toggle-map-editor", false)
108    end)
109  end
110  if se.get_on_remote_view_stopped_event then
111    script.on_event(remote.call("space-exploration", "get_on_remote_view_stopped_event"), function(e)
112      --- @cast e SERemoteViewToggledEventData
113      util.player_can_use_editor(game.get_player(e.player_index) --[[@as LuaPlayer]])
114    end)
115  end
116end
117
118local editor = {}
119
120editor.on_init = function()
121  for player_index in pairs(game.players) do
122    --- @cast player_index uint
123    on_player_created({ player_index = player_index })
124  end
125  register_se_events()
126end
127
128editor.on_load = register_se_events
129
130editor.on_configuration_changed = function()
131  for _, player in pairs(game.players) do
132    util.player_can_use_editor(player)
133  end
134end
135
136editor.events = {
137  [defines.events.on_lua_shortcut] = on_toggle_editor,
138  [defines.events.on_permission_group_edited] = on_permission_group_edited,
139  [defines.events.on_player_created] = on_player_created,
140  [defines.events.on_player_toggled_map_editor] = on_player_toggled_map_editor,
141  ["ee-toggle-map-editor"] = on_toggle_editor,
142}
143
144return editor