Dominik wrote: Sat Dec 22, 2018 6:47 pm
Flow rate - the issue is a part of the game. If one pipe is not enough, well, figure it out

I already answered that. If one pipe isn't enough then one "could" add another. But the machine itself still needs more than what that one pipe can push through.
"So add another machine then?"
That defeats the whole purpose of upgrading. If i went by that logic, i would be using slow everything and build wide.
Upgrading means you consolidate your big stuff into as small packages as possible to save space and thus headaches both in UPS and in managing the whole base.
Add biters and you know why building wide is not as easy as just adding another pipe.
Dominik wrote: Sat Dec 22, 2018 6:47 pm
Fluid clearing is reasonably fast. Would be faster with higher threshold but I also don't want to make fluid disappear when it should not. Anyway, I can't imagine how you use one pipe for different fluids with the new system against mixing.
Exactly! I don't want fluids to disappear either. Hence the new system concerns me as i frequently empty whole sections of piping. If not because i want to use the same pipe for a different fluid in a different stage (may i remind you there's mods, mods add more fluids than vanilla) and even on the same machine. But then because i want to use the same train stop sometimes for different fluids as the need arises.
If Factorio was threedimensional (it's basically 2.1D with underground pipes and belts only) then these issues could be solved easier.
I've come up with ways to clear pipes automatically (essentially flushing them) by pushing one last batch through them before they change to a different recipe. This fixes any rounding errors that occurred during the last batch.
And even then, some batches frequently leaves pipes empty while running as the machines requesting fluids are faster than the ones providing them. Having fluids automagically disappear every cycle means there's going to be lost fluids.
100 pipes * 0.05 = 5 units of fluid magically gone every cycle. Cycles can be as slow as a couple of seconds or as fast as a few ticks. So there could theoretically be 150 units of fluid just magically *POOF* every second.
And finally, what happens with really really long pipes? The fluid level will equalize right? If you add 5 units of fluid to a 100 pipe long section that fluid will go POOF despite you expecting it to arrive at the other end.
Now imagine megabases (because you said it yourself, "figure it out") where you can have sections of pipe as long as 1000 tiles for the less hungry parts. You add 50 units on one end and that levels out over 1000 fluid boxes and it never ever arrives. You made yourself a VOID pipe by mistake now.
Dominik wrote: Sat Dec 22, 2018 6:47 pmThe other properties - unfortunately no. Any variable increases the memory footprint which is significant for performance. We eliminate all that does not make significant contribution to the game.
Which is exactly why, from a simulation standpoint, making every pipe entity simulate separately is a bad idea. For memory reasons.
Why do we have to "see" each pipe simulate flow when we can barely see what's happening anyways unless we use debug options?
I would very much prefer it if each connected section/lengths of pipes were a single fluid box and all the movement was done visually rather than simulated.
Consider the following image...
It doesn't show what's happening behind the scenes but it does show something is happening.
I suggest fluids would do the same. (And even belts to be honest)
Instead of simulating every single step along the way, say "this packet of fluid will move from A to B at speed X and thusly arrive at consumer B on tick Y" and visually represent this movement linearly through an animation. You save a WHOLE LOT of memory and CPU cycles this way. In fact, done right, animations live on the GPU. So the CPU basically goes on vacation compared to the old and now the new system.
EDIT: I am not proposing teleportation BTW. I am proposing you do the calculations ONCE per add/remove event and WAIT until the conditions are met for that packet (I.E, packet created at tick 123, has 50 units and will move from A to B through points C, D, E, ... (using path finding and visually following that path linearly on the GPU) at a speed of 0.2 tiles per tick and will arrive at B on tick 234 for the requester to process)
Graphics will deal with all the visual stuff.