Project

General

Profile

« Previous | Next » 

Revision da36b97e

Added by Leszek Koltunski over 3 years ago

Rex Cube - new mesh, textures and icon.

View differences:

src/main/java/org/distorted/objects/FactorySticker.java
34 34
class FactorySticker
35 35
  {
36 36
  private static final float SQ2 = (float)Math.sqrt(2);
37
  private static final float SQ3 = (float)Math.sqrt(3);
38

  
37
  private static final float REX_X,REX_R,REX_B,REX_A, REX_P, REX_T, REX_C, REX_S;
39 38
  private static FactorySticker mThis;
40 39

  
40
  static
41
    {
42
    float F = REX_D*SQ2;
43
    float G = (1-REX_D)*SQ2/2;
44

  
45
    REX_X = (0.5f-REX_D*REX_D)/(2*REX_D);
46
    REX_R = (float)Math.sqrt(2*REX_X*REX_X+0.5f);
47
    REX_B = (float) ((180/Math.PI)*(2*Math.asin( Math.sqrt(REX_D*REX_D-REX_D+0.5f) / (2*REX_R) )));
48
    REX_A = (float) ((180/Math.PI)*Math.acos(REX_X/REX_R)) - 45;
49
    REX_P = 45 + REX_B/2 + REX_A;
50
    REX_T = (float) ( Math.tan( (Math.PI/180)*(45-REX_P/2) ) );
51
    REX_C = (float)(REX_R/Math.cos((Math.PI/180)*REX_B/2) );
52
    REX_S = (float)(1/Math.sqrt(1+4*G*G/(F*F)));
53
    }
54

  
41 55
///////////////////////////////////////////////////////////////////////////////////////////////////
42 56

  
43 57
  private FactorySticker()
......
246 260

  
247 261
///////////////////////////////////////////////////////////////////////////////////////////////////
248 262

  
249
  void drawRexCornerSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke, float radius)
263
  void drawRexCornerSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke, float radius1, float radius2)
250 264
    {
251 265
    paint.setColor(color);
252 266
    paint.setStyle(Paint.Style.FILL);
......
256 270
    paint.setStyle(Paint.Style.STROKE);
257 271
    paint.setStrokeWidth(stroke*TEXTURE_HEIGHT);
258 272

  
259
    float F  = (0.5f-REX_D)*SQ2*(SQ3-1);
260
    float H1 = F*(1.0f + 2*SQ3/3);
261
    float H2 = F*(0.5f +   SQ3/6);
262
    float D  = H2*SQ3;
263

  
264
    float cx1 = left+ TEXTURE_HEIGHT*0.5f;
265
    float cy1 = top + TEXTURE_HEIGHT*(0.5f+H1);
266
    float cx2 = left+ TEXTURE_HEIGHT*(0.5f-D);
267
    float cy2 = top + TEXTURE_HEIGHT*(0.5f+H2);
268
    float cx3 = left+ TEXTURE_HEIGHT*(0.5f+D);
269
    float cy3 = top + TEXTURE_HEIGHT*(0.5f+H2);
270

  
271
    float R1= TEXTURE_HEIGHT*(1-2*REX_D);
272

  
273
    canvas.drawArc( cx1-R1, cy1-R1, cx1+R1, cy1+R1, 255, 30, false ,paint);
274
    canvas.drawArc( cx2-R1, cy2-R1, cx2+R1, cy2+R1, 315, 30, false ,paint);
275
    canvas.drawArc( cx3-R1, cy3-R1, cx3+R1, cy3+R1, 195, 30, false ,paint);
276

  
277
    float cx   = left+ TEXTURE_HEIGHT*0.5f;
278
    float cy   = top + TEXTURE_HEIGHT*0.5f;
279
    float R2   = radius*TEXTURE_HEIGHT;
280
    float dist = ( (SQ3/3)*F - SQ2*radius )*TEXTURE_HEIGHT;
281
    float dist2= 1.0f*(SQ3/3)*F*TEXTURE_HEIGHT;
282
    float tmp  = SQ2*radius*TEXTURE_HEIGHT;
283
    float distX= (SQ3/2)*dist2 - 1.05f*tmp;
284
    float distY= (0.5f )*dist2 - 0.90f*tmp;
285

  
286
    canvas.drawArc( cx      -R2, cy-dist -R2, cx      +R2, cy-dist +R2, 225, 90, false ,paint);
287
    canvas.drawArc( cx-distX-R2, cy+distY-R2, cx-distX+R2, cy+distY+R2,  75,120, false ,paint);
288
    canvas.drawArc( cx+distX-R2, cy+distY-R2, cx+distX+R2, cy+distY+R2, 345,120, false ,paint);
289
    }
