#Simple, Logical (and Realistic) Fluid Junctions

1 messages · Page 1 of 1 (latest)

long saddle
#

Right now, a fluid junction will evenly split the flow based on the number of connected pipes, regardless of which are flowing or not. @stable fjord has stated that this is intentional, even though not realistic, because he believes it makes it more predictable, and (I assume) easier to use and understand. Personally, I respectfully, vehemently disagree with this.

I've attached a blueprint that summarizes all of my problems with this "simplified" system. I will list the reasons that I think that this "more predictable", unrealistic approach, in my opinion, is actually far, far harder to use and understand, as well as being excruciatingly (at least for me) limiting.

  1. You need a perfect tree-system for an engine system to function properly, as otherwise some tanks will empty before the others, and the flow rate will decrease below what your engines need. Even connecting all tanks together into a single fluid junction, then splitting it again to distribute to your pumps still reduces flow rate to your pumps whenever any tank empties. This makes making fluid networks even more complicated and time-consuming than they already are with high numbers of tanks for larger constructions. If fluid pumps didn't work like that, the way they're connected wouldn't matter, making it far easier to build.

  2. You cannot have multiple tank sizes in the same fuel system. This is massively restrictive, and as you can see with the blueprint I attached... I'll have to completely re-do the entire fuel system to use exclusively medium tanks because of it. Maybe you can get around this with some sort of complex pump and script system, but if you have to use complex pump and script systems, that goes against the whole point of the chosen fluid junction system being easier to use than a realistic one.

cont. in next message due to hitting the character limit...

#

Please, PLEASE, change the fluid junctions to work in some way that's easier to use and understand, even if it's not the realistic one I am suggesting. At this point I don't even care if it's realistic or not, I just don't want to have to deal with the game's current fluid junction mechanics. They're insanely annoying to deal with, and the fact that if it was realistic I wouldn't have to deal that makes it even more annoying.

This is actually making me not want to play the game, and I want to stress that this is effectively my dream game so the fact that a single feature could reduce my motivation this much... well, that's why I'm making this suggestion. I'm sure I'm not the only person who feels this way about it, and I haven't seen any other discussion with a dev about this besides one short thread, so I want to offer my opinion on this and detailed reasoning as to why, in the hopes that this feature may be redesigned.

#

I also really want to know why batcholi said that this was "easier to predict once understood" or something like that, because I do not feel that way about it at all, nor can I think of any case where the current system would be easier than a more realistic one.

#

Oh and btw for the blueprint, you can press 1 to toggle the engines, I just had it set up for engine testing.

#

It starts out at full power, but then as tanks empty, it loses power and the engines build up unburnt fuel. I tried to design it mostly in a tree-system too, although clearly I made a mistake somewhere, and even if I didn't, the fact that I'm using two tank sizes makes it impossible to stay efficient until it runs out of fuel.

regal furnace
#

I agree

floral sand
#

One of the first problems i ran into while playing was that you cant effectively mix tank sizes, also it would be far more intuitive if unconnected ports on bridges just simply didnt effect flow at all, or rather reported they were unattached and increased flow on ports that are actually being used.
Your suggestion is certainly more intuitive, and with what i know completely possible if not easy to implement.

TLDR: i agree, current implementation is counter-intuitive even if simple

long saddle
#

I'm relieved to know for sure it isn't just me.

zinc jasper
#

Yes this would be very cool

unreal pendant
#

I believe it would be better to just have fluid tanks be a step up in some easily dividable amount by junctions.

so small fluid tank is 0.2 then the medium should be 4x that so it would be 0.8 volume. I'll give an example of what a tree for that would work

unreal pendant
#

actually building a tree to deliver four times the amount to one tank than the other seems impossible maybe.

I suggest possibly instead of this to allow a mixer which has two output ports and one input port. it will deliver any given ratio to those two output ports. so for a large tank and a medium tank you could set the mixer to output 9 and 1/3 to one side and one on the other.

if you have an uneven amount of tanks on one side then you can find the ratio by this equation. ((amount of tanks on one side * volume per tank) / (amount of tanks on other side * volume per tank)) : 1

long saddle
#

Or maybe just a block that evenly distributes the flow from everything going into it, no matter the way the junctions go through. So, you could combine all the tanks together through any combination of junctions, then run the output into that distributor block, and then from there split it with junctions into your pumps. That would solve all of the problems I have with this.

#

Assuming just doing it realistically can't be easily done due to it being too computationally intensive as you said in #game-discussions.

#

Wait no that still wouldn't work because smaller tanks would still empty faster.

#

Maybe if it empties all tanks by the same percent/sec? Like distributes the flow between them based on their volume or something?

unreal pendant
#

how would that block work

#

I think what you want is a modular junction. which honestly for flow would be super nice as well as that would also allow any ratio you want. I believe both would be a very nice implementation because then you can expand a junction infinitely and have a ratio block allow for you to have any division you want

