commit 39fb9047b29fb66c7dfae3c916bfb59bb22b887e
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue May 14 22:28:28 2019 +0100

    Enhance the TRANSPARENCY effect with a Wave.

diff --git a/distorted-cube.iml b/distorted-cube.iml
deleted file mode 100644
index 1e0c6561..00000000
--- a/distorted-cube.iml
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module external.linked.project.id=":distorted-cube" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="android-gradle" name="Android-Gradle">
-      <configuration>
-        <option name="GRADLE_PROJECT_PATH" value=":distorted-cube" />
-      </configuration>
-    </facet>
-    <facet type="android" name="Android">
-      <configuration>
-        <option name="SELECTED_BUILD_VARIANT" value="debug" />
-        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
-        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
-        <afterSyncTasks>
-          <task>generateDebugSources</task>
-        </afterSyncTasks>
-        <option name="ALLOW_USER_CONFIGURATION" value="false" />
-        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
-        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
-        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
-        <option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" />
-        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
-      </configuration>
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
-    <output url="file://$MODULE_DIR$/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" />
-    <output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" />
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources" />
-      <excludeFolder url="file://$MODULE_DIR$/build/generated/source/r" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/check_manifest_result" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />
-    </content>
-    <orderEntry type="jdk" jdkName="Android API 27 Platform" jdkType="Android SDK" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable:27.1.1@aar" level="project" />
-    <orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata-core:1.1.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:support-core-utils:27.1.1@aar" level="project" />
-    <orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime:1.1.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: android.arch.lifecycle:common:1.1.0@jar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:support-annotations:27.1.1@jar" level="project" />
-    <orderEntry type="library" name="Gradle: android.arch.lifecycle:viewmodel:1.1.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:support-core-ui:27.1.1@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:support-compat:27.1.1@aar" level="project" />
-    <orderEntry type="library" name="Gradle: android.arch.core:runtime:1.1.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:support-fragment:27.1.1@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable:27.1.1@aar" level="project" />
-    <orderEntry type="library" name="Gradle: com.android.support:appcompat-v7:27.1.1@aar" level="project" />
-    <orderEntry type="library" name="Gradle: android.arch.core:common:1.1.0@jar" level="project" />
-    <orderEntry type="module" module-name="distorted-library" />
-    <orderEntry type="module" module-name="distorted-library" />
-    <orderEntry type="module" module-name="distorted-library" />
-    <orderEntry type="module" module-name="distorted-library" />
-    <orderEntry type="module" module-name="distorted-library" />
-    <orderEntry type="module" module-name="distorted-library" />
-    <orderEntry type="module" module-name="distorted-library" />
-    <orderEntry type="module" module-name="distorted-library" />
-    <orderEntry type="module" module-name="distorted-library" />
-    <orderEntry type="module" module-name="distorted-library" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/src/main/java/org/distorted/effect/AppearEffectTransparency.java b/src/main/java/org/distorted/effect/AppearEffectTransparency.java
index f4aff92f..680c0886 100644
--- a/src/main/java/org/distorted/effect/AppearEffectTransparency.java
+++ b/src/main/java/org/distorted/effect/AppearEffectTransparency.java
@@ -21,8 +21,12 @@ package org.distorted.effect;
 
 import org.distorted.library.effect.Effect;
 import org.distorted.library.effect.FragmentEffectAlpha;
+import org.distorted.library.effect.VertexEffectWave;
 import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Dynamic5D;
 import org.distorted.library.type.Static1D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static5D;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -38,7 +42,28 @@ class AppearEffectTransparency extends AppearEffect
     d0.add(new Static1D(1.0f));
     mCubeEffects[0] = new FragmentEffectAlpha(d0);
 
-    return 1;
+    mNodeEffectPosition = new int[] {-1};
+    mNodeEffects        = new Effect[mNodeEffectPosition.length];
+
+    int w = mScreen.getWidth();
+    int h = mScreen.getHeight();
+    int min = w<h ? w:h;
+
+    float init_amplitude = min/15.0f;
+    float end_amplitude  = 0.0f;
+    float length         = min/15.0f;
+    float init_phase     = 0.0f;
+    float end_phase      = 360.0f;
+    float alpha          = 30.0f;
+    float beta           = 90.0f;
+
+    Dynamic5D d1 = new Dynamic5D(duration, 0.5f);
+    d1.add(new Static5D( init_amplitude, length, init_phase, alpha, beta) );
+    d1.add(new Static5D( end_amplitude , length, end_phase , alpha, beta) );
+    Static3D center = new Static3D(min*0.5f,min*0.5f,0);
+    mNodeEffects[0] = new VertexEffectWave(d1, center, null);
+
+    return 2;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -48,5 +73,6 @@ class AppearEffectTransparency extends AppearEffect
   static void enable()
     {
     FragmentEffectAlpha.enable();
+    VertexEffectWave.enable();
     }
   }
