- for ( int y = 2; y < WATERY - 2; y++ )
- {
- for ( int x = 2; x < WATERX-2; x++ )
- {
- float d;
- d = waterHeight[ x + WATERX * y ].y - waterHeight[ x - 1 + WATERX * y ].y;
- waterForce[ x + WATERX * y ] -= d;
- waterForce[ x - 1 + WATERX * y ] += d;
-
- d = waterHeight[ x + WATERX * y ].y - waterHeight[ x + WATERX * (y-1) ].y;
- waterForce[ x + WATERX * y ] -= d;
- waterForce[ x + WATERX * (y-1) ] += d;
-
- d = waterHeight[ x + WATERX * y ].y - waterHeight[ x + 1 + WATERX * y ].y;
- waterForce[ x + WATERX * y ] -= d;
- waterForce[ x + 1 + WATERX * y ] += d;
-
- d = waterHeight[ x + WATERX * y ].y - waterHeight[ x + WATERX * (y+1) ].y;
- waterForce[ x + WATERX * y ] -= d;
- waterForce[ x + WATERX * (y+1) ] += d;
-
- d = ( waterHeight[ x + WATERX * y ].y - waterHeight[ x + 1 + WATERX * (y+1) ].y) * INVSQRT2;
- waterForce[ x + WATERX * y ] -= d;
- waterForce[ x + 1 + WATERX * (y+1) ] += d;
-
- d = (waterHeight[ x + WATERX * y ].y - waterHeight[ x - 1 + WATERX * (y-1) ].y ) * INVSQRT2;
- waterForce[ x + WATERX * y ] -= d;
- waterForce[ x - 1 + WATERX * (y-1) ] += d;
-
- d = (waterHeight[ x + WATERX * y ].y - waterHeight[ x - 1 + WATERX * (y+1) ].y ) * INVSQRT2;
- waterForce[ x + WATERX * y ] -= d;
- waterForce[ x - 1 + WATERX * (y+1) ] += d;
-
- d = (waterHeight[ x + WATERX * y ].y - waterHeight[ x + 1 + WATERX * (y-1) ].y ) * INVSQRT2;
- waterForce[ x + WATERX * y ] -= d;
- waterForce[ x + 1 + WATERX * (y-1) ] += d;
- }
- }
- // Integration
- for ( int i = 0; i < nVertices; i++ )
- waterVelocity[ i ] += waterForce[ i ] * 0.045f;
- for ( i = 0; i < nVertices; i++ )
- waterHeight[ i ].y += waterVelocity[ i ];