long saddle
#

So like all large tanks into one junction, all regular tanks into another junction with a ratio block forcing them to take a smaller amount of flow by some amount if necessary, as you calculate it based on the compared volume of the groups of tanks?

#

That would be easy to use I think

#

Maybe a bit weird, but if it can't be realistic, I doubt that can be avoided anyways.

unreal pendant
#

I believe it would be the best solution

long saddle
#

If you're right about the realistic junctions being laggy, then I agree.

#

Good idea

unreal pendant
#

I do believe it is possible to calculate the flow of fluids in a multi-threaded way though.

pull object = object that can take flow
push object = object that outputs flow

have a few watcher async tasks that then have a queue of each pull object to check and push object to update. The watcher then sees if the pull object can no longer accept flow and notifies the push object giving the flow and responds accordingly. for junctions and tanks this could simply be if the tank is full decrease the junctions value by one if it then equals zero go one step up (ask the junction for the junction one up in the tree which can also be a list due to inverse junctions) and decrease that junction and so on.

I don't believe that it would cause issues because you could make the junction only be able to read the value of how many are connected.

there's two problems I see with this and its that junctions that then add or remove an extra pipe can't easily do so. easy fix is allow the watcher tasks to be notified of that.

other problem is that this would make fluids not operate perfectly on a tick basis. you can still allow the fluids to always be the same amount of fluid by having any extra flow that should not have happened simply get divided up by the other pipes connected to the junction that it was connected to and it would know this by knowing the tick of when the flow came into the object and the tick when the watcher task shutdown the flow into that object (assuming a global tick variable that can be read only for an async task).

I'm not sure if this would be worth it or even a good idea though

unreal pendant
#

I believe the best idea for this would be a few things.

  1. a ratio block would be great because then you can have 100% flow rate rather than using valves and getting a diminished flow rate. (also suggest allowing the ratio to be changed by data port)
  2. a modular junction to allow division by any amount
  3. a valved junction that allows turning on and off specific ports that it has. the ratio block can also support this functionality if the data port suggestion is implemented.
zinc jasper
#

A modular junction is a great idea

nimble merlin
#

Having fluids be a network (just like routers) would make it more simple to understand. Same for electricity. Having flow being split by junctions is very unintuitive.

long saddle
#

Also I actually figured out a way to use a bunch of pumps, a script and specific and calculated junction connecting to allow multiple tank sizes to work at once and all empty at the same rate. It's limited to specific combinations of tank numbers still, but it does work. Still, would be nice if it was simpler imo. It took so many hours of discussing and testing to wrap my head around how to do it.

nimble merlin
long saddle
#

Yeah that would be the best imo

#

Modular junctions and ratio blocks and such would make it simpler, but that's still a bunch of mechanics you have to learn about the game that are unintuitive to someone used to thinking about how it would work irl. Of course though as was discussed it might be too computationally heavy to do it a more realistic or network way, so we'll see what works.

#

Hmm, another thing I thought of, is if it works realistically/with a network or something like that, that would mean tanks emptying at different rates doesn't reduce thruster performance, although it would still potentially skew your center of mass in a way you don't want. So, fluid mechanics would become more of a easy to learn, hard to perfect kind of thing, where you still have to do what I did if you want everything flowing perfectly, but you don't have to do that to get your rocket to work with acceptable efficiency.

#

That would be really great

unreal pendant
long saddle
#

I was wondering why that wouldn't work, I assumed that I was missing something... so that would work? Isn't that how it works realistically as well though?

#

Although maybe if you made a much more complex system it might become inaccurate, I'm not sure what kind of system that would be though or why it would need to be used.

unreal pendant
deep kestrel
#

most games that I know of make pipe segments being containers as well and calculate the imbalance between them to let them equalize. However, those have their own weirdnesses to occur.

unreal pendant
#

a network would be a good solution but valves would be weird to implement

long saddle
unreal pendant
unreal pendant
#

and no it doesn't divide the flow at all because thats not how junctions work

long saddle
#

At least that's how I understand the suggestion.

unreal pendant
#

yeah I see. I mean that works if the flow goes through the tank but it would also dimish the flow. so you would possibly end up with the tanks being filled but the end having no pressure. depending on how its implemented of course

#

but yes it could work if the pressure just immediately goes through without filling the tanks if it can

long saddle
#

Or if connected tanks auto level

#

So they always all empty at the same rate

#

The game in effect treating them as one giant tank

unreal pendant
#

so slowly in fact you could probably wait an hour and maybe it would be close to being done. might depend on the level though

long saddle
#

Yeah it's way too slow to be useful rn.

unreal pendant
#

yeah

deep kestrel
#

the topic is pumps are rather large and sometimes you do not want to add the extra space and/or electric power for that amount of pumps. If there would be a directional valve in the devices that would on the other hand be a way more feasible device for things where space is limited.