diff --git a/src/main/java/org/distorted/effect/DisappearEffectTransparency.java b/src/main/java/org/distorted/effect/DisappearEffectTransparency.java
index b8f2c42d..6ccd85dc 100644
--- a/src/main/java/org/distorted/effect/DisappearEffectTransparency.java
+++ b/src/main/java/org/distorted/effect/DisappearEffectTransparency.java
@@ -21,8 +21,12 @@ package org.distorted.effect;
 
 import org.distorted.library.effect.Effect;
 import org.distorted.library.effect.FragmentEffectAlpha;
+import org.distorted.library.effect.VertexEffectWave;
 import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Dynamic5D;
 import org.distorted.library.type.Static1D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static5D;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -38,7 +42,28 @@ class DisappearEffectTransparency extends DisappearEffect
     d0.add(new Static1D(0.0f));
     mCubeEffects[0] = new FragmentEffectAlpha(d0);
 
-    return 1;
+    mNodeEffectPosition = new int[] {-1};
+    mNodeEffects        = new Effect[mNodeEffectPosition.length];
+
+    int w = mScreen.getWidth();
+    int h = mScreen.getHeight();
+    int min = w<h ? w:h;
+
+    float init_amplitude = 0.0f;
+    float end_amplitude  = min/15.0f;
+    float length         = min/15.0f;
+    float init_phase     = 360.0f;
+    float end_phase      = 0.0f;
+    float alpha          = 30.0f;
+    float beta           = 90.0f;
+
+    Dynamic5D d1 = new Dynamic5D(duration, 0.5f);
+    d1.add(new Static5D( init_amplitude, length, init_phase, alpha, beta) );
+    d1.add(new Static5D( end_amplitude , length, end_phase , alpha, beta) );
+    Static3D center = new Static3D(min*0.5f,min*0.5f,0);
+    mNodeEffects[0] = new VertexEffectWave(d1, center, null);
+
+    return 2;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -48,5 +73,6 @@ class DisappearEffectTransparency extends DisappearEffect
   static void enable()
     {
     FragmentEffectAlpha.enable();
+    VertexEffectWave.enable();
     }
   }
diff --git a/src/main/java/org/distorted/magic/RubikCube.java b/src/main/java/org/distorted/magic/RubikCube.java
index 5094522e..821ba483 100644
--- a/src/main/java/org/distorted/magic/RubikCube.java
+++ b/src/main/java/org/distorted/magic/RubikCube.java
@@ -34,7 +34,7 @@ import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedNode;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshCubes;
-import org.distorted.library.mesh.MeshQuad;
+import org.distorted.library.mesh.MeshFlat;
 import org.distorted.library.message.EffectListener;
 import org.distorted.library.type.Dynamic1D;
 import org.distorted.library.type.Static1D;
@@ -71,7 +71,7 @@ public class RubikCube extends DistortedNode
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    RubikCube(int size, Static4D quatC, Static4D quatA, DistortedTexture texture, MeshQuad mesh, DistortedEffects effects)
+    RubikCube(int size, Static4D quatC, Static4D quatA, DistortedTexture texture, MeshFlat mesh, DistortedEffects effects)
       {
       super(texture,effects,mesh);
 
diff --git a/src/main/java/org/distorted/magic/RubikRenderer.java b/src/main/java/org/distorted/magic/RubikRenderer.java
index e8a774b5..60dcaf14 100644
--- a/src/main/java/org/distorted/magic/RubikRenderer.java
+++ b/src/main/java/org/distorted/magic/RubikRenderer.java
@@ -28,7 +28,7 @@ import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedLibrary;
 import org.distorted.library.main.DistortedScreen;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshQuad;
+import org.distorted.library.mesh.MeshFlat;
 import org.distorted.library.message.EffectListener;
 import org.distorted.library.type.Static4D;
 
@@ -54,7 +54,7 @@ public class RubikRenderer implements GLSurfaceView.Renderer, EffectListener
     private boolean mCanRotate, mCanDrag;
     private RubikCube mOldCube, mNewCube;
     private int mScreenWidth, mScreenHeight;
-    private MeshQuad mMesh;
+    private MeshFlat mMesh;
     private AppearEffect.Type mAppearType;
     private DisappearEffect.Type mDisappearType;
     private int mAppearDuration, mDisappearDuration;
@@ -90,7 +90,7 @@ public class RubikRenderer implements GLSurfaceView.Renderer, EffectListener
       mAppearDuration    = 1000;
       mDisappearDuration = 1000;
 
-      mMesh= new MeshQuad();
+      mMesh= new MeshFlat(20,20);
       mNextCubeSize =RubikActivity.getSize();
       }
 
