Smart and programmable splitters are nearly useless due to the fact that their logic blocks the belt as soon as the filtered output is blocked.
This proposes revamp of their functionality that will make them actually useful and will get rid of their blocking. It also adds advanced functionality to mergers.
Smart splitter could implement pure priority. Select which output is used first, which second, and which third. Similarly there could (and should) be a smart merger, again setting up priority at which the inputs are consumed when the output is free. The problems this solves include:
- refilling a belt from a secondary belt (assuming both carry the same material): smart splitter on the secondary belt, giving priority to the off-branch. Then merging this off-branch with primary belt using smart merger, giving priority to the belt. This will use the connection between the two belts to fill gaps on the primary belt without stopping either of the two belts.
- giving priority to producers. Let's assume I have a producer using alternate recipe which makes the product cheaper. But I don't necessarily have enough materials for the alternate recipe, so I also have a secondary producer using standard recipe. But I prefer using the alternate recipe because it makes the product cheaper. So I merge the two using smart merger, giving priority to the branch from the alternate recipe producer.
Programmable splitter could have a "recipe filtering" function. Select not just set of materials but a recipe for an output, and the splitter will filter out whole units of that recipe. If materials come which don't fit the recipe, would exceed amount on one of the ingredients, or the filtered output is blocked, they're sent to the unfiltered output (there must always be at least one unfiltered output).
Similarly there could be a programmable merger. There we could assume up to three pure material inputs are given to it and it picks materials from the inputs to form whole units of a selected (up to three ingredients) recipe on the output, blocking individual inputs if they provide something that doesn't fit the selected recipe or would exceed one of the ingredients.
Usage: feeding a production line using single belt. Let's assume I have a line of four manufacturers set up to produce high speed connectors. So I set up a programmable merger to complete high speed connector recipe and send appropriate ingredients to its inputs. At the end of the line, I set up a programmable splitter for each manufacturer, set up to the same recipe. That way I can be sure each manufacturer is fed appropriate amounts of each ingredient, does not block, and leaves enough materials for other manufacturers.
Pure material filtering as present now in the game has in my opinion only one use case - in "sorting the trash" scenario. And the player must make sure all outputs are ready to accept the material or the machinery would block. Option to use filtering with priority (filter to the selected output only if it's not blocked) is also there, but that then makes the splitter produce "trash" on the output as well and just leaves the player up to deal with the same problem he had at the beginning. The ability to sort out pure materials in addition to recipes could be left up to the programmable splitter, though.