commit 9e5b990e80c6ffb537454eb8639f2c46f6ed30f7
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Oct 20 13:03:05 2020 +0100

    Progress with the Ivy.

diff --git a/src/main/java/org/distorted/objects/FactoryCubit.java b/src/main/java/org/distorted/objects/FactoryCubit.java
index 71653524..3f1fc04c 100644
--- a/src/main/java/org/distorted/objects/FactoryCubit.java
+++ b/src/main/java/org/distorted/objects/FactoryCubit.java
@@ -506,7 +506,7 @@ class FactoryCubit
     final float angle = (float)Math.PI/(2*IVY_N);
     final float CORR  = 1.0f - 2*IVY_D;
     final float DIST  = 0.4f;
-    final float DIST2 = -0.5f*CORR;
+    final float DIST2 = -0.5f*CORR + IVY_D;
     final float CORR2 = 0.5f;
     float[] vertices = new float[2*(IVY_N+1)+6];
 
@@ -527,7 +527,7 @@ class FactoryCubit
       vertices[2*i+7] = (CORR*(sin-0.5f)-DIST)*CORR2;
       }
 
-    float[] bands0 = computeBands(+0.02f,18,0.2f,0.5f,5);
+    float[] bands0 = computeBands(+0.02f,12,0.2f,0.5f,5);
     float[] bands1 = computeBands(-0.10f,20,0.2f,0.0f,2);
 
     meshes[0] = new MeshPolygon(vertices,bands0,0,0);
@@ -553,7 +553,7 @@ class FactoryCubit
     MeshBase[] meshes = new MeshBase[2];
 
     final float angle = (float)Math.PI/(2*IVY_N);
-    final float CORR  = 0.25f - 0.5f*IVY_D;
+    final float CORR  = 1.0f - 2*IVY_D;
     float[] vertices = new float[4*IVY_N];
 
     for(int i=0; i<IVY_N; i++)
@@ -567,8 +567,8 @@ class FactoryCubit
       vertices[2*i+1+2*IVY_N] = CORR*(sin-0.5f);
       }
 
-    float[] bands0 = computeBands(+0.0125f,35,0.125f,0.5f,5);
-    float[] bands1 = computeBands(-0.0250f,45,0.125f,0.0f,2);
+    float[] bands0 = computeBands(+0.05f,35,0.5f,0.5f,5);
+    float[] bands1 = computeBands(-0.10f,45,0.5f,0.0f,2);
 
     meshes[0] = new MeshPolygon(vertices,bands0,0,0);
     meshes[0].setEffectAssociation(0,1,0);
