Project

General

Profile

Download (31 KB) Statistics
| Branch: | Tag: | Revision:

magiccube / src / main / java / org / distorted / control / RubikControlWhole.java @ 05a244ad

1 51f51f83 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2021 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is free software: you can redistribute it and/or modify                            //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Magic Cube is distributed in the hope that it will be useful,                                 //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Magic Cube.  If not, see <http://www.gnu.org/licenses/>.                           //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20
package org.distorted.control;
21
22 45ab4482 Leszek Koltunski
import android.graphics.Bitmap;
23
import android.graphics.BitmapFactory;
24
25 b7e5a0ac Leszek Koltunski
import org.distorted.library.effect.MatrixEffectMove;
26 51f51f83 Leszek Koltunski
import org.distorted.library.effect.MatrixEffectScale;
27
import org.distorted.library.main.DistortedEffects;
28
import org.distorted.library.main.DistortedNode;
29 f7f24f23 Leszek Koltunski
import org.distorted.library.main.DistortedScreen;
30 51f51f83 Leszek Koltunski
import org.distorted.library.main.DistortedTexture;
31
import org.distorted.library.mesh.MeshQuad;
32
import org.distorted.library.type.Dynamic;
33
import org.distorted.library.type.Dynamic3D;
34
import org.distorted.library.type.Static3D;
35 3f7a4363 Leszek Koltunski
36 45ab4482 Leszek Koltunski
import org.distorted.main.R;
37
import org.distorted.main.RubikActivity;
38 8ba7aeb1 Leszek Koltunski
import org.distorted.main.RubikSurfaceView;
39 45ab4482 Leszek Koltunski
40
import java.io.IOException;
41
import java.io.InputStream;
42 51f51f83 Leszek Koltunski
43
///////////////////////////////////////////////////////////////////////////////////////////////////
44
45 1e256a15 Leszek Koltunski
class RubikControlWhole
46 51f51f83 Leszek Koltunski
  {
47 f7f24f23 Leszek Koltunski
  private static final int NUM_NODE = 4;
48
  private static final int NUM_EFFE = 4;
49 51f51f83 Leszek Koltunski
50 6968a6ef Leszek Koltunski
  private static final int D1 = 2600; // time it takes for the finger to appear
51
  private static final int D2 =  250; // finger press
52
  private static final int D3 =10000; // finger triangle
53
  private static final int D4 = 3000; // fingers approach
54 b9d4aa3b Leszek Koltunski
  private static final int D5 = 8000; // fingers circle
55 6968a6ef Leszek Koltunski
56
  private static final int[] DUR = { D1, D2, D3, D2, D1/4, 3*D1/4, D1/4, D2, D4, D5, D4, D2, D1 };
57 33c22e6c Leszek Koltunski
  private static final int[] DYN = { 2, 1, 1, 1, 2, 2, 4, 2, 2, 2, 2, 2, 4};
58 6968a6ef Leszek Koltunski
59 314bffaf Leszek Koltunski
  private float X0, X1, X2, Y1, D, s001, s014, s033, F;
60 8ba7aeb1 Leszek Koltunski
  private int mWidth, mHeight;
61 314bffaf Leszek Koltunski
62 51f51f83 Leszek Koltunski
  private final RubikControl mControl;
63
  private DistortedEffects[] mEffects;
64
  private DistortedNode[] mNodes;
65
  private long mEffectID;
66 1e256a15 Leszek Koltunski
  private int mCurrentStage;
67 ac2ee4b3 Leszek Koltunski
68 8badfe2a Leszek Koltunski
  private MeshQuad mQuad;
69 6968a6ef Leszek Koltunski
  private DistortedTexture mTextureShad, mTextureCirc;
70 ac2ee4b3 Leszek Koltunski
  private Dynamic3D mDynMoveHand1, mDynMoveShad1;
71
  private Dynamic3D mDynScaleHand1, mDynScaleShad1;
72 6968a6ef Leszek Koltunski
  private Dynamic3D mDynMoveHand2, mDynMoveShad2;
73
  private Dynamic3D mDynScaleHand2, mDynScaleShad2;
74 1e256a15 Leszek Koltunski
  private Dynamic3D mDyn1, mDyn2, mDyn3, mDyn4;
75
  private Static3D mPosition1, mPosition2, mPosition3, mPosition4;
76
  private float[] tmpBuffer;
77 314bffaf Leszek Koltunski
  private long mLastTime, mDiffTime;
78
79
///////////////////////////////////////////////////////////////////////////////////////////////////
80
81
   private void setPostFrame(boolean on)
82
     {
83
     RubikActivity act = mControl.getActivity();
84
     act.setControlState(on);
85
     mLastTime = -1;
86
     }
87
88 45ab4482 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
89
90
   private Bitmap openBitmap(RubikActivity act, int resource)
91
     {
92 8badfe2a Leszek Koltunski
     try( InputStream is = act.getResources().openRawResource(resource) )
93 45ab4482 Leszek Koltunski
       {
94
       return BitmapFactory.decodeStream(is);
95
       }
96 8badfe2a Leszek Koltunski
     catch( IOException e )
97 45ab4482 Leszek Koltunski
       {
98
       // ignore
99
       }
100
101
     return null;
102
     }
103
104 ac2ee4b3 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
105
106 6968a6ef Leszek Koltunski
  private void resetDynamics1(int stage)
107
    {
108
    int dur = DUR[stage-1];
109
110
    mDynMoveHand1.removeAll();
111
    mDynMoveShad1.removeAll();
112
    mDynScaleHand1.removeAll();
113
    mDynScaleShad1.removeAll();
114
115
    mDynMoveHand1.setDuration(dur);
116
    mDynMoveShad1.setDuration(dur);
117
    mDynScaleHand1.setDuration(dur);
118
    mDynScaleShad1.setDuration(dur);
119
    mDynMoveHand1.resetToBeginning();
120
    mDynMoveShad1.resetToBeginning();
121
    mDynScaleHand1.resetToBeginning();
122
    mDynScaleShad1.resetToBeginning();
123
124 314bffaf Leszek Koltunski
    mCurrentStage = stage;
125 6968a6ef Leszek Koltunski
    }
126
127
///////////////////////////////////////////////////////////////////////////////////////////////////
128
129
  private void resetDynamics2(int stage)
130
    {
131
    int dur = DUR[stage-1];
132
133
    mDynMoveHand2.removeAll();
134
    mDynMoveShad2.removeAll();
135
    mDynScaleHand2.removeAll();
136
    mDynScaleShad2.removeAll();
137
138
    mDynMoveHand2.setDuration(dur);
139
    mDynMoveShad2.setDuration(dur);
140
    mDynScaleHand2.setDuration(dur);
141
    mDynScaleShad2.setDuration(dur);
142
    mDynMoveHand2.resetToBeginning();
143
    mDynMoveShad2.resetToBeginning();
144
    mDynScaleHand2.resetToBeginning();
145
    mDynScaleShad2.resetToBeginning();
146
    }
147
148 314bffaf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
149
150
  private void resetDynamics3(int stage)
151
    {
152
    int dur = DUR[stage-1];
153
154
    mDyn1.removeAll();
155
    mDyn2.removeAll();
156
    mDyn1.setDuration(dur);
157
    mDyn2.setDuration(dur);
158
    mDyn1.resetToBeginning();
159
    mDyn2.resetToBeginning();
160
    }
161
162 1e256a15 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
163
164
  private void resetDynamics4(int stage)
165
    {
166
    int dur = DUR[stage-1];
167
168
    mDyn3.removeAll();
169
    mDyn4.removeAll();
170
    mDyn3.setDuration(dur);
171
    mDyn4.setDuration(dur);
172
    mDyn3.resetToBeginning();
173
    mDyn4.resetToBeginning();
174
    }
175
176 6968a6ef Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
177
// first finger appears and approaches the screen
178
179
  private void setEffectsStage1()
180 ac2ee4b3 Leszek Koltunski
    {
181 6968a6ef Leszek Koltunski
    resetDynamics1(1);
182
    resetDynamics2(1);
183 1e256a15 Leszek Koltunski
    resetDynamics3(1);
184 6968a6ef Leszek Koltunski
185 314bffaf Leszek Koltunski
    Static3D point0h = new Static3D(-X0    ,-Y1    , 0);
186
    Static3D point1h = new Static3D(-X1    ,-Y1    , 0);
187
    Static3D point2h = new Static3D(-X2    ,-Y1    , 0);
188
    Static3D point3h = new Static3D(-X2  +D,-Y1  +D, 0);
189
    Static3D point0s = new Static3D(-X0+2*D,-Y1+2*D, 0);
190
    Static3D point1s = new Static3D(-X1+2*D,-Y1+2*D, 0);
191
    Static3D point2s = new Static3D(-X2+2*D,-Y1+2*D, 0);
192
    Static3D point3s = new Static3D(-X2  +D,-Y1  +D, 0);
193
194
    Static3D pointSc = new Static3D(s033,s033,s033);
195 ac2ee4b3 Leszek Koltunski
196 1e256a15 Leszek Koltunski
    mDyn1.add(point0h);
197
    mDyn1.add(point1h);
198
    mDyn1.add(point2h);
199
    mDyn1.add(point2h);
200
    mDyn1.add(point3h);
201
    mDyn2.add(point0s);
202
    mDyn2.add(point1s);
203
    mDyn2.add(point2s);
204
    mDyn2.add(point2s);
205
    mDyn2.add(point3s);
206
207
    mPosition1.set(point0h);
208
    mPosition2.set(point0s);
209
210
    mDynMoveHand1.add(mPosition1);
211
    mDynMoveShad1.add(mPosition2);
212
213 ac2ee4b3 Leszek Koltunski
    mDynScaleHand1.add(pointSc);
214
    mDynScaleShad1.add(pointSc);
215
216 1e256a15 Leszek Koltunski
    setPostFrame(true);
217 ac2ee4b3 Leszek Koltunski
    }
218
219
///////////////////////////////////////////////////////////////////////////////////////////////////
220 6968a6ef Leszek Koltunski
// first finger touches the screen
221 ac2ee4b3 Leszek Koltunski
222 6968a6ef Leszek Koltunski
  private void setEffectsStage2()
223 ac2ee4b3 Leszek Koltunski
    {
224 6968a6ef Leszek Koltunski
    resetDynamics1(2);
225 1e256a15 Leszek Koltunski
    resetDynamics3(2);
226 6968a6ef Leszek Koltunski
227 314bffaf Leszek Koltunski
    Static3D point3h = new Static3D(-X2  +D,-Y1  +D, 0);
228
    Static3D scaleS  = new Static3D(s001,s001,s001);
229
    Static3D scaleF  = new Static3D(s014,s014,s014);
230
    Static3D pointH  = new Static3D(s033,s033,s033);
231 ac2ee4b3 Leszek Koltunski
232 1e256a15 Leszek Koltunski
    mPosition1.set(scaleS);
233
    mDyn1.add(scaleS);
234
    mDyn1.add(scaleF);
235
236 ac2ee4b3 Leszek Koltunski
    mDynMoveHand1.add(point3h);
237
    mDynMoveShad1.add(point3h);
238 6968a6ef Leszek Koltunski
    mDynScaleHand1.add(pointH);
239 1e256a15 Leszek Koltunski
    mDynScaleShad1.add(mPosition1);
240 ac2ee4b3 Leszek Koltunski
241 6968a6ef Leszek Koltunski
    mNodes[0].changeInputSurface(mTextureCirc);
242 ac2ee4b3 Leszek Koltunski
    }
243
244
///////////////////////////////////////////////////////////////////////////////////////////////////
245 6968a6ef Leszek Koltunski
// first finger moves across the screen in a triangular fashion
246 ac2ee4b3 Leszek Koltunski
247 6968a6ef Leszek Koltunski
  private void setEffectsStage3()
248 ac2ee4b3 Leszek Koltunski
    {
249 6968a6ef Leszek Koltunski
    resetDynamics1(3);
250 314bffaf Leszek Koltunski
    resetDynamics3(3);
251 6968a6ef Leszek Koltunski
252 314bffaf Leszek Koltunski
    Static3D scaleS = new Static3D(s014,s014,s014);
253
    Static3D pointH = new Static3D(s033,s033,s033);
254
    Static3D point1 = new Static3D(-X2  +D,-Y1  +D, 0);
255
    Static3D point2 = new Static3D(     +D,-Y1  +D, 0);
256
    Static3D point3 = new Static3D(+X2  +D,-Y1  +D, 0);
257
    Static3D point4 = new Static3D(+X2  +D,     +D, 0);
258
    Static3D point5 = new Static3D(+X2  +D,+Y1  +D, 0);
259
    Static3D point6 = new Static3D(     +D,     +D, 0);
260 6968a6ef Leszek Koltunski
261
    mDynScaleHand1.add(pointH);
262
    mDynScaleShad1.add(scaleS);
263
264 314bffaf Leszek Koltunski
    mDyn1.add(point1);
265
    mDyn1.add(point1);
266
    mDyn1.add(point2);
267
    mDyn1.add(point3);
268
    mDyn1.add(point3);
269
    mDyn1.add(point4);
270
    mDyn1.add(point5);
271
    mDyn1.add(point5);
272
    mDyn1.add(point6);
273
    mDyn1.add(point1);
274
    mDyn1.add(point1);
275 6968a6ef Leszek Koltunski
276 314bffaf Leszek Koltunski
    mPosition1.set(point1);
277 6968a6ef Leszek Koltunski
278 314bffaf Leszek Koltunski
    mDynMoveHand1.add(mPosition1);
279
    mDynMoveShad1.add(mPosition1);
280 8ba7aeb1 Leszek Koltunski
281
    RubikSurfaceView view = mControl.getSurfaceView();
282
    float x = point1.get0() + mWidth*0.5f;
283
    float y = mHeight*0.5f - point1.get1();
284 dd1a65c1 Leszek Koltunski
285
    /*
286 8ba7aeb1 Leszek Koltunski
    view.prepareDown();
287
    view.actionDown(x,y);
288 dd1a65c1 Leszek Koltunski
289
     */
290 ac2ee4b3 Leszek Koltunski
    }
291
292 6968a6ef Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
293
// first finger un-touches the screen
294
295
  private void setEffectsStage4()
296
    {
297
    resetDynamics1(4);
298 1e256a15 Leszek Koltunski
    resetDynamics3(4);
299 6968a6ef Leszek Koltunski
300 314bffaf Leszek Koltunski
    Static3D point3h = new Static3D(-X2+D,-Y1+D, 0);
301
    Static3D scaleS  = new Static3D(s014,s014,s014);
302
    Static3D scaleF  = new Static3D(s001,s001,s001);
303
    Static3D pointH  = new Static3D(s033,s033,s033);
304 6968a6ef Leszek Koltunski
305 1e256a15 Leszek Koltunski
    mDyn1.add(scaleS);
306
    mDyn1.add(scaleF);
307
    mPosition1.set(scaleS);
308
309 6968a6ef Leszek Koltunski
    mDynMoveHand1.add(point3h);
310
    mDynMoveShad1.add(point3h);
311
    mDynScaleHand1.add(pointH);
312 1e256a15 Leszek Koltunski
    mDynScaleShad1.add(mPosition1);
313 6968a6ef Leszek Koltunski
    }
314
315
///////////////////////////////////////////////////////////////////////////////////////////////////
316
// first finger un-touches the screen (part2)
317
318
  private void setEffectsStage5()
319
    {
320
    resetDynamics1(5);
321 1e256a15 Leszek Koltunski
    resetDynamics3(5);
322 6968a6ef Leszek Koltunski
323 314bffaf Leszek Koltunski
    Static3D pointH = new Static3D(-X2    ,-Y1    , 0);
324
    Static3D point0 = new Static3D(-X2  +D,-Y1  +D, 0);
325
    Static3D pointS = new Static3D(-X2+2*D,-Y1+2*D, 0);
326
    Static3D pointSc = new Static3D(s033,s033,s033);
327 6968a6ef Leszek Koltunski
328 1e256a15 Leszek Koltunski
    mPosition1.set(point0);
329
    mPosition2.set(point0);
330
331
    mDyn1.add(point0);
332
    mDyn1.add(pointH);
333
    mDyn2.add(point0);
334
    mDyn2.add(pointS);
335
336 6968a6ef Leszek Koltunski
    mDynScaleHand1.add(pointSc);
337
    mDynScaleShad1.add(pointSc);
338 1e256a15 Leszek Koltunski
    mDynMoveHand1.add(mPosition1);
339
    mDynMoveShad1.add(mPosition2);
340 6968a6ef Leszek Koltunski
341
    mNodes[0].changeInputSurface(mTextureShad);
342
    }
343
344
///////////////////////////////////////////////////////////////////////////////////////////////////
345
// second finger appears
346
347
  private void setEffectsStage6()
348
    {
349
    resetDynamics1(6);
350
    resetDynamics2(6);
351 1e256a15 Leszek Koltunski
    resetDynamics3(6);
352 6968a6ef Leszek Koltunski
353 314bffaf Leszek Koltunski
    Static3D pointH = new Static3D(-X2    ,-Y1    , 0);
354
    Static3D pointS = new Static3D(-X2+2*D,-Y1+2*D, 0);
355
    Static3D pointSc= new Static3D(s033,s033,s033);
356 6968a6ef Leszek Koltunski
357
    mDynScaleHand1.add(pointSc);
358
    mDynScaleShad1.add(pointSc);
359
    mDynMoveHand1.add(pointH);
360
    mDynMoveShad1.add(pointS);
361
362 314bffaf Leszek Koltunski
    Static3D point0h = new Static3D( X0    , Y1    , 0);
363
    Static3D point1h = new Static3D( X1    , Y1    , 0);
364
    Static3D point2h = new Static3D( X2    , Y1    , 0);
365
    Static3D point0s = new Static3D( X0+2*D, Y1+2*D, 0);
366
    Static3D point1s = new Static3D( X1+2*D, Y1+2*D, 0);
367
    Static3D point2s = new Static3D( X2+2*D, Y1+2*D, 0);
368 1e256a15 Leszek Koltunski
    Static3D pointSm = new Static3D(-s033,s033,s033);
369
370
    mPosition1.set(point0h);
371
    mPosition2.set(point0s);
372
373
    mDyn1.add(point0h);
374
    mDyn1.add(point1h);
375
    mDyn1.add(point2h);
376
    mDyn1.add(point2h);
377
    mDyn2.add(point0s);
378
    mDyn2.add(point1s);
379
    mDyn2.add(point2s);
380
    mDyn2.add(point2s);
381 6968a6ef Leszek Koltunski
382
    mDynScaleHand2.add(pointSm);
383
    mDynScaleShad2.add(pointSm);
384 1e256a15 Leszek Koltunski
    mDynMoveHand2.add(mPosition1);
385
    mDynMoveShad2.add(mPosition2);
386 6968a6ef Leszek Koltunski
    }
387
388
///////////////////////////////////////////////////////////////////////////////////////////////////
389
// both fingers touch the screen (part1)
390
391
  private void setEffectsStage7()
392
    {
393
    resetDynamics1(7);
394
    resetDynamics2(7);
395 1e256a15 Leszek Koltunski
    resetDynamics3(7);
396
    resetDynamics4(7);
397
398
    Static3D point1Sc= new Static3D( s033,s033,s033);
399
    Static3D point2Sc= new Static3D(-s033,s033,s033);
400
    mDynScaleHand1.add(point1Sc);
401
    mDynScaleShad1.add(point1Sc);
402
    mDynScaleHand2.add(point2Sc);
403
    mDynScaleShad2.add(point2Sc);
404 6968a6ef Leszek Koltunski
405 314bffaf Leszek Koltunski
    Static3D point1H = new Static3D(-X2    ,-Y1    , 0);
406
    Static3D point1F = new Static3D(-X2  +D,-Y1  +D, 0);
407
    Static3D point1S = new Static3D(-X2+2*D,-Y1+2*D, 0);
408 6968a6ef Leszek Koltunski
409 1e256a15 Leszek Koltunski
    mDyn1.add(point1H);
410
    mDyn1.add(point1F);
411
    mDyn2.add(point1S);
412
    mDyn2.add(point1F);
413
414
    mPosition1.set(point1H);
415
    mPosition2.set(point1S);
416
    mDynMoveHand1.add(mPosition1);
417
    mDynMoveShad1.add(mPosition2);
418 6968a6ef Leszek Koltunski
419 314bffaf Leszek Koltunski
    Static3D point2H = new Static3D( X2    , Y1    , 0);
420
    Static3D point2F = new Static3D( X2  +D, Y1  +D, 0);
421
    Static3D point2S = new Static3D( X2+2*D, Y1+2*D, 0);
422 6968a6ef Leszek Koltunski
423 1e256a15 Leszek Koltunski
    mDyn3.add(point2H);
424
    mDyn3.add(point2F);
425
    mDyn4.add(point2S);
426
    mDyn4.add(point2F);
427 6968a6ef Leszek Koltunski
428 1e256a15 Leszek Koltunski
    mPosition3.set(point2H);
429
    mPosition4.set(point2S);
430
    mDynMoveHand2.add(mPosition3);
431
    mDynMoveShad2.add(mPosition4);
432 6968a6ef Leszek Koltunski
    }
433
434
///////////////////////////////////////////////////////////////////////////////////////////////////
435
// both fingers touch the screen (part2)
436
437
  private void setEffectsStage8()
438
    {
439
    resetDynamics1(8);
440
    resetDynamics2(8);
441 1e256a15 Leszek Koltunski
    resetDynamics3(8);
442 6968a6ef Leszek Koltunski
443 314bffaf Leszek Koltunski
    Static3D point1h= new Static3D(-X2  +D,-Y1  +D, 0);
444
    Static3D point2h= new Static3D( X2  +D, Y1  +D, 0);
445
    Static3D scale1S = new Static3D( s001,s001,s001);
446
    Static3D scale1F = new Static3D( s014,s014,s014);
447
    Static3D point1H = new Static3D( s033,s033,s033);
448
    Static3D scale2S = new Static3D(-s001,s001,s001);
449
    Static3D scale2F = new Static3D(-s014,s014,s014);
450
    Static3D point2H = new Static3D(-s033,s033,s033);
451 6968a6ef Leszek Koltunski
452 1e256a15 Leszek Koltunski
    mPosition1.set(scale1S);
453
    mDyn1.add(scale1S);
454
    mDyn1.add(scale1F);
455
456 6968a6ef Leszek Koltunski
    mDynMoveHand1.add(point1h);
457
    mDynMoveShad1.add(point1h);
458
    mDynScaleHand1.add(point1H);
459 1e256a15 Leszek Koltunski
    mDynScaleShad1.add(mPosition1);
460
461
    mPosition2.set(scale2S);
462
    mDyn2.add(scale2S);
463
    mDyn2.add(scale2F);
464 6968a6ef Leszek Koltunski
465
    mDynMoveHand2.add(point2h);
466
    mDynMoveShad2.add(point2h);
467
    mDynScaleHand2.add(point2H);
468 1e256a15 Leszek Koltunski
    mDynScaleShad2.add(mPosition2);
469 6968a6ef Leszek Koltunski
470
    mNodes[0].changeInputSurface(mTextureCirc);
471
    mNodes[1].changeInputSurface(mTextureCirc);
472
    }
473
474
///////////////////////////////////////////////////////////////////////////////////////////////////
475
// both fingers approach each other
476
477
  private void setEffectsStage9()
478
    {
479
    resetDynamics1(9);
480
    resetDynamics2(9);
481 314bffaf Leszek Koltunski
    resetDynamics3(9);
482 6968a6ef Leszek Koltunski
483 967b79dc Leszek Koltunski
    Static3D point1s = new Static3D(-X2+D,-Y1+D, 0);
484
    Static3D point2s = new Static3D( X2+D, Y1+D, 0);
485
    Static3D point1f = new Static3D(-Y1*F,-Y1*F, 0);
486
    Static3D point2f = new Static3D( Y1*F, Y1*F, 0);
487 314bffaf Leszek Koltunski
    Static3D scale1F = new Static3D( s014,s014,s014);
488
    Static3D point1H = new Static3D( s033,s033,s033);
489
    Static3D scale2F = new Static3D(-s014,s014,s014);
490
    Static3D point2H = new Static3D(-s033,s033,s033);
491 6968a6ef Leszek Koltunski
492
    mDynScaleHand1.add(point1H);
493
    mDynScaleShad1.add(scale1F);
494
    mDynScaleHand2.add(point2H);
495
    mDynScaleShad2.add(scale2F);
496
497 314bffaf Leszek Koltunski
    mDyn1.add(point1s);
498
    mDyn1.add(point1f);
499
    mDyn2.add(point2s);
500
    mDyn2.add(point2f);
501
502
    mPosition1.set(point1s);
503
    mPosition2.set(point2s);
504
505
    mDynMoveHand1.add(mPosition1);
506
    mDynMoveShad1.add(mPosition1);
507
    mDynMoveHand2.add(mPosition2);
508
    mDynMoveShad2.add(mPosition2);
509 a034956d Leszek Koltunski
510
    float x1 = point1s.get0() + mWidth*0.5f;
511
    float y1 = mHeight*0.5f - point1s.get1();
512
    float x2 = point2s.get0() + mWidth*0.5f;
513
    float y2 = mHeight*0.5f - point2s.get1();
514
515
    RubikSurfaceView view = mControl.getSurfaceView();
516 dd1a65c1 Leszek Koltunski
517
    /*
518 a034956d Leszek Koltunski
    view.prepareDown();
519
    view.prepareDown2();
520
    view.actionDown(x1,y1);
521
    view.actionDown2(x1,y1,x2,y2);
522 dd1a65c1 Leszek Koltunski
523
     */
524 6968a6ef Leszek Koltunski
    }
525
526
///////////////////////////////////////////////////////////////////////////////////////////////////
527
// both fingers go around
528
529
  private void setEffectsStage10()
530
    {
531
    resetDynamics1(10);
532
    resetDynamics2(10);
533 1e256a15 Leszek Koltunski
    resetDynamics3(10);
534 6968a6ef Leszek Koltunski
535 314bffaf Leszek Koltunski
    Static3D scale1F = new Static3D( s014,s014,s014);
536
    Static3D point1H = new Static3D( s033,s033,s033);
537
    Static3D scale2F = new Static3D(-s014,s014,s014);
538
    Static3D point2H = new Static3D(-s033,s033,s033);
539 6968a6ef Leszek Koltunski
540 967b79dc Leszek Koltunski
    Static3D point0= new Static3D(-Y1*F,-Y1*F, 0);
541
    Static3D point1= new Static3D(-Y1*F, Y1*F, 0);
542
    Static3D point2= new Static3D( Y1*F, Y1*F, 0);
543
    Static3D point3= new Static3D( Y1*F,-Y1*F, 0);
544 6968a6ef Leszek Koltunski
545
    mDynScaleHand1.add(point1H);
546
    mDynScaleShad1.add(scale1F);
547
    mDynScaleHand2.add(point2H);
548
    mDynScaleShad2.add(scale2F);
549
550 1e256a15 Leszek Koltunski
    mDyn1.add(point0);
551
    mDyn1.add(point1);
552
    mDyn1.add(point2);
553
    mDyn1.add(point3);
554
    mDyn1.add(point0);
555 834b2618 Leszek Koltunski
556 1e256a15 Leszek Koltunski
    mDyn2.add(point2);
557
    mDyn2.add(point3);
558
    mDyn2.add(point0);
559
    mDyn2.add(point1);
560
    mDyn2.add(point2);
561
562
    mDyn1.setConvexity(1.0f);
563
    mDyn2.setConvexity(1.0f);
564
565 834b2618 Leszek Koltunski
    mDyn1.setSpeedMode(Dynamic.SPEED_MODE_SEGMENT_CONSTANT);
566
    mDyn2.setSpeedMode(Dynamic.SPEED_MODE_SEGMENT_CONSTANT);
567
568 1e256a15 Leszek Koltunski
    mPosition1.set(point0);
569
    mPosition2.set(point2);
570
571
    mDynMoveHand1.add(mPosition1);
572
    mDynMoveShad1.add(mPosition1);
573
    mDynMoveHand2.add(mPosition2);
574
    mDynMoveShad2.add(mPosition2);
575 6968a6ef Leszek Koltunski
    }
576
577
///////////////////////////////////////////////////////////////////////////////////////////////////
578
// both fingers move away from each other
579
580
  private void setEffectsStage11()
581
    {
582
    resetDynamics1(11);
583
    resetDynamics2(11);
584 1e256a15 Leszek Koltunski
    resetDynamics3(11);
585 6968a6ef Leszek Koltunski
586 967b79dc Leszek Koltunski
    Static3D point1s= new Static3D(-X2+D,-Y1+D, 0);
587
    Static3D point2s= new Static3D( X2+D, Y1+D, 0);
588
    Static3D point1f= new Static3D(-Y1*F,-Y1*F, 0);
589
    Static3D point2f= new Static3D( Y1*F, Y1*F, 0);
590 314bffaf Leszek Koltunski
    Static3D scale1F= new Static3D( s014,s014,s014);
591
    Static3D point1H= new Static3D( s033,s033,s033);
592
    Static3D scale2F= new Static3D(-s014,s014,s014);
593
    Static3D point2H= new Static3D(-s033,s033,s033);
594 6968a6ef Leszek Koltunski
595
    mDynScaleHand1.add(point1H);
596
    mDynScaleShad1.add(scale1F);
597
    mDynScaleHand2.add(point2H);
598
    mDynScaleShad2.add(scale2F);
599
600 1e256a15 Leszek Koltunski
    mDyn1.add(point1f);
601
    mDyn1.add(point1s);
602
    mDyn2.add(point2f);
603
    mDyn2.add(point2s);
604
605
    mDyn1.setConvexity(0.0f);
606
    mDyn2.setConvexity(0.0f);
607
608 834b2618 Leszek Koltunski
    mDyn1.setSpeedMode(Dynamic.SPEED_MODE_SMOOTH);
609
    mDyn2.setSpeedMode(Dynamic.SPEED_MODE_SMOOTH);
610
611 1e256a15 Leszek Koltunski
    mPosition1.set(point1f);
612
    mPosition2.set(point2f);
613
614
    mDynMoveHand1.add(mPosition1);
615
    mDynMoveShad1.add(mPosition1);
616
    mDynMoveHand2.add(mPosition2);
617
    mDynMoveShad2.add(mPosition2);
618 6968a6ef Leszek Koltunski
    }
619
620
///////////////////////////////////////////////////////////////////////////////////////////////////
621
// both fingers un-touch the screen (part1)
622
623
  private void setEffectsStage12()
624
    {
625
    resetDynamics1(12);
626
    resetDynamics2(12);
627 1e256a15 Leszek Koltunski
    resetDynamics3(12);
628 6968a6ef Leszek Koltunski
629 314bffaf Leszek Koltunski
    Static3D point1h = new Static3D(-X2+D,-Y1+D, 0);
630
    Static3D point2h = new Static3D( X2+D, Y1+D, 0);
631
    Static3D scale1S = new Static3D( s014,s014,s014);
632
    Static3D scale1F = new Static3D( s001,s001,s001);
633
    Static3D point1H = new Static3D( s033,s033,s033);
634
    Static3D scale2S = new Static3D(-s014,s014,s014);
635
    Static3D scale2F = new Static3D(-s001,s001,s001);
636
    Static3D point2H = new Static3D(-s033,s033,s033);
637 6968a6ef Leszek Koltunski
638 1e256a15 Leszek Koltunski
    mPosition1.set(scale1S);
639
    mPosition2.set(scale2S);
640
641
    mDyn1.add(scale1S);
642
    mDyn1.add(scale1F);
643
    mDyn2.add(scale2S);
644
    mDyn2.add(scale2F);
645
646 6968a6ef Leszek Koltunski
    mDynMoveHand1.add(point1h);
647
    mDynMoveShad1.add(point1h);
648
    mDynScaleHand1.add(point1H);
649 1e256a15 Leszek Koltunski
    mDynScaleShad1.add(mPosition1);
650 6968a6ef Leszek Koltunski
651
    mDynMoveHand2.add(point2h);
652
    mDynMoveShad2.add(point2h);
653
    mDynScaleHand2.add(point2H);
654 1e256a15 Leszek Koltunski
    mDynScaleShad2.add(mPosition2);
655 6968a6ef Leszek Koltunski
    }
656
657
///////////////////////////////////////////////////////////////////////////////////////////////////
658
// both fingers un-touch the screen (part2)
659
660
  private void setEffectsStage13()
661
    {
662
    resetDynamics1(13);
663
    resetDynamics2(13);
664 1e256a15 Leszek Koltunski
    resetDynamics3(13);
665
    resetDynamics4(13);
666 6968a6ef Leszek Koltunski
667 314bffaf Leszek Koltunski
    Static3D point1_0 = new Static3D(-X2  +D,-Y1  +D, 0);
668
    Static3D point11H = new Static3D(-X2    ,-Y1    , 0);
669
    Static3D point12H = new Static3D(-X1    ,-Y1    , 0);
670
    Static3D point13H = new Static3D(-X0    ,-Y1    , 0);
671
    Static3D point11S = new Static3D(-X2+2*D,-Y1+2*D, 0);
672
    Static3D point12S = new Static3D(-X1+2*D,-Y1+2*D, 0);
673
    Static3D point13S = new Static3D(-X0+2*D,-Y1+2*D, 0);
674
    Static3D point1Sc = new Static3D( s033,s033,s033);
675 6968a6ef Leszek Koltunski
676 1e256a15 Leszek Koltunski
    mPosition1.set(point1_0);
677
    mDynMoveHand1.add(mPosition1);
678
    mPosition2.set(point1_0);
679
    mDynMoveShad1.add(mPosition2);
680
681 6968a6ef Leszek Koltunski
    mDynScaleHand1.add(point1Sc);
682
    mDynScaleShad1.add(point1Sc);
683 1e256a15 Leszek Koltunski
684
    mDyn1.add(point1_0);
685
    mDyn1.add(point11H);
686
    mDyn1.add(point11H);
687
    mDyn1.add(point12H);
688
    mDyn1.add(point13H);
689
690
    mDyn2.add(point1_0);
691
    mDyn2.add(point11S);
692
    mDyn2.add(point11S);
693
    mDyn2.add(point12S);
694
    mDyn2.add(point13S);
695 6968a6ef Leszek Koltunski
696 314bffaf Leszek Koltunski
    Static3D point2_0 = new Static3D( X2  +D, Y1  +D, 0);
697
    Static3D point21H = new Static3D( X2    , Y1    , 0);
698
    Static3D point22H = new Static3D( X1    , Y1    , 0);
699
    Static3D point23H = new Static3D( X0    , Y1    , 0);
700
    Static3D point21S = new Static3D( X2+2*D, Y1+2*D, 0);
701
    Static3D point22S = new Static3D( X1+2*D, Y1+2*D, 0);
702
    Static3D point23S = new Static3D( X0+2*D, Y1+2*D, 0);
703
    Static3D point2Sc= new Static3D(-s033,s033,s033);
704 6968a6ef Leszek Koltunski
705 1e256a15 Leszek Koltunski
    mPosition3.set(point2_0);
706
    mDynMoveHand2.add(mPosition3);
707
    mPosition4.set(point2_0);
708
    mDynMoveShad2.add(mPosition4);
709
710 6968a6ef Leszek Koltunski
    mDynScaleHand2.add(point2Sc);
711
    mDynScaleShad2.add(point2Sc);
712 1e256a15 Leszek Koltunski
713
    mDyn3.add(point2_0);
714
    mDyn3.add(point21H);
715
    mDyn3.add(point21H);
716
    mDyn3.add(point22H);
717
    mDyn3.add(point23H);
718
719
    mDyn4.add(point2_0);
720
    mDyn4.add(point21S);
721
    mDyn4.add(point21S);
722
    mDyn4.add(point22S);
723
    mDyn4.add(point23S);
724 6968a6ef Leszek Koltunski
725
    mNodes[0].changeInputSurface(mTextureShad);
726
    mNodes[1].changeInputSurface(mTextureShad);
727
    }
728
729 51f51f83 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
730
731
  private void createEffects()
732
    {
733 6968a6ef Leszek Koltunski
    mEffects = new DistortedEffects[NUM_EFFE];
734
    for(int i=0; i<NUM_EFFE; i++) mEffects[i]= new DistortedEffects();
735
736
    int time = DUR[0];
737
738 314bffaf Leszek Koltunski
    mDyn1 = new Dynamic3D(time,0.5f);
739
    mDyn1.setMode(Dynamic.MODE_PATH);
740
    mDyn1.setConvexity(0.0f);
741
    mDyn2 = new Dynamic3D(time,0.5f);
742
    mDyn2.setMode(Dynamic.MODE_PATH);
743
    mDyn2.setConvexity(0.0f);
744 1e256a15 Leszek Koltunski
    mDyn3 = new Dynamic3D(time,0.5f);
745
    mDyn3.setMode(Dynamic.MODE_PATH);
746
    mDyn3.setConvexity(0.0f);
747
    mDyn4 = new Dynamic3D(time,0.5f);
748
    mDyn4.setMode(Dynamic.MODE_PATH);
749
    mDyn4.setConvexity(0.0f);
750 314bffaf Leszek Koltunski
751
    mPosition1 = new Static3D(0,0,0);
752
    mPosition2 = new Static3D(0,0,0);
753 1e256a15 Leszek Koltunski
    mPosition3 = new Static3D(0,0,0);
754
    mPosition4 = new Static3D(0,0,0);
755 314bffaf Leszek Koltunski
756 1e256a15 Leszek Koltunski
    tmpBuffer = new float[12];
757 314bffaf Leszek Koltunski
758 6968a6ef Leszek Koltunski
    mDynMoveHand1 = new Dynamic3D(time,0.5f);
759
    mDynMoveHand1.setMode(Dynamic.MODE_PATH);
760
    mDynMoveHand1.setConvexity(0.0f);
761
    mDynMoveShad1 = new Dynamic3D(time,0.5f);
762
    mDynMoveShad1.setMode(Dynamic.MODE_PATH);
763
    mDynMoveShad1.setConvexity(0.0f);
764
    mDynScaleHand1 = new Dynamic3D(time,0.5f);
765
    mDynScaleHand1.setMode(Dynamic.MODE_PATH);
766
    mDynScaleHand1.setConvexity(0.0f);
767
    mDynScaleShad1 = new Dynamic3D(time,0.5f);
768
    mDynScaleShad1.setMode(Dynamic.MODE_PATH);
769
    mDynScaleShad1.setConvexity(0.0f);
770
771 9205f15e Leszek Koltunski
    MatrixEffectMove  moveHand1 = new MatrixEffectMove(mDynMoveHand1);
772
    MatrixEffectMove  moveShad1 = new MatrixEffectMove(mDynMoveShad1);
773
    MatrixEffectScale scaleHand1= new MatrixEffectScale(mDynScaleHand1);
774
    MatrixEffectScale scaleShad1= new MatrixEffectScale(mDynScaleShad1);
775 6968a6ef Leszek Koltunski
776 9205f15e Leszek Koltunski
    mEffects[0].apply(scaleShad1);
777
    mEffects[0].apply(moveShad1);
778
    mEffects[2].apply(scaleHand1);
779
    mEffects[2].apply(moveHand1);
780 6968a6ef Leszek Koltunski
781
    mDynMoveHand2 = new Dynamic3D(time,0.5f);
782
    mDynMoveHand2.setMode(Dynamic.MODE_PATH);
783
    mDynMoveHand2.setConvexity(0.0f);
784
    mDynMoveShad2 = new Dynamic3D(time,0.5f);
785
    mDynMoveShad2.setMode(Dynamic.MODE_PATH);
786
    mDynMoveShad2.setConvexity(0.0f);
787
    mDynScaleHand2 = new Dynamic3D(time,0.5f);
788
    mDynScaleHand2.setMode(Dynamic.MODE_PATH);
789
    mDynScaleHand2.setConvexity(0.0f);
790
    mDynScaleShad2 = new Dynamic3D(time,0.5f);
791
    mDynScaleShad2.setMode(Dynamic.MODE_PATH);
792
    mDynScaleShad2.setConvexity(0.0f);
793
794 9205f15e Leszek Koltunski
    MatrixEffectMove  moveHand2 = new MatrixEffectMove(mDynMoveHand2);
795
    MatrixEffectMove  moveShad2 = new MatrixEffectMove(mDynMoveShad2);
796
    MatrixEffectScale scaleHand2= new MatrixEffectScale(mDynScaleHand2);
797
    MatrixEffectScale scaleShad2= new MatrixEffectScale(mDynScaleShad2);
798 6968a6ef Leszek Koltunski
799 9205f15e Leszek Koltunski
    mEffects[1].apply(scaleShad2);
800
    mEffects[1].apply(moveShad2);
801
    mEffects[3].apply(scaleHand2);
802
    mEffects[3].apply(moveHand2);
803 6968a6ef Leszek Koltunski
804
    DistortedScreen screen = mControl.getScreen();
805 8ba7aeb1 Leszek Koltunski
    mWidth = screen.getWidth();
806
    mHeight= screen.getHeight();
807
808
    X0   = mWidth*0.65f;
809
    X1   = mWidth*0.50f;
810
    X2   = mWidth*0.35f;
811
    Y1   = mHeight*0.28f;
812
    D    = mWidth*0.01f;
813
    s001 = mWidth*0.0001f;
814
    s014 = mWidth*0.14f;
815
    s033 = mWidth*0.33f;
816 967b79dc Leszek Koltunski
    F    = 0.50f;
817 51f51f83 Leszek Koltunski
    }
818
819
///////////////////////////////////////////////////////////////////////////////////////////////////
820
821
  private void createNodes()
822
    {
823
    if( mNodes==null )
824
      {
825
      mNodes = new DistortedNode[NUM_NODE];
826 8badfe2a Leszek Koltunski
      mQuad  = new MeshQuad();
827
      }
828
829
    RubikActivity act = mControl.getActivity();
830
831
    if( act!=null )
832
      {
833
      Bitmap bmpCirc = openBitmap(act, R.drawable.ui_fading_circle);
834 ac2ee4b3 Leszek Koltunski
      Bitmap bmpShad = openBitmap(act, R.drawable.ui_hand_shadow);
835 8badfe2a Leszek Koltunski
      Bitmap bmpHand = openBitmap(act, R.drawable.ui_hand_pointer);
836 ac2ee4b3 Leszek Koltunski
837
      mTextureCirc = new DistortedTexture();
838
      mTextureShad = new DistortedTexture();
839 6968a6ef Leszek Koltunski
      DistortedTexture textureHand = new DistortedTexture();
840 b9d4aa3b Leszek Koltunski
841
      if( bmpCirc!=null ) mTextureCirc.setTexture(bmpCirc);
842
      if( bmpShad!=null ) mTextureShad.setTexture(bmpShad);
843
      if( bmpHand!=null ) textureHand.setTexture(bmpHand);
844 ac2ee4b3 Leszek Koltunski
845
      mNodes[0]= new DistortedNode(mTextureShad,mEffects[0],mQuad);
846
      mNodes[1]= new DistortedNode(mTextureShad,mEffects[1],mQuad);
847 6968a6ef Leszek Koltunski
      mNodes[2]= new DistortedNode( textureHand,mEffects[2],mQuad);
848
      mNodes[3]= new DistortedNode( textureHand,mEffects[3],mQuad);
849 8badfe2a Leszek Koltunski
      }
850
    else
851
      {
852
      android.util.Log.e("D", "Activity NULL!!");
853 51f51f83 Leszek Koltunski
      }
854
    }
855
856
///////////////////////////////////////////////////////////////////////////////////////////////////
857
858
  long getEffectID()
859
    {
860
    return mEffectID;
861
    }
862
863
///////////////////////////////////////////////////////////////////////////////////////////////////
864
865
  DistortedNode[] getNodes()
866
    {
867 6968a6ef Leszek Koltunski
    if( mEffects==null ) createEffects();
868 51f51f83 Leszek Koltunski
    createNodes();
869 6968a6ef Leszek Koltunski
    setEffectsStage1();
870 51f51f83 Leszek Koltunski
871
    return mNodes;
872
    }
873
874
///////////////////////////////////////////////////////////////////////////////////////////////////
875
876
  DistortedNode[] returnNodes()
877
    {
878
    return mNodes;
879
    }
880
881
///////////////////////////////////////////////////////////////////////////////////////////////////
882
883
  RubikControlWhole(RubikControl control)
884
    {
885
    mControl = control;
886
    }
887 ac2ee4b3 Leszek Koltunski
888 33c22e6c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
889
890
  private void stageFinished(int stage)
891
    {
892
    switch(stage)
893
      {
894 9205f15e Leszek Koltunski
      case  1: setEffectsStage2() ; break;
895
      case  2: setEffectsStage3() ; break;
896
      case  3: setEffectsStage4() ; break;
897
      case  4: setEffectsStage5() ; break;
898
      case  5: setEffectsStage6() ; break;
899
      case  6: setEffectsStage7() ; break;
900
      case  7: setEffectsStage8() ; break;
901
      case  8: setEffectsStage9() ; break;
902 33c22e6c Leszek Koltunski
      case  9: setEffectsStage10(); break;
903
      case 10: setEffectsStage11(); break;
904
      case 11: setEffectsStage12(); break;
905
      case 12: setEffectsStage13(); break;
906
      default: setPostFrame(false);
907
               mEffectID = -1;
908
               mControl.effectFinished(mEffectID);
909
      }
910
    }
911
912 ac2ee4b3 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
913
// PUBLIC
914
915 314bffaf Leszek Koltunski
  public void postDrawFrame(long time)
916
    {
917
    if( mLastTime<0 ) mLastTime = time;
918
    else mDiffTime = time - mLastTime;
919
    mLastTime = time;
920
921 33c22e6c Leszek Koltunski
    switch(DYN[mCurrentStage-1])
922 314bffaf Leszek Koltunski
      {
923 33c22e6c Leszek Koltunski
      case 1: boolean finished1 = mDyn1.get( tmpBuffer,0, time, mDiffTime);
924
              mPosition1.set(tmpBuffer[0], tmpBuffer[1], tmpBuffer[2]);
925 8ba7aeb1 Leszek Koltunski
926
              if( mCurrentStage==3 )
927
                {
928
                RubikSurfaceView view = mControl.getSurfaceView();
929 a034956d Leszek Koltunski
                float x1 = tmpBuffer[0]+mWidth*0.5f;
930
                float y1 = mHeight*0.5f-tmpBuffer[1];
931 dd1a65c1 Leszek Koltunski
                //view.actionMove(x1,y1,0,0);
932 8ba7aeb1 Leszek Koltunski
                }
933
934
              if( finished1 )
935
                {
936
                if( mCurrentStage==3 )
937
                  {
938
                  RubikSurfaceView view = mControl.getSurfaceView();
939 dd1a65c1 Leszek Koltunski
                  //view.prepareUp();
940
                  //view.actionUp();
941 8ba7aeb1 Leszek Koltunski
                  }
942
943
                stageFinished(mCurrentStage);
944
                }
945 33c22e6c Leszek Koltunski
              break;
946
      case 2: boolean finished2_1 = mDyn1.get( tmpBuffer,0, time, mDiffTime);
947
              boolean finished2_2 = mDyn2.get( tmpBuffer,3, time, mDiffTime);
948
              mPosition1.set(tmpBuffer[0], tmpBuffer[1], tmpBuffer[2]);
949
              mPosition2.set(tmpBuffer[3], tmpBuffer[4], tmpBuffer[5]);
950 a034956d Leszek Koltunski
951
              if( mCurrentStage==9 || mCurrentStage==10 || mCurrentStage==11 )
952
                {
953
                RubikSurfaceView view = mControl.getSurfaceView();
954
                float x1 = tmpBuffer[0]+mWidth*0.5f;
955
                float y1 = mHeight*0.5f-tmpBuffer[1];
956
                float x2 = tmpBuffer[3]+mWidth*0.5f;
957
                float y2 = mHeight*0.5f-tmpBuffer[4];
958 dd1a65c1 Leszek Koltunski
                //view.prepareMove(x1,y1,x2,y2);
959
                //view.actionMove(x1,y1,x2,y2);
960 a034956d Leszek Koltunski
                }
961
962
              if( finished2_1 && finished2_2 )
963
                {
964
                 if( mCurrentStage==11 )
965
                  {
966
                  RubikSurfaceView view = mControl.getSurfaceView();
967 dd1a65c1 Leszek Koltunski
                  //view.prepareUp();
968
                  //view.actionUp2(true,0,0,false,0,0);
969
                  //view.actionUp();
970 a034956d Leszek Koltunski
                  }
971
972
                stageFinished(mCurrentStage);
973
                }
974 33c22e6c Leszek Koltunski
              break;
975
      case 4: boolean finished4_1 = mDyn1.get( tmpBuffer,0, time, mDiffTime);
976
              boolean finished4_2 = mDyn2.get( tmpBuffer,3, time, mDiffTime);
977
              boolean finished4_3 = mDyn3.get( tmpBuffer,6, time, mDiffTime);
978
              boolean finished4_4 = mDyn4.get( tmpBuffer,9, time, mDiffTime);
979
              mPosition1.set(tmpBuffer[0], tmpBuffer[ 1], tmpBuffer[ 2]);
980
              mPosition2.set(tmpBuffer[3], tmpBuffer[ 4], tmpBuffer[ 5]);
981
              mPosition3.set(tmpBuffer[6], tmpBuffer[ 7], tmpBuffer[ 8]);
982
              mPosition4.set(tmpBuffer[9], tmpBuffer[10], tmpBuffer[11]);
983
              if( finished4_1 && finished4_2 && finished4_3 && finished4_4 ) stageFinished(mCurrentStage);
984
              break;
985 314bffaf Leszek Koltunski
      }
986
    }
987 51f51f83 Leszek Koltunski
  }