diff --git a/better-air-filtering/changelog.txt b/better-air-filtering/changelog.txt index 7051a70..cadeb91 100644 --- a/better-air-filtering/changelog.txt +++ b/better-air-filtering/changelog.txt @@ -1,4 +1,15 @@ --------------------------------------------------------------------------------------------------- +Version: 0.1.4 +Date: 2019.11.16 + Features: + - Improved performance thanks to Elrood (https://mods.factorio.com/mod/better-air-filtering/discussion/5de458a8b40f56000b3ca43c) + - Setting for update interval (can be changed for better UPS). +--------------------------------------------------------------------------------------------------- +Version: 0.1.3 +Date: 2019.11.16 + Locale: + - EN for pollution filter fuel category. +--------------------------------------------------------------------------------------------------- Version: 0.1.2 Date: 2019.10.12 Features: diff --git a/better-air-filtering/control.lua b/better-air-filtering/control.lua index d2e0fdd..d3c72bb 100644 --- a/better-air-filtering/control.lua +++ b/better-air-filtering/control.lua @@ -2,7 +2,7 @@ -- # Constants # -- ################# -local INTERVAL = 20 +local INTERVAL = settings.global["baf-update-interval"].value @@ -104,45 +104,6 @@ end -- # Update script # -- ##################### ---function updateInserters(event) - --for _, surface in pairs(game.surfaces) do - -- local inserters = surface.find_entities_filtered({type="inserter"}) - -- for _, inserter in pairs(inserters) do - -- updateInserter(inserter) - -- end - --end ---end - ---function updateInserter(inserter) - --game.print(serpent.line(inserter.position)) - --local drop_target = inserter.drop_target - --if drop_target == nil then return end - --local pickup_target = inserter.pickup_target - --if pickup_target == nil then return end - --local burnt_result_inventory = pickup_target.get_burnt_result_inventory() - --if burnt_result_inventory == nil then return end - --if burnt_result_inventory.is_empty() then return end - --if inserter.get_item_count() > 0 then return end - -- - -- - --local contents = burnt_result_inventory.get_contents() - -- - -- - --for item_name, count in pairs (contents) do - -- fuel_item_name = item_name - --end - -- - --if inserter.get_item_count() < 1 then - -- if inserter.held_stack.valid_for_read == false then - -- if pickup_target.get_item_count(fuel_item_name) > 0 then - -- inserter.held_stack.set_stack({name = fuel_item_name, count = 1}) - -- pickup_target.remove_item({name = fuel_item_name, count = 1}) - -- return - -- end - -- end - --end ---end - function absorbPollution(event) -- game.print("insertPollution") @@ -209,7 +170,7 @@ function suctionUpdateChunk(chunkTo, dx, dy) local chunkFrom = getFilteredChunk(chunkTo.surface, chunkTo.x + dx, chunkTo.y + dy) local test = chunkFrom:getTotalSuctionRate(0) local pollution = chunkFrom:get_pollution() - if pollution > 0 then + if pollution > 0.1 then local toPollute = math.min(pollution, totalSuction) local chunksVia = {} for _, step in pairs(stepsToOrigin(dx, dy)) do @@ -270,6 +231,8 @@ end function generateFunctions() local functions = {} + table.insert(functions, function(event) game.print(event.tick) end) + table.insert(functions, absorbPollution) for radius = 1, 4 do @@ -601,14 +564,14 @@ end -- Set up callbacks - script.on_event({ defines.events.on_built_entity, defines.events.on_robot_built_entity }, onEntityCreated) + -- on_entity_died should trigger both functions -> called manually script.on_event({ defines.events.on_player_mined_entity, defines.events.on_robot_mined_entity, defines.events.on_entity_died }, onEntityRemoved) script.on_event({ defines.events.on_pre_player_mined_item, defines.events.on_pre_robot_mined_item, defines.events.on_entity_died }, preEntityRemoved) -local functions = generateFunctions() +functions = generateFunctions() local onTick = spreadOverTicks(functions, INTERVAL) script.on_event(defines.events.on_tick, onTick) @@ -617,5 +580,17 @@ script.on_init(init) script.on_configuration_changed(init) +function onSettingsChanged(event) + game.print("Settings changed") + game.print(serpent.line(event)) + INTERVAL = settings.global["baf-update-interval"].value + + game.print("Interval: " .. INTERVAL) + + local onTick = spreadOverTicks(functions, INTERVAL) + script.on_event(defines.events.on_tick, onTick) +end + +script.on_event(defines.events.on_runtime_mod_setting_changed, onSettingsChanged) diff --git a/better-air-filtering/info.json b/better-air-filtering/info.json index da3cc77..eba5554 100644 --- a/better-air-filtering/info.json +++ b/better-air-filtering/info.json @@ -1,6 +1,6 @@ { "name": "better-air-filtering", - "version": "0.1.2", + "version": "0.1.4", "title": "Better Air Filtering", "author": "Joey De Pauw", "contact": "joeydepauw@gmail.com", @@ -9,7 +9,8 @@ "dependencies": [ "base >= 0.17", "!air-filtering", - "!NauvisDay" + "!NauvisDay", + "!CW-carbon-capture" ], "description": "An overhaul of the air filtering mod by Schorty. Includes complex air filtering steps to remove pollution." } diff --git a/better-air-filtering/locale/en/air-filtering.cfg b/better-air-filtering/locale/en/air-filtering.cfg index 6fefc8d..4ba724c 100644 --- a/better-air-filtering/locale/en/air-filtering.cfg +++ b/better-air-filtering/locale/en/air-filtering.cfg @@ -17,6 +17,10 @@ liquid-filter=Liquid filter used-liquid-filter=Used liquid filter +[fuel-category-name] +pollution-filter=Air filter + + [fluid-name] pollution=Pollution polluted-water=Polluted Water @@ -29,6 +33,7 @@ filter-air-expendable=Filter air liquid-pollution=Condense pollution air-filter-recycling=Recycle used air filter + [technology-name] air-filtering=Air filtering air-filter-recycling=Recycle used air filters @@ -39,4 +44,13 @@ air-filtering-1=Enables the crafting of passive Air Filter Machines to improve a air-filtering-2=A stronger air filter that uses electricity to pull pollution towards it from a 2 chunk radius. air-filtering-3=An even stronger air filter, capable of cleaning pollution in a 3 chunk radius. reusable-air-filters=More strudy air filters that can be recycled with future technology. -air-filter-recycling=Used air filters can be reused after being recycled by using a bit of coal to refill them. \ No newline at end of file +air-filter-recycling=Used air filters can be reused after being recycled by using a bit of coal to refill them. + + +[mod-setting-name] +baf-update-interval=Update interval + +[mod-setting-description] +baf-update-interval=Updates are implemented efficiently and are spread over an UPDATE INTERVAL amount of ticks. The default of 20 gives three updates per second. 30 would result in 2 updates per second for example. + + diff --git a/better-air-filtering/settings.lua b/better-air-filtering/settings.lua new file mode 100644 index 0000000..2801ecd --- /dev/null +++ b/better-air-filtering/settings.lua @@ -0,0 +1,10 @@ +data:extend({ + { + type = "int-setting", + name = "baf-update-interval", + setting_type = "runtime-global", + minimum_value = 5, + maximum_value = 120, + default_value = 20 + } +}) \ No newline at end of file