Example #1
0
        public FluidBox ReadNextFluidBox(Stream src)
        {
            FluidBox fbox = new FluidBox();

            fbox.value = ReadNextFloat32(src);

            return(fbox);
        }
Example #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="timeStep"></param>
        public override void PreStep(float timeStep)
        {
            float damping = (float)Math.Pow(Damping, timeStep);


            foreach (RigidBody body in bodies)
            {
                if (FluidBox.Contains(body.BoundingBox) != JBBox.ContainmentType.Disjoint)
                {
                    JVector[] positions = samples[body.Shape];

                    float frac = 0.0f;

                    JVector currentCoord = JVector.Zero;
                    for (int i = 0; i < positions.Length; i++)
                    {
                        currentCoord = JVector.Transform(positions[i], body.Orientation);
                        currentCoord = JVector.Add(currentCoord, body.Position);

                        bool containsCoord = false;

                        if (fluidArea == null)
                        {
                            containsCoord = FluidBox.Contains(ref currentCoord) != JBBox.ContainmentType.Disjoint;
                        }
                        else
                        {
                            containsCoord = fluidArea(ref currentCoord);
                        }

                        if (containsCoord)
                        {
                            body.AddForce((1.0f / positions.Length) * body.Mass * Flow);
                            body.AddForce(-(1.0f / positions.Length) * body.Shape.Mass * Density * world.Gravity, currentCoord);
                            frac += 1.0f / positions.Length;
                        }
                    }

                    body.AngularVelocity *= damping;
                    body.LinearVelocity  *= damping;
                }
            }
        }