From 7c1e998c8648d4349df2e6455d22d46ed7124760 Mon Sep 17 00:00:00 2001 From: Wyrrrd Date: Fri, 20 Mar 2020 12:25:04 +0100 Subject: [PATCH] Fixed surface handling (again) This time keeping performance of original design --- changelog.txt | 5 +++++ control.lua | 33 ++++++++++++++++++--------------- info.json | 2 +- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/changelog.txt b/changelog.txt index f663fe1..473223c 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 0.18.2 +Date: 2020-03-20 + Changes: + - Redesigned surface handling again to be more perfomant +--------------------------------------------------------------------------------------------------- Version: 0.18.1 Date: 2020-03-19 Changes: diff --git a/control.lua b/control.lua index be1a7c0..553b453 100644 --- a/control.lua +++ b/control.lua @@ -2,28 +2,31 @@ --This mod scans the map for gun-turrets and places alerts when turrets are low. script.on_event({defines.events.on_tick}, function (event) + --Every minute the surface is rescanned for ammo-turret type entities. This is stored in the global table. + if event.tick%3600 == 0 or global.turret_entities == nil then + local planet = game.surfaces + for index,_ in pairs(planet) do + global.turret_entities[index] = planet[index].find_entities_filtered{type = "ammo-turret"} + end + end if event.tick%600 == 0 then --Every 10 seconds recheck and give alerts to players for ammo-turret entities on the same force as them. - for index,player in pairs(game.connected_players) do + for _,player in pairs(game.connected_players) do GTA_enabled = player.mod_settings["gun-turret-alerts-enabled"].value player_threshold = player.mod_settings["gun-turret-alerts-threshold"].value - turret_entities = player.surface.find_entities_filtered{type = "ammo-turret"} - if GTA_enabled then - for index2, turret_entity in pairs(turret_entities) do - if turret_entity.valid then + turret_entities = global.turret_entities[player.surface.name] + + if GTA_enabled and turret_entities then + for _,turret_entity in pairs(turret_entities) do + if turret_entity.valid and turret_entity.force == player.force then inv_var = turret_entity.get_inventory(defines.inventory.turret_ammo) if inv_var.is_empty() then - ammo_left = 0 - else - ammo_left = inv_var[1].count - end - if turret_entity.force == player.force then - if ammo_left == 0 then - player.add_custom_alert(turret_entity, {type = "item", name = "piercing-rounds-magazine"}, "Out of ammo", true) - elseif ammo_left < player_threshold then - player.add_custom_alert(turret_entity, {type = "item", name = "firearm-magazine"}, "Ammo low", true) - end + -- no ammo alert + player.add_custom_alert(turret_entity, {type = "item", name = "piercing-rounds-magazine"}, "Out of ammo", true) + elseif inv_var[1].count < player_threshold then + -- low ammo alert + player.add_custom_alert(turret_entity, {type = "item", name = "firearm-magazine"}, "Ammo low", true) end end end diff --git a/info.json b/info.json index 40f5055..40c19f6 100644 --- a/info.json +++ b/info.json @@ -1,6 +1,6 @@ { "name": "Gun_Turret_Alerts", - "version": "0.18.1", + "version": "0.18.2", "title": "Gun_Turret_Alerts", "author": "Wyrrrd", "factorio_version": "0.18",