-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontrol.lua
More file actions
77 lines (66 loc) · 2.54 KB
/
Copy pathcontrol.lua
File metadata and controls
77 lines (66 loc) · 2.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
local max_level = settings.startup["mx-ede-max-level"].value
local function calculate_level(position)
local distance_to_max_level = settings.global["mx-ede-distance-to-max-level"].value
local distance_first_level_offset = settings.global["mx-ede-distance-first-level-offset"].value
local distance = math.sqrt(position.x * position.x + position.y * position.y)
local distance_per_level = distance_to_max_level / (max_level - 1)
local level = (distance - distance_first_level_offset) / distance_per_level + 1
return math.floor(math.min(math.max(level, 1), max_level))
end
local function safe_replace_spawner(spawner)
if prototypes.entity[spawner.name .. "-lv1"] == nil then
return
end
local level = calculate_level(spawner.position)
local name = spawner.name .. "-lv" .. level
local surface = spawner.surface
local position = spawner.position
local force = spawner.force
spawner.destroy()
surface.create_entity {
name = name,
position = position,
force = force,
raise_built = true,
}
end
-- New game or mod installed
script.on_init(function()
-- remote.call("freeplay", "set_created_items", {
-- ["infinity-chest"] = 1,
-- ["rocket-launcher"] = 1,
-- ["explosive-rocket"] = 100,
-- })
for _, surface in pairs(game.surfaces) do
local spawners = surface.find_entities_filtered { force = "enemy", type = "unit-spawner" }
for _, spawner in pairs(spawners) do
safe_replace_spawner(spawner)
end
end
end)
-- New chunk generated
script.on_event(defines.events.on_chunk_generated, function(event)
local spawners = event.surface.find_entities_filtered { area = event.area, force = "enemy", type = "unit-spawner" }
for _, spawner in pairs(spawners) do
safe_replace_spawner(spawner)
end
end)
-- Another mod created a new spawner
script.on_event(defines.events.script_raised_built, function(event)
if event.entity.type == "unit-spawner" then
safe_replace_spawner(event.entity)
end
end, { { filter = "type", type = "unit-spawner" } })
-- Biter expansion
script.on_event(defines.events.on_biter_base_built, function(event)
if event.entity.type == "unit-spawner" then
safe_replace_spawner(event.entity)
end
end)
-- Trigger effect (e.g. captive biter spawner died)
-- TODO: Preserve 'protected' status.
script.on_event(defines.events.on_trigger_created_entity, function(event)
if event.entity.type == "unit-spawner" then
safe_replace_spawner(event.entity)
end
end)