Open joelverhagen opened 8 months ago
Picking this up to work. I found the root cause area, just nailing down the scenarios that cause it and then i'll have a patch up shortly.
After looking at this a bit more, the pathing for the pipes does not quite support "backtracking" or "extra spacing" to connect pipe groups. The following blueprint, while similar, moves 1 pumpjack over, and all pumpjacks are now connecting. This is due to the fact that pathing can be handled with the current algorithms.
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
I'm going to talk with @teoxoy about this a bit, as i believe to "correct" this, we may have to update the algorithms quite a bit.
Found a much smaller blueprint this happens on. Easier to reproduce and see.
0eJyV0ksOgjAQBuC7/OtqoIBKl17DGMNjYqpQGihGQri7FIQYN9Zd25l+6UynR1q0pGupDEQPmVWqgTj1aORVJYU9M50mCEhDJRhUUtqdbkt9S7I7BgapcnpC+MOZgZSRRtJsfOcy6KoZw5Wy7nhl420jhm5ejFIua8rmuPe2uotqy5Rq6zMHMvhD5E7i+kj+WwycRO4Ohk6gvxQd/BYjt6KXPjq0cWc/fhoP8TFNDA+qm+kKP/jhPub7kMdxEPsMRZLSOFs4rtnD8ALvbtJu
@sighnwaive I was able to resolve the issue by allowing the FBE algorithm more retries: https://github.com/joelverhagen/FactorioTools/blob/ed60f85859df3dc4682553bc852b158833db6539/src/FactorioTools/OilField/Steps/AddPipes.1.FBE.cs#L197 (this is my C# implementation of the FBE algorithm for my own tool https://factorio-tools.vercel.app/oil-field). That might be an easy fix).
OK, Found that during pipe generation, we don't generate any underground pipe for connection purposes. Underground pipe is only used to replace stretches of straight pipe. Will work to refactor this to use underground pipe as a method of connection on either side of a building as well. This will be done by generating all straight pip connections, then looping through remaining unconnected groups and finding the shorteste path of underground that is not blocked by a building to exit a state of lock-in.
@sighnwaive I was able to resolve the issue by allowing the FBE algorithm more retries: https://github.com/joelverhagen/FactorioTools/blob/ed60f85859df3dc4682553bc852b158833db6539/src/FactorioTools/OilField/Steps/AddPipes.1.FBE.cs#L197 (this is my C# implementation of the FBE algorithm for my own tool https://factorio-tools.vercel.app/oil-field). That might be an easy fix).
The bigger issue here is that we don't actually use undergrounds as part of the pathing algorithm.
As seen here: The pipe group in the center would be invalid. The algorithm made the connection, but did not connect it to all other groups. Some changes need to be made to handle this situation as well as using underground to edit the area.
Describe the bug
If you run the oil field generator on this blueprint, some pumpjacks don't get connected.
0eJyUlsluwzAMRP+FZx2sxeuvFEWRRSjUxorhpWgQ+N9rhToUiQCNj3HkZ4qaGepOx8tih9H5mbo7udPVT9S93Wlyn/5wCc/8obfU0bD0w9fh9E2C5tsQnrjZ9rQKcv5sf6mT67sg62c3O8uMx4/bh1/6ox23BSLBGq7T9sLVhy9tEN0Ium1L9cY9u9Ge+L9iFS84BeDKgnFlHqeR6irGNXmcAXBVrK7N40oAZ+QDp4o8rkJ6pxgn87gawdWMU3lcgxxFyThAKC3SuxrGyQIpr2WeAXiIL6RmHiBkiRhDxfoqgIc4w5RJnkrxEGvouN8aqA/yRoHz9pgD4SHu0FF/QLJIxB4m9q8FzgPyR5PkJXN5hz80EC4KmhusPw2ki1J4HjzzUv1T0ORg/WlkriH+MArnlfighHjVjvN9yj+T4tU79lsBPMgfUS9A/oWozO/XMA/IgyAFWC9AHmi5Q8+Af7XC89kA/g1LUb0YQH+h1WgeGGS/0Pzg833lbXfexz24+3eRFvRjxykuWP8AAAD//wMA5MG5Zw==
To Reproduce
Use the above blueprint and click "Generate" under "Oil Outpost Generator Settings"
Expected behavior A clear and concise description of what you expected to happen.
It is because the
aloneGroups
array is not empty at the end. The 5 pumpjacks here are in one leftover alone group. https://github.com/teoxoy/factorio-blueprint-editor/blob/83343e6a6c91608c43a823326fb16c01c934b4bd/packages/editor/src/core/generators/pipe.ts#L265Screenshots
Desktop (please complete the following information):