FEA/LINDA, flow rework
Ditch excited groups. They work amazing at rest, but if doors are opening and closing and players are about they're not workable
Instead, implement FEA air groups.
Group tiles with SIMILAR mixes together. There's no timers here or anything, if you attempt to mod to a group'd mix too much, you instead modify just one tile, and that tile is pulled out of the group
Perhaps tiles have a delay until they enter the group
~~Groups share out their visuals as a seperate step, which is safe because we assert that they can't meaningfully visually change due to how slow our gas visual rampups are.
ABOVE UNNEEDED, WE CAN REUSE THE SAME VIS CONTENTS OBJECT SEE BELOW
Refactoring:
- Turfs will need a "get mix" define, replacing any use of gas_mixture
- Similarly, turfs will need an add_gas define, so it can be shared out afterwards
- Work will need to be done to reactions to make them support this new pattern, perhaps reactions can be a substep group processing, since they can be safely queued? not sure
Groups will enter an "unaddable" state if "broken" (read: split into bits)
During this step, it will be impossible to mutate the gasmixture of the group, and impossible to add new tiles to it
Any attempts to modify the group, via adding new tiles or interacting with it, will instead split off the old member into a new group
Can't decide if I want zas style "always together" groups, or excited group style stuff. Will have to debug and check
Use \ref appearances for alt click
update_visuals():
- If we moved the gas's visuals to a sort of indermediary vis contents object (object that sits in vis contents which we then put things in the vis contents of) we could just set that object's vis contents to "the thing we want" and get free updates across the group. Would need 1 object per group.
Add momentum and support for "fans"
Idea here is gas could continue moving in the direction it is currently moving, it would have "intent" rather then just raw deltas. This could be acomplished trivially by having force vectors on each tile, which get angled by diffusion and resist change based off the last amount moved (with decreases over time to model friction). We could retrive these angles and values by using the same system we use for spacewind. It might even make mass equalization redundant, since it would provide an inherent "speed up" to default sharing. Would also create "waves" of pressure, which I think is really cool.
This would as a side effect allow for generic support of fans and pressure waves and shit, which would be cool.