273
    float F = REX_D*SQ2;
274
    float G = (1-REX_D)*SQ2/2;
290 275

  
291
///////////////////////////////////////////////////////////////////////////////////////////////////
276
    float cx1 = left + (0.5f-F/2)*TEXTURE_HEIGHT;
277
    float cx2 = left + (0.5f+F/2)*TEXTURE_HEIGHT;
278
    float cy  = top  + (0.5f+G/3)*TEXTURE_HEIGHT;
292 279

  
293
  void drawRexFaceSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke, float radius)
294
    {
295
    paint.setColor(color);
296
    paint.setStyle(Paint.Style.FILL);
297
    canvas.drawRect(left,top,left+TEXTURE_HEIGHT,top+TEXTURE_HEIGHT,paint);
280
    canvas.drawLine(cx1, cy, cx2, cy, paint);
298 281

  
299
    paint.setColor(COLOR_BLACK);
300
    paint.setStyle(Paint.Style.STROKE);
301
    paint.setStrokeWidth(stroke*TEXTURE_HEIGHT);
282
    float X   = REX_C-F/2;
283
    float R1  = TEXTURE_HEIGHT*(REX_R + 0.5f*stroke);
284
    float cx3 = left + (0.5f-X)*TEXTURE_HEIGHT;
285
    float cx4 = left + (0.5f+X)*TEXTURE_HEIGHT;
302 286

  
303
    float cx1 = left+ TEXTURE_HEIGHT*REX_D;
304
    float cy1 = top + TEXTURE_HEIGHT*(1-REX_D);
305
    float cx2 = left+ TEXTURE_HEIGHT*REX_D;
306
    float cy2 = top + TEXTURE_HEIGHT*REX_D;
307
    float cx3 = left+ TEXTURE_HEIGHT*(1-REX_D);
308
    float cy3 = top + TEXTURE_HEIGHT*REX_D;
309
    float cx4 = left+ TEXTURE_HEIGHT*(1-REX_D);
310
    float cy4 = top + TEXTURE_HEIGHT*(1-REX_D);
311
    float R1  = TEXTURE_HEIGHT*(1-2*REX_D);
312

  
313
    canvas.drawArc( cx1-R1, cy1-R1, cx1+R1, cy1+R1, 300, 30, false ,paint);
314
    canvas.drawArc( cx2-R1, cy2-R1, cx2+R1, cy2+R1,  30, 30, false ,paint);
315
    canvas.drawArc( cx3-R1, cy3-R1, cx3+R1, cy3+R1, 120, 30, false ,paint);
316
    canvas.drawArc( cx4-R1, cy4-R1, cx4+R1, cy4+R1, 210, 30, false ,paint);
317

  
318
    float cx   = left+ TEXTURE_HEIGHT*0.5f;
319
    float cy   = top + TEXTURE_HEIGHT*0.5f;
320
    float R2   = radius*TEXTURE_HEIGHT;
321
    float dist = ( (0.5f-REX_D)*(SQ3-1) - (2*SQ3/3)*radius )*TEXTURE_HEIGHT;
322

  
323
    canvas.drawArc( cx+dist-R2, cy-R2, cx+dist+R2, cy+R2, 330, 60, false ,paint);
324
    canvas.drawArc( cx-R2, cy+dist-R2, cx+R2, cy+dist+R2,  60, 60, false ,paint);
325
    canvas.drawArc( cx-dist-R2, cy-R2, cx-dist+R2, cy+R2, 150, 60, false ,paint);
326
    canvas.drawArc( cx-R2, cy-dist-R2, cx+R2, cy-dist+R2, 240, 60, false ,paint);
287
    canvas.drawArc( cx3-R1, cy-R1, cx3+R1, cy+R1, 360-REX_B/2, REX_B/2, false ,paint);
288
    canvas.drawArc( cx4-R1, cy-R1, cx4+R1, cy+R1, 180        , REX_B/2, false ,paint);
289

  
290
    float cx5 = left + (0.5f+F/2-radius2)*TEXTURE_HEIGHT;
291
    float cx6 = left + (0.5f-F/2+radius2)*TEXTURE_HEIGHT;
292
    float cy1 = top  + (0.5f+G/3-radius2)*TEXTURE_HEIGHT;;
293
    float R2  = TEXTURE_HEIGHT*radius2;
294

  
295
    canvas.drawArc( cx5-R2, cy1-R2, cx5+R2, cy1+R2,  0, 90, false ,paint);
296
    canvas.drawArc( cx6-R2, cy1-R2, cx6+R2, cy1+R2, 90, 90, false ,paint);
297

  
298
    float cx7 = left + 0.5f*TEXTURE_HEIGHT;
299
    float cy2 = top  + (0.5f-2*G/3 + radius1/REX_S)*TEXTURE_HEIGHT;
300
    float R3  = TEXTURE_HEIGHT*(radius1 + 0.5f*stroke);
301
    canvas.drawArc( cx7-R3, cy2-R3, cx7+R3, cy2+R3, 270-(90-REX_B/2), 180-REX_B, false ,paint);
327 302
    }
