aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Oliver <contact@pauloliver.dev>2025-04-15 15:20:11 +0200
committerPaul Oliver <contact@pauloliver.dev>2025-04-15 19:16:53 +0200
commitc7dac110f363b2fe2887d44f58550f162e1d9da6 (patch)
tree1830dd166fda8c24d5e6f32337cbec87d617bb57
parentd30be13c162a769879cebceacdb4c98c226133fb (diff)
Polish
- Removes unused functions - Uses storage variable to save player position - Clears inventory after every GUI close action - Adds land-mines for minimal defense during game start - Adds event callbacks during game load
-rw-r--r--von-newmann-2/control.lua134
1 files changed, 37 insertions, 97 deletions
diff --git a/von-newmann-2/control.lua b/von-newmann-2/control.lua
index 27baaea..46872d4 100644
--- a/von-newmann-2/control.lua
+++ b/von-newmann-2/control.lua
@@ -21,7 +21,8 @@ local entities = {
{"iron-requester-chest", 50},
{"iron-storage-chest", 50},
{"inserter", 50},
- {"stone-furnace", 50}
+ {"stone-furnace", 50},
+ {"land-mine", 10}
}
}},
{"iron-storage-chest", {y = -2,x = 4}, {}},
@@ -126,45 +127,6 @@ function get_table_size(t)
return count
end
-function create_power_source(entity)
- local powerInterface = entity.surface.create_entity({
- name = "clp-electric-source",
- position = entity.position,
- force = entity.force,
- snap_to_grid = false,
- raise_built = false
- })
-
- local hi = spawn_entity("clp-heat-interface",{y=-3,x=2},entity.position,entity.surface,{},entity.force)
- local hp = spawn_entity("clp-heat-pipe",{y=-4,x=2},entity.position,entity.surface,{},entity.force)
- hi.set_heat_setting{temperature = 31, mode = "at-least"}
- storage.heat_intefaces[entity.unit_number] = {hi,hp}
- storage.power_interfaces[entity.unit_number] = powerInterface
-end
-
-function destroy_power_source(entity)
- local powerInterface = storage.power_interfaces[entity.unit_number]
-
- if powerInterface ~= nil then
- powerInterface.destroy({
- raise_destroy = false
- })
- storage.power_interfaces[entity.unit_number] = nil
- end
-
- local heatInterface = storage.heat_intefaces[entity.unit_number]
-
- if heatInterface ~= nil then
- heatInterface[1].destroy({
- raise_destroy = false
- })
- heatInterface[2].destroy({
- raise_destroy = false
- })
- storage.heat_intefaces[entity.unit_number] = nil
- end
-end
-
local function clear_area(area, surface)
for _, entity in pairs(surface.find_entities_filtered({ area = area, invert = true })) do
if (entity.valid) then
@@ -178,42 +140,6 @@ local function clear_area(area, surface)
return true
end
-function on_deconstruction(event)
- local inventory = event.entity.get_inventory(defines.inventory.cargo_unit) or event.entity.get_inventory(defines.inventory.chest)
-
- if (inventory == nil) then
- do return end
- end
-
- local content = inventory.get_contents()
-
- if (content == nil) then
- do return end
- end
-
- if (inventory.get_item_count("cargo-landing-pad") >= 1 and get_table_size(event.entity.surface.find_entities_filtered({name="cargo-landing-pad"})) == 0) then
- inventory.remove({name="cargo-landing-pad",count=1})
- content = inventory.get_contents()
- inventory.clear()
- local position = event.entity.position
- local surface = event.entity.surface
- local force = event.entity.force
- local area = {{position.x - 5, position.y - 5}, {position.x + 5, position.y + 5}}
- local chart = {{position.x - 50, position.y - 50}, {position.x + 50, position.y + 50}}
- event.entity.destroy()
- force.chart(surface,chart)
- clear_area(area,surface)
- local clp = spawn_entity("cargo-landing-pad",{x=0,y=0},position,surface,{items=content},force)
-
- for _, v in pairs(entities_landing_pad) do
- local name = v[1]
- local pos = v[2]
- local extra = v[3]
- spawn_entity(name, pos, clp.position, surface, extra, force)
- end
- end
-end
-
local function create_roboport(center, surface, player)
for _, v in pairs(entities) do
local name = v[1]
@@ -231,7 +157,10 @@ local function clear_inventory()
for _, pl in pairs(game.players) do
local player = game.get_player(pl.name)
local inventory = player.get_main_inventory()
- inventory.clear()
+
+ if inventory ~= nil then
+ inventory.clear()
+ end
end
end
@@ -291,26 +220,26 @@ local function on_player_changed_position(event)
local player = game.players[event.player_index]
local chunk_size = 32
- if prev_pos[event.player_index] == nil then
- prev_pos[event.player_index] = player.position
+ if storage.prev_pos[event.player_index] == nil then
+ storage.prev_pos[event.player_index] = player.position
end
- --print("x:", player.position.x, "y:", player.position.y, "prev_x:", prev_pos[event.player_index].x, "prev_y:", prev_pos[event.player_index].y)
+ --print("x:", player.position.x, "y:", player.position.y, "prev_x:", storage.prev_pos[event.player_index].x, "prev_y:", storage.prev_pos[event.player_index].y)
- local pred_dim = function(pos, prev_pos)
- local delta = pos - prev_pos
+ local pred_dim = function(pos_dim, prev_pos_dim)
+ local delta = pos_dim - prev_pos_dim
if delta > 0 then
- return pos + chunk_size * 2
+ return pos_dim + chunk_size * 2
elseif delta < 0 then
- return pos - chunk_size * 2
+ return pos_dim - chunk_size * 2
end
- return pos
+ return pos_dim
end
- local pred_x = pred_dim(player.position.x, prev_pos[event.player_index].x)
- local pred_y = pred_dim(player.position.y, prev_pos[event.player_index].y)
+ local pred_x = pred_dim(player.position.x, storage.prev_pos[event.player_index].x)
+ local pred_y = pred_dim(player.position.y, storage.prev_pos[event.player_index].y)
--print("pred_x:", pred_x, "pred_y:", pred_y)
@@ -327,8 +256,8 @@ local function on_player_changed_position(event)
end
if not player.force.is_chunk_visible(get_player_surface(), {to_chunk_coord(pred_x), to_chunk_coord(pred_y)}) then
- -- teleport player to (possibly modified) prev_pos
- player.teleport(prev_pos[event.player_index])
+ -- teleport player to (possibly modified) storage.prev_pos
+ player.teleport(storage.prev_pos[event.player_index])
player.print("Fog of War limit! Drop a radar to extend your reach.", {sound=defines.print_sound.never})
end
@@ -340,7 +269,17 @@ local function on_player_changed_position(event)
end
-- save new player position
- prev_pos[event.player_index] = player.position
+ storage.prev_pos[event.player_index] = player.position
+end
+
+local function clear_inventory_logic()
+ -- I can't prevent a player with a 'nil' character to pick up items from belts or the ground.
+ -- The following just empties the inventory in case an item is picked.
+ -- It's highly recommended to disable the 'F' shorcut in 'Settings -> Controls' when playing with this mod.
+ -- Hopefully in the future I'll find a better way to do this.
+ script.on_event(defines.events.on_picked_up_item, function(event) clear_inventory() end)
+ script.on_event(defines.events.on_gui_closed, function(event) clear_inventory() end)
+ script.on_configuration_changed(clear_inventory)
end
script.on_init(function ()
@@ -349,16 +288,17 @@ script.on_init(function ()
return
end
- prev_pos = {}
+ storage = {
+ prev_pos = {}
+ }
remote.call("freeplay", "set_disable_crashsite", true)
script.on_event(defines.events.on_player_created, on_player_created)
script.on_event(defines.events.on_player_changed_position, on_player_changed_position)
+ clear_inventory_logic()
+end)
- -- I can't prevent a player with a 'nil' character to pick up items from belts or the ground.
- -- The following just empties the inventory in case an item is picked.
- -- It's highly recommended to disable the 'F' shorcut in 'Settings -> Controls' when playing with this mod.
- -- Hopefully in the future I'll find a better way to do this.
- script.on_event(defines.events.on_picked_up_item, function(event) clear_inventory() end)
- script.on_configuration_changed(clear_inventory)
+script.on_load(function ()
+ script.on_event(defines.events.on_player_changed_position, on_player_changed_position)
+ clear_inventory_logic()
end)