First of all, many thanks to whoever worked or helped on this library, it's just amazing
Thanks and you're welcome
I noticed that when my character was inside the fluid volume I could not move it unless I altered the HorizontalMotionConstraint.AirSpeed and MaximumAirForce values, are those values applicable for all fluids, created with FluidVolume?
Those values apply when the character does not have support. If the character is falling, jumping through the air, or just floating, it will be in the 'air' for the purposes of those properties. If it's in a fluid volume and touches the bottom, the character will revert to traction or support (depending on the surface slope). There is no special movement mode built in for swimming control by default.
Then I would also like to modify a bit the behavior of the character when is inside the fluid, what is the best way to determine when the character is inside it?
That's a bit tricky. FluidVolume is an ancient piece of code; it's not yet integrated fully with the collision detection pipeline (that to-do item keeps getting bumped for higher priority items, unfortunately). That makes it harder to detect if the character is currently within a fluid volume.
While it would be possible to do some queries similar to what the FluidVolume itself does to figure it out, it might be easier to just customize the FluidVolume directly. Checking if a given entity had a Tag indicating it was a character and then adding that character to a set would make it easy to determine later if a character was contained.
Something as hacky as a static HashSet<Entity> which the FluidVolume.AnalyzeEntry dumps character entities into (within a lock) would work. Then, in the character update, check if the set contains the character's entity. The set would need to be cleared after each Space.Update.