z_mirror/EditorExtensions

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

Patrick 'Quezler' MounierLuadocc4f7679

Quezler/patch-1
3.2 KiB124 linesraw
1local util = require("scripts.util")
2
3--- @param surface LuaSurface
4local function place_power(surface)
5  surface.request_to_generate_chunks({-24, -24}, 0)
6  surface.force_generate_chunk_requests()
7  surface.create_entity({
8    name = "ee-infinity-accumulator-primary-output",
9    position = { -24, -24 },
10    force = game.forces.player,
11    create_build_effect_smoke = false,
12  })
13  surface.create_entity({
14    name = "ee-super-substation",
15    position = { -22, -24 },
16    force = game.forces.player,
17    create_build_effect_smoke = false,
18  })
19end
20
21--- @param surface LuaSurface
22local function setup_surface(surface)
23  if settings.global["ee-generate-debug-world-with-lab-tiles"].value then
24    surface.generate_with_lab_tiles = true
25    surface.show_clouds = false
26    surface.clear(true)
27  else
28    place_power(surface)
29  end
30  surface.freeze_daytime = true
31  surface.daytime = 0
32end
33
34--- @param force LuaForce
35local function setup_force(force)
36  force.max_successful_attempts_per_tick_per_construction_queue = 30
37  force.max_failed_attempts_per_tick_per_construction_queue = 10
38  force.research_all_technologies()
39  if util.in_testing_scenario() then
40    force.rechart()
41  end
42end
43
44--- @param player LuaPlayer
45local function setup_player(player)
46  player.cheat_mode = true
47  local start_in_editor = player.mod_settings["ee-start-in-editor"]
48  if start_in_editor and start_in_editor.value then
49    player.toggle_map_editor()
50  end
51  if util.in_debug_world() then
52    local items = remote.call("freeplay", "get_created_items") --[[@as table<string, uint>]]
53    remote.call("freeplay", "set_created_items", {}) --- @diagnostic disable-line: missing-fields
54    remote.call("freeplay", "set_respawn_items", {}) --- @diagnostic disable-line: missing-fields
55    for name, count in pairs(items) do
56      player.remove_item({ name = name, count = count })
57    end
58  end
59end
60
61--- @param e EventData.on_force_created
62local function on_force_created(e)
63  if not util.in_debug_world() and not util.in_testing_scenario() then
64    return
65  end
66  setup_force(e.force)
67end
68
69--- @param e EventData.on_player_created
70local function on_player_created(e)
71  if not util.in_debug_world() and not util.in_testing_scenario() then
72    return
73  end
74  local player = game.get_player(e.player_index)
75  if player then
76    setup_player(player)
77  end
78end
79
80--- @param e EventData.on_surface_cleared
81local function on_surface_cleared(e)
82  if not util.in_debug_world() then
83    return
84  end
85  local surface = game.get_surface(e.surface_index)
86  if not surface then
87    return
88  end
89  place_power(surface)
90end
91
92local function on_init()
93  if not util.in_debug_world() and not util.in_testing_scenario() then
94    return
95  end
96  if game.tick ~= 0 then
97    return
98  end
99  for _, force in pairs(game.forces) do
100    setup_force(force)
101  end
102  for _, player in pairs(game.players) do
103    setup_player(player)
104  end
105
106  if util.in_debug_world() then
107    local nauvis = game.get_surface("nauvis")
108    if nauvis then
109      setup_surface(nauvis)
110    end
111  end
112end
113
114local debug_world = {}
115
116debug_world.on_init = on_init
117
118debug_world.events = {
119  [defines.events.on_force_created] = on_force_created,
120  [defines.events.on_player_created] = on_player_created,
121  [defines.events.on_surface_cleared] = on_surface_cleared,
122}
123
124return debug_world