diff options
author | Paul Oliver <contact@pauloliver.dev> | 2025-04-15 15:20:11 +0200 |
---|---|---|
committer | Paul Oliver <contact@pauloliver.dev> | 2025-04-15 19:16:53 +0200 |
commit | c7dac110f363b2fe2887d44f58550f162e1d9da6 (patch) | |
tree | 1830dd166fda8c24d5e6f32337cbec87d617bb57 | |
parent | d30be13c162a769879cebceacdb4c98c226133fb (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.lua | 134 |
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) |