328 303

  
329 304
///////////////////////////////////////////////////////////////////////////////////////////////////
......
338 313
    paint.setStyle(Paint.Style.STROKE);
339 314
    paint.setStrokeWidth(stroke*TEXTURE_HEIGHT);
340 315

  
341
    final float D = 0.5f - REX_D;
342
    final float F = 0.5f*(0.5f - D*(SQ3-1));
316
    final float D = ( 0.5f - (0.5f-REX_D)/3);
317
    float cx1 = left+ TEXTURE_HEIGHT*(0.5f-REX_X);
318
    float cy1 = top + TEXTURE_HEIGHT*(0.5f+REX_X+D);
319
    float cx2 = left+ TEXTURE_HEIGHT*(0.5f+REX_X);
320
    float R1  = TEXTURE_HEIGHT*REX_R;
321

  
322
    canvas.drawArc( cx1-R1, cy1-R1, cx1+R1, cy1+R1, 315-REX_A-REX_B, REX_B, false ,paint);
323
    canvas.drawArc( cx2-R1, cy1-R1, cx2+R1, cy1+R1, 225+REX_A      , REX_B, false ,paint);
343 324

  
344
    float cx1 = left+ TEXTURE_HEIGHT*REX_D;
345
    float cy  = top + TEXTURE_HEIGHT*(1-REX_D-F+0.5f);
346
    float cx2 = left+ TEXTURE_HEIGHT*(1-REX_D);
347
    float R1  = 1.0f*TEXTURE_HEIGHT*(1-2*REX_D);
325
    float CORR_Y = radius/12;
326
    float CORR_A = 10;
327
    float sin = (float)Math.sin(Math.PI*REX_P/180);
328
    float cx = left + 0.5f*TEXTURE_HEIGHT;
329
    float cy = top  + ( 0.5f + 2*(0.5f-REX_D)/3 -CORR_Y -radius/sin )*TEXTURE_HEIGHT;
330
    float R2  = TEXTURE_HEIGHT*radius;
348 331

  
349
    canvas.drawArc( cx1-R1, cy-R1, cx1+R1, cy+R1, 270, 30, false ,paint);
350
    canvas.drawArc( cx2-R1, cy-R1, cx2+R1, cy+R1, 240, 30, false ,paint);
332
    canvas.drawArc( cx-R2, cy-R2, cx+R2, cy+R2, 90-(REX_P-CORR_A), 2*(REX_P-CORR_A), false ,paint);
351 333

  
352
    float cx = left + TEXTURE_HEIGHT*0.5f;
353
    float R2 = radius*TEXTURE_HEIGHT;
354
    cy       = top + TEXTURE_HEIGHT*(0.5f+F-(2*SQ3/3)*radius);
334
    float F = 0.1f;
335
    float G = 0.6f;
336
    float R3  = TEXTURE_HEIGHT*radius*G*0.9f;
337
    float X = G*radius/REX_T;
338
    float cx4 = left + X*TEXTURE_HEIGHT;
339
    float cx3 = left + (1-X)*TEXTURE_HEIGHT;
340
    float cy3 = top + (0.5f - (0.5f-REX_D)/3 + G*radius - F*stroke)*TEXTURE_HEIGHT;
355 341

  
356
    canvas.drawArc( cx-R2, cy-R2, cx+R2, cy+R2, 60, 60, false ,paint);
342
    canvas.drawArc( cx3-R3, cy3-R3, cx3+R3, cy3+R3, 270           , 90+REX_P, false ,paint);
343
    canvas.drawArc( cx4-R3, cy3-R3, cx4+R3, cy3+R3, 270-(90+REX_P), 90+REX_P, false ,paint);
357 344

  
358
    cy = top + (0.5f-F)*TEXTURE_HEIGHT;
345
    float cy5 = top + D*TEXTURE_HEIGHT;
359 346

  
360
    paint.setStrokeWidth(0.6f*stroke*TEXTURE_HEIGHT);
361
    canvas.drawLine(left, cy, left+TEXTURE_HEIGHT, cy, paint);
347
    paint.setStrokeWidth((1-2*F)*stroke*TEXTURE_HEIGHT);
348
    canvas.drawLine(left, cy5, left+TEXTURE_HEIGHT, cy5, paint);
362 349
    }
363 350
  }

Also available in: Unified diff