Revision 64975793
Added by Leszek Koltunski over 4 years ago
src/main/java/org/distorted/magic/RubikRenderer.java | ||
---|---|---|
21 | 21 |
|
22 | 22 |
import android.opengl.GLSurfaceView; |
23 | 23 |
|
24 |
import org.distorted.effect.SizeChangeEffect; |
|
25 |
import org.distorted.effect.SolveEffect; |
|
26 |
import org.distorted.effect.ScrambleEffect; |
|
24 |
import org.distorted.effect.BaseEffect; |
|
27 | 25 |
import org.distorted.library.effect.VertexEffectSink; |
28 | 26 |
import org.distorted.library.main.DistortedEffects; |
29 | 27 |
import org.distorted.library.main.DistortedLibrary; |
... | ... | |
50 | 48 |
private Static4D mTempCurrent, mTempAccumulated; |
51 | 49 |
private float mCubeSizeInScreenSpace; |
52 | 50 |
private int mNextCubeSize, mScrambleCubeNum; |
53 |
private long mRotationFinishedID, mSizeChangeEffectID, mSolveEffectID, mScrambleEffectID; |
|
51 |
private long mRotationFinishedID; |
|
52 |
private long[] mEffectID; |
|
54 | 53 |
private boolean mFinishRotation, mRemoveRotation, mFinishDragCurrent, mFinishDragAccumulated, mSolveCube, mScrambleCube; |
55 | 54 |
private boolean mCanRotate, mCanDrag, mCanScramble, mCanSolve; |
56 | 55 |
private RubikCube mOldCube, mNewCube; |
... | ... | |
88 | 87 |
mCanScramble = true; |
89 | 88 |
mCanSolve = true; |
90 | 89 |
|
90 |
mEffectID = new long[BaseEffect.Type.LENGTH]; |
|
91 |
|
|
91 | 92 |
mMesh= new MeshFlat(20,20); |
92 | 93 |
mNextCubeSize =RubikActivity.getSize(); |
93 | 94 |
} |
... | ... | |
130 | 131 |
if( mNextCubeSize!=0 ) |
131 | 132 |
{ |
132 | 133 |
createCubeNow(mNextCubeSize); |
133 |
|
|
134 | 134 |
mCanDrag = false; |
135 | 135 |
mCanRotate = false; |
136 | 136 |
mNextCubeSize = 0; |
137 |
changeSizeNow();
|
|
137 |
doEffectNow(0);
|
|
138 | 138 |
} |
139 | 139 |
|
140 | 140 |
if( mSolveCube ) |
... | ... | |
144 | 144 |
mCanRotate = false; |
145 | 145 |
mCanScramble = false; |
146 | 146 |
mCanSolve = false; |
147 |
solveCubeNow();
|
|
147 |
doEffectNow(1);
|
|
148 | 148 |
} |
149 | 149 |
|
150 | 150 |
if( mScrambleCube ) |
... | ... | |
154 | 154 |
mCanRotate = false; |
155 | 155 |
mCanScramble = false; |
156 | 156 |
mCanSolve = false; |
157 |
scrambleCubeNow();
|
|
157 |
doEffectNow(2);
|
|
158 | 158 |
} |
159 | 159 |
} |
160 | 160 |
|
... | ... | |
185 | 185 |
public void onSurfaceCreated(GL10 glUnused, EGLConfig config) |
186 | 186 |
{ |
187 | 187 |
VertexEffectSink.enable(); |
188 |
SizeChangeEffect.enableEffects(); |
|
189 |
ScrambleEffect.enableEffects(); |
|
190 |
SolveEffect.enableEffects(); |
|
188 |
BaseEffect.Type.enableEffects(); |
|
191 | 189 |
|
192 | 190 |
try |
193 | 191 |
{ |
... | ... | |
207 | 205 |
{ |
208 | 206 |
mRemoveRotation = true; |
209 | 207 |
} |
210 |
else if( effectID == mSizeChangeEffectID )
|
|
208 |
else if( effectID == mEffectID[0] )
|
|
211 | 209 |
{ |
212 | 210 |
mCanRotate = true; |
213 | 211 |
mCanDrag = true; |
214 | 212 |
} |
215 |
else if( effectID == mSolveEffectID )
|
|
213 |
else if( effectID == mEffectID[1] )
|
|
216 | 214 |
{ |
217 | 215 |
mCanRotate = true; |
218 | 216 |
mCanDrag = true; |
219 | 217 |
mCanSolve = true; |
220 | 218 |
mCanScramble = true; |
221 | 219 |
} |
222 |
else if( effectID == mScrambleEffectID )
|
|
220 |
else if( effectID == mEffectID[2] )
|
|
223 | 221 |
{ |
224 | 222 |
mCanRotate = true; |
225 | 223 |
mCanDrag = true; |
... | ... | |
311 | 309 |
|
312 | 310 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
313 | 311 |
|
314 |
private void changeSizeNow()
|
|
312 |
private void doEffectNow(int index)
|
|
315 | 313 |
{ |
316 |
try |
|
317 |
{ |
|
318 |
int pos0 = RubikSettingsEnum.getEnum(0).getCurrentPos(); |
|
319 |
int typ0 = RubikSettingsEnum.getEnum(0).getCurrentType(); |
|
320 |
int pos = RubikSettingsEnum.translatePos(pos0)+1; |
|
321 |
SizeChangeEffect effect = SizeChangeEffect.create(typ0); |
|
322 |
mSizeChangeEffectID = effect.start(pos,mScreen,mOldCube,mNewCube,this); |
|
323 |
} |
|
324 |
catch(Exception ex) |
|
325 |
{ |
|
326 |
android.util.Log.e("Renderer", "failed to create SizeChangeEffect, exception: "+ex.getMessage()); |
|
314 |
mEffectID[index] = BaseEffect.Type.getType(index).startEffect(this); |
|
327 | 315 |
|
328 |
if( mOldCube!=null ) mScreen.detach(mOldCube);
|
|
329 |
mScreen.attach(mNewCube);
|
|
316 |
if( mEffectID[index] == -1 )
|
|
317 |
{
|
|
330 | 318 |
mCanRotate = true; |
331 | 319 |
mCanDrag = true; |
332 | 320 |
} |
... | ... | |
334 | 322 |
|
335 | 323 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
336 | 324 |
|
337 |
private void solveCubeNow()
|
|
325 |
float returnCubeSizeInScreenSpace()
|
|
338 | 326 |
{ |
339 |
try |
|
340 |
{ |
|
341 |
int pos1 = RubikSettingsEnum.getEnum(1).getCurrentPos(); |
|
342 |
int typ1 = RubikSettingsEnum.getEnum(1).getCurrentType(); |
|
343 |
int pos = RubikSettingsEnum.translatePos(pos1)+1; |
|
344 |
SolveEffect effect = SolveEffect.create(typ1); |
|
345 |
mSolveEffectID = effect.start(pos,mScreen,mNewCube,this); |
|
346 |
} |
|
347 |
catch(Exception ex) |
|
348 |
{ |
|
349 |
android.util.Log.e("Renderer", "failed to create SolveEffect, exception: "+ex.getMessage()); |
|
350 |
|
|
351 |
mNewCube.solve(); // |
|
352 |
mCanRotate = true; // just solve the cube |
|
353 |
mCanDrag = true; // |
|
354 |
} |
|
327 |
return mCubeSizeInScreenSpace; |
|
355 | 328 |
} |
356 | 329 |
|
357 | 330 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
358 | 331 |
|
359 |
private void scrambleCubeNow()
|
|
332 |
boolean canRotate()
|
|
360 | 333 |
{ |
361 |
try |
|
362 |
{ |
|
363 |
int pos2 = RubikSettingsEnum.getEnum(2).getCurrentPos(); |
|
364 |
int typ2 = RubikSettingsEnum.getEnum(2).getCurrentType(); |
|
365 |
int pos = RubikSettingsEnum.translatePos(pos2)+1; |
|
366 |
ScrambleEffect effect = ScrambleEffect.create(typ2); |
|
367 |
mScrambleEffectID = effect.start(pos,mNewCube,mScrambleCubeNum,this); |
|
368 |
} |
|
369 |
catch(Exception ex) |
|
370 |
{ |
|
371 |
android.util.Log.e("Renderer", "failed to create ScrambleEffect, exception: "+ex.getMessage()); |
|
334 |
return mCanRotate; |
|
335 |
} |
|
372 | 336 |
|
373 |
mCanRotate = true; |
|
374 |
mCanDrag = true; |
|
375 |
} |
|
337 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
338 |
|
|
339 |
boolean canDrag() |
|
340 |
{ |
|
341 |
return mCanDrag; |
|
376 | 342 |
} |
377 | 343 |
|
378 | 344 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
379 | 345 |
|
380 |
float returnCubeSizeInScreenSpace()
|
|
346 |
public RubikCube getCube()
|
|
381 | 347 |
{ |
382 |
return mCubeSizeInScreenSpace;
|
|
348 |
return mNewCube;
|
|
383 | 349 |
} |
384 | 350 |
|
385 | 351 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
386 | 352 |
|
387 |
boolean canRotate()
|
|
353 |
public RubikCube getOldCube()
|
|
388 | 354 |
{ |
389 |
return mCanRotate;
|
|
355 |
return mOldCube;
|
|
390 | 356 |
} |
391 | 357 |
|
392 | 358 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
393 | 359 |
|
394 |
boolean canDrag()
|
|
360 |
public DistortedScreen getScreen()
|
|
395 | 361 |
{ |
396 |
return mCanDrag;
|
|
362 |
return mScreen;
|
|
397 | 363 |
} |
398 | 364 |
|
399 | 365 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
400 | 366 |
|
401 |
RubikCube getCube()
|
|
367 |
public int getNumScrambles()
|
|
402 | 368 |
{ |
403 |
return mNewCube;
|
|
369 |
return mScrambleCubeNum;
|
|
404 | 370 |
} |
405 | 371 |
|
406 | 372 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
RubikCube: renamed RubikSettingsEnum to BaseEffect and moved it to the 'effect' package.