@@ -1007,15 +1007,6 @@ class FactoryCubit
     return effect;
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  VertexEffect[] createVertexEffectsIvyFace()
-    {
-    VertexEffect[] effect = new VertexEffect[1];
-    effect[0] = new VertexEffectScale(4.0f);
-    return effect;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // OBJECTS
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1291,8 +1282,6 @@ class FactoryCubit
   MeshBase createIvyFaceMesh()
     {
     MeshBase mesh = createFacesIvyFace();
-    VertexEffect[] effects = createVertexEffectsIvyFace();
-    for( VertexEffect effect : effects ) mesh.apply(effect);
 
     mesh.mergeEffComponents();
     mesh.addEmptyTexComponent();
diff --git a/src/main/java/org/distorted/objects/FactorySticker.java b/src/main/java/org/distorted/objects/FactorySticker.java
index c18775a0..6592ecee 100644
--- a/src/main/java/org/distorted/objects/FactorySticker.java
+++ b/src/main/java/org/distorted/objects/FactorySticker.java
@@ -160,24 +160,57 @@ class FactorySticker
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// TODO
 
-  void drawIvyCornerSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke)
+  void drawIvyCornerSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke, float radius)
     {
+    paint.setAntiAlias(true);
     paint.setColor(color);
     paint.setStyle(Paint.Style.FILL);
     canvas.drawRect(left,top,left+TEXTURE_HEIGHT,top+TEXTURE_HEIGHT,paint);
 
+    float CORR = 0.5f;
+    float DIST = 0.4f;
+
     paint.setColor(COLOR_BLACK);
     paint.setStyle(Paint.Style.STROKE);
-    paint.setStrokeWidth(stroke);
+    paint.setStrokeWidth(CORR*stroke*TEXTURE_HEIGHT);
+
+    float tmp1 = ((IVY_D-0.5f)-DIST)*CORR;
+    float cx1 = TEXTURE_HEIGHT*(tmp1 + 0.5f);
+    float cy1 = TEXTURE_HEIGHT*(0.5f - tmp1);
+
+    float halfL1 = CORR*TEXTURE_HEIGHT*(1.0f-2*IVY_D);
+
+    canvas.drawArc( left+cx1-halfL1, top+cy1-halfL1, left+cx1+halfL1, top+cy1+halfL1, 270, 90, false, paint);
+
+    float tmp2 = (+0.5f-DIST)*CORR;
+    float tmp3 = (-0.5f-DIST)*CORR;
+
+    float x0 = TEXTURE_HEIGHT*(+tmp2 + 0.5f);
+    float y0 = TEXTURE_HEIGHT*(-tmp3 + 0.5f);
+    float x1 = TEXTURE_HEIGHT*(+tmp2 + 0.5f);
+    float y1 = TEXTURE_HEIGHT*(-tmp2 + 0.5f);
+    float x2 = TEXTURE_HEIGHT*(+tmp3 + 0.5f);
+    float y2 = TEXTURE_HEIGHT*(-tmp2 + 0.5f);
+
+    canvas.drawLine(left+x0,top+y0,left+x1,top+y1,paint);
+    canvas.drawLine(left+x1,top+y1,left+x2,top+y2,paint);
+
+    float tmp4 = ((0.5f-stroke/2-radius/2)-DIST)*CORR;
+    float cx2 = TEXTURE_HEIGHT*(tmp4 + 0.5f);
+    float cy2 = TEXTURE_HEIGHT*(0.5f - tmp4);
+
+    float halfL2 = CORR*TEXTURE_HEIGHT*radius;
+
+    paint.setStrokeWidth(CORR*radius*TEXTURE_HEIGHT);
+    canvas.drawArc( left+cx2-halfL2, top+cy2-halfL2, left+cx2+halfL2, top+cy2+halfL2, 270, 90, false, paint);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// TODO
 
-  void drawIvyCenterSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke)
+  void drawIvyCenterSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke, float radius)
     {
+    paint.setAntiAlias(true);
     paint.setColor(color);
     paint.setStyle(Paint.Style.FILL);
     canvas.drawRect(left,top,left+TEXTURE_HEIGHT,top+TEXTURE_HEIGHT,paint);
@@ -186,17 +219,14 @@ class FactorySticker
     paint.setStyle(Paint.Style.STROKE);
     paint.setStrokeWidth(stroke*TEXTURE_HEIGHT);
 
-    float cx = 0.075f*TEXTURE_HEIGHT;
-    float cy = 0.075f*TEXTURE_HEIGHT;
-
-    float c2 = TEXTURE_HEIGHT*(1.0f-0.0f*IVY_D);
-    float halfL = TEXTURE_HEIGHT*(0.7f - 0.5f*IVY_D);
-
-android.util.Log.e("sitck", "left="+left+" top="+top);
-
-    canvas.drawArc( left+cx-halfL, top+cy-halfL, left+cx+halfL, top+cy+halfL, 280, 80, false, paint);
-   // canvas.drawArc( left+c2-halfL, top+c2-halfL, left+c2+halfL, top+c2+halfL,  90, 90, false, paint);
+    float cx1 = TEXTURE_HEIGHT*IVY_D;
+    float cy1 = TEXTURE_HEIGHT*(1-IVY_D);
+    float cx2 = TEXTURE_HEIGHT*(1.0f-IVY_D);
+    float cy2 = TEXTURE_HEIGHT*IVY_D;
 
+    float halfL = TEXTURE_HEIGHT*(1.0f - 2*IVY_D);
 
+    canvas.drawArc( left+cx1-halfL, top+cy1-halfL, left+cx1+halfL, top+cy1+halfL, 270, 90, false, paint);
+    canvas.drawArc( left+cx2-halfL, top+cy2-halfL, left+cx2+halfL, top+cy2+halfL,  90, 90, false, paint);
     }
   }
diff --git a/src/main/java/org/distorted/objects/TwistyIvy.java b/src/main/java/org/distorted/objects/TwistyIvy.java
index 11857e46..b66817fd 100644
--- a/src/main/java/org/distorted/objects/TwistyIvy.java
+++ b/src/main/java/org/distorted/objects/TwistyIvy.java
@@ -234,15 +234,16 @@ public class TwistyIvy extends TwistyObject
     {
     int COLORS = FACE_COLORS.length;
     FactorySticker factory = FactorySticker.getInstance();
-    float R = 0.01f;
+    float S = 0.08f;
+    float R = 0.06f;
 
     if( face<COLORS )
       {
-      factory.drawIvyCornerSticker(canvas, paint, left, top, FACE_COLORS[face%COLORS], R);
+      factory.drawIvyCornerSticker(canvas, paint, left, top, FACE_COLORS[face%COLORS], S, R);
       }
     else
       {
-      factory.drawIvyCenterSticker(canvas, paint, left, top, FACE_COLORS[face%COLORS], R);
+      factory.drawIvyCenterSticker(canvas, paint, left, top, FACE_COLORS[face%COLORS], S, R);
       }
     }
 
