commit e7a26998f3bfec5e20f6a8c2315b015f7c8d2af6
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Tue Nov 8 17:02:00 2016 +0000

    Progress with WindManager.

diff --git a/src/main/java/org/distorted/examples/wind/WindEffectsManager.java b/src/main/java/org/distorted/examples/wind/WindEffectsManager.java
index 02a3378..1ab24d0 100644
--- a/src/main/java/org/distorted/examples/wind/WindEffectsManager.java
+++ b/src/main/java/org/distorted/examples/wind/WindEffectsManager.java
@@ -31,20 +31,26 @@ import org.distorted.library.type.Static5D;
 
 class WindEffectsManager
   {
+  private int mHeight, mWidth;
+
   private Static3D  shearFactor;
   private Dynamic3D shearDynamic;
   private Static3D  scaleFactor;
   private Dynamic3D scaleDynamic;
   private Static3D  deformForce;
-  private Static5D  windFactor1, windFactor2;
-  private Dynamic5D windDynamic;
+  private Static5D  windFactor11, windFactor12;
+  private Dynamic5D windDynamic1;
+  private Static5D  windFactor21, windFactor22;
+  private Dynamic5D windDynamic2;
+  private Static5D  windFactor31, windFactor32;
+  private Dynamic5D windDynamic3;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   WindEffectsManager(DistortedObject obj)
     {
-    int h = obj.getHeight();
-    int w = obj.getWidth();
+    mHeight = obj.getHeight();
+    mWidth  = obj.getWidth();
 
     shearFactor = new Static3D(0,0,0);
     shearDynamic= new Dynamic3D();
@@ -54,34 +60,49 @@ class WindEffectsManager
     scaleDynamic= new Dynamic3D();
     scaleDynamic.add(scaleFactor);
 
-    deformForce = new Static3D(w/3,0,0);
-
-    windFactor1 = new Static5D(h/10,h/5, 180, 0, 90);
-    windFactor2 = new Static5D(h/10,h/5,-180, 0, 90);
-    windDynamic = new Dynamic5D(1000,0.0f);
-    windDynamic.add(windFactor1);
-    windDynamic.add(windFactor2);
-    windDynamic.setMode(Dynamic.MODE_JUMP);
-    windDynamic.setAccessMode(Dynamic.ACCESS_SEQUENTIAL);
+    deformForce = new Static3D(mWidth/3,0,0);
+
+    windFactor11 = new Static5D(mHeight/10,mHeight/5, 180, 0, 90);
+    windFactor12 = new Static5D(mHeight/10,mHeight/5,-180, 0, 90);
+    windDynamic1 = new Dynamic5D(1000,0.0f);
+    windDynamic1.add(windFactor11);
+    windDynamic1.add(windFactor12);
+    windDynamic1.setMode(Dynamic.MODE_JUMP);
+    windDynamic1.setAccessMode(Dynamic.ACCESS_SEQUENTIAL);
+
+    windFactor21 = new Static5D(mHeight/10,mHeight/5,-180, 90, 10);
+    windFactor22 = new Static5D(mHeight/10,mHeight/5,+180, 90, 10);
+    windDynamic2 = new Dynamic5D(1000,0.0f);
+    windDynamic2.add(windFactor21);
+    windDynamic2.add(windFactor22);
+    windDynamic2.setMode(Dynamic.MODE_JUMP);
+    windDynamic2.setAccessMode(Dynamic.ACCESS_SEQUENTIAL);
+
+    windFactor31 = new Static5D(mHeight/10,mHeight/10,-180, 90, 90);
+    windFactor32 = new Static5D(mHeight/10,mHeight/10,+180, 90, 90);
+    windDynamic3 = new Dynamic5D(1000,0.0f);
+    windDynamic3.add(windFactor31);
+    windDynamic3.add(windFactor32);
+    windDynamic3.setMode(Dynamic.MODE_JUMP);
+    windDynamic3.setAccessMode(Dynamic.ACCESS_SEQUENTIAL);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   synchronized void apply(DistortedObject obj, int wind)
     {
-    int h = obj.getHeight();
-    int w = obj.getWidth();
-
-    Static3D midLeft = new Static3D(0,h/2,0);
-    Static3D midRight = new Static3D(w,h/2,0);
-    Static4D windRegion = new Static4D(0,0,w,h);
+    Static3D midLeft = new Static3D(0,mHeight/2,0);
+    Static3D midRight = new Static3D(mWidth,mHeight/2,0);
+    Static4D windRegion = new Static4D(0,0,mWidth,mHeight);
 
     setWind(wind);
 
     obj.shear(shearDynamic,midLeft);
     obj.scale(scaleDynamic);
     obj.deform(deformForce,midRight);
-    obj.wave(windDynamic, midRight, windRegion);
+    obj.wave(windDynamic1, midRight, windRegion);
+    obj.wave(windDynamic2, midRight, windRegion);
+    obj.wave(windDynamic3, midRight, windRegion);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -92,6 +113,16 @@ class WindEffectsManager
 
     shearFactor.set2(tanAngle);
     scaleFactor.set1(1/(float)Math.sqrt(1+tanAngle*tanAngle));
-    windDynamic.setDuration( wind > 0 ? 100000/wind : Long.MAX_VALUE);
+    windDynamic1.setDuration( wind > 0 ? 100000/wind : Long.MAX_VALUE);
+    windDynamic2.setDuration( wind > 0 ?  80000/wind : Long.MAX_VALUE);
+    windDynamic3.setDuration( wind > 0 ? 100000/wind : Long.MAX_VALUE);
+
+    float waveA = (mHeight/(20.0f-0.15f*wind));
+    windFactor21.set1(waveA);
+    windFactor22.set1(waveA);
+
+    float waveB = (mHeight/(wind+5.0f));
+    windFactor31.set1(waveB);
+    windFactor32.set1(waveB);
     